Unify all components

This commit is contained in:
Tnze
2021-12-24 11:45:50 +08:00
parent 322188d254
commit dccbf7ce46
6 changed files with 137 additions and 76 deletions

View File

@ -1,6 +1,7 @@
package server
import (
"strconv"
"sync"
"github.com/google/uuid"
@ -18,6 +19,8 @@ type Player struct {
EntityID int32
Gamemode byte
handlers map[int32][]packetHandlerFunc
errChan chan error
}
// Packet757 is a packet in protocol 757.
@ -28,7 +31,24 @@ type Packet757 pk.Packet
func (p *Player) WritePacket(packet Packet757) error {
p.writeLock.Lock()
defer p.writeLock.Unlock()
return p.Conn.WritePacket(pk.Packet(packet))
err := p.Conn.WritePacket(pk.Packet(packet))
if err != nil {
return WritePacketError{Err: err, ID: packet.ID}
}
return nil
}
type WritePacketError struct {
Err error
ID int32
}
func (s WritePacketError) Error() string {
return "server: send packet " + strconv.FormatInt(int64(s.ID), 16) + " error: " + s.Err.Error()
}
func (s WritePacketError) Unwrap() error {
return s.Err
}
type PacketHandler struct {
@ -38,8 +58,7 @@ type PacketHandler struct {
type packetHandlerFunc func(packet Packet757) error
func (p *Player) Add(ph PacketHandler) {
func (p *Player) AddHandler(ph PacketHandler) {
if p.handlers == nil {
p.handlers = make(map[int32][]packetHandlerFunc)
}
@ -47,5 +66,18 @@ func (p *Player) Add(ph PacketHandler) {
}
func (p *Player) PutErr(err error) {
// TODO: handle errors
select {
case p.errChan <- err:
default:
// previous error exist, ignore this.
}
}
func (p *Player) GetErr() error {
select {
case err := <-p.errChan:
return err
default:
return nil
}
}