Decode ChatMsg as chat.Message but not pk.String
This commit is contained in:
@ -150,22 +150,14 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
func handleDisconnectPacket(c *Client, p pk.Packet) error {
|
func handleDisconnectPacket(c *Client, p pk.Packet) error {
|
||||||
var rowReason pk.String
|
var reason chat.Message
|
||||||
err := p.Scan(&rowReason)
|
|
||||||
|
err := p.Scan(&reason)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Events.Disconnect != nil {
|
return c.Events.Disconnect(reason)
|
||||||
var reason chat.Message
|
|
||||||
err := reason.UnmarshalJSON([]byte(rowReason))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.Events.Disconnect(reason)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// func handleSetSlotPacket(g *Client, r *bytes.Reader) error {
|
// func handleSetSlotPacket(g *Client, r *bytes.Reader) error {
|
||||||
@ -259,21 +251,19 @@ func handleDisconnectPacket(c *Client, p pk.Packet) error {
|
|||||||
// return nil
|
// return nil
|
||||||
// }
|
// }
|
||||||
|
|
||||||
func handleChatMessagePacket(c *Client, p pk.Packet) error {
|
func handleChatMessagePacket(c *Client, p pk.Packet) (err error) {
|
||||||
var (
|
var (
|
||||||
s pk.String
|
s chat.Message
|
||||||
pos pk.Byte
|
pos pk.Byte
|
||||||
)
|
)
|
||||||
|
|
||||||
if err := p.Scan(&s, &pos); err != nil {
|
err = p.Scan(&s, &pos)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var cm chat.Message
|
if c.Events.ChatMsg != nil {
|
||||||
err := cm.UnmarshalJSON([]byte(s))
|
err = c.Events.ChatMsg(s)
|
||||||
|
|
||||||
if err == nil && c.Events.ChatMsg != nil {
|
|
||||||
err = c.Events.ChatMsg(cm)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
@ -10,7 +10,6 @@ import (
|
|||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@ -63,7 +62,7 @@ type encryptionRequest struct {
|
|||||||
VerifyToken []byte
|
VerifyToken []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *encryptionRequest) Decode(r io.ByteReader) error {
|
func (e *encryptionRequest) Decode(r pk.ComByteReader) error {
|
||||||
var serverID pk.String
|
var serverID pk.String
|
||||||
if err := serverID.Decode(r); err != nil {
|
if err := serverID.Decode(r); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -3,9 +3,11 @@ package chat
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Tnze/go-mc/data"
|
"github.com/Tnze/go-mc/data"
|
||||||
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
)
|
)
|
||||||
|
|
||||||
//Message is a message sent by other
|
//Message is a message sent by other
|
||||||
@ -36,6 +38,16 @@ func (m *Message) UnmarshalJSON(jsonMsg []byte) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Decode a ChatMsg packet
|
||||||
|
func (m *Message) Decode(r pk.ComByteReader) error {
|
||||||
|
var Len pk.VarInt
|
||||||
|
if err := Len.Decode(r); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.NewDecoder(io.LimitReader(r, int64(Len))).Decode(m)
|
||||||
|
}
|
||||||
|
|
||||||
var colors = map[string]int{
|
var colors = map[string]int{
|
||||||
"black": 30,
|
"black": 30,
|
||||||
"dark_blue": 34,
|
"dark_blue": 34,
|
||||||
|
@ -15,7 +15,13 @@ type FieldEncoder interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type FieldDecoder interface {
|
type FieldDecoder interface {
|
||||||
Decode(r io.ByteReader) error
|
Decode(r ComByteReader) error
|
||||||
|
}
|
||||||
|
|
||||||
|
//ComByteReader is both io.Reader and io.ByteReader
|
||||||
|
type ComByteReader interface {
|
||||||
|
io.ByteReader
|
||||||
|
io.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@ -63,7 +69,7 @@ type (
|
|||||||
)
|
)
|
||||||
|
|
||||||
//ReadNBytes read N bytes from bytes.Reader
|
//ReadNBytes read N bytes from bytes.Reader
|
||||||
func ReadNBytes(r io.ByteReader, n int) (bs []byte, err error) {
|
func ReadNBytes(r ComByteReader, n int) (bs []byte, err error) {
|
||||||
bs = make([]byte, n)
|
bs = make([]byte, n)
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
bs[i], err = r.ReadByte()
|
bs[i], err = r.ReadByte()
|
||||||
@ -83,7 +89,7 @@ func (b Boolean) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a Boolean
|
//Decode a Boolean
|
||||||
func (b *Boolean) Decode(r io.ByteReader) error {
|
func (b *Boolean) Decode(r ComByteReader) error {
|
||||||
v, err := r.ReadByte()
|
v, err := r.ReadByte()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -102,7 +108,7 @@ func (s String) Encode() (p []byte) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a String
|
//Decode a String
|
||||||
func (s *String) Decode(r io.ByteReader) error {
|
func (s *String) Decode(r ComByteReader) error {
|
||||||
var l VarInt //String length
|
var l VarInt //String length
|
||||||
if err := l.Decode(r); err != nil {
|
if err := l.Decode(r); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -123,7 +129,7 @@ func (b Byte) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a Byte
|
//Decode a Byte
|
||||||
func (b *Byte) Decode(r io.ByteReader) error {
|
func (b *Byte) Decode(r ComByteReader) error {
|
||||||
v, err := r.ReadByte()
|
v, err := r.ReadByte()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -138,7 +144,7 @@ func (ub UnsignedByte) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a UnsignedByte
|
//Decode a UnsignedByte
|
||||||
func (ub *UnsignedByte) Decode(r io.ByteReader) error {
|
func (ub *UnsignedByte) Decode(r ComByteReader) error {
|
||||||
v, err := r.ReadByte()
|
v, err := r.ReadByte()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -157,7 +163,7 @@ func (s Short) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a Short
|
//Decode a Short
|
||||||
func (s *Short) Decode(r io.ByteReader) error {
|
func (s *Short) Decode(r ComByteReader) error {
|
||||||
bs, err := ReadNBytes(r, 2)
|
bs, err := ReadNBytes(r, 2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -177,7 +183,7 @@ func (us UnsignedShort) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a UnsignedShort
|
//Decode a UnsignedShort
|
||||||
func (us *UnsignedShort) Decode(r io.ByteReader) error {
|
func (us *UnsignedShort) Decode(r ComByteReader) error {
|
||||||
bs, err := ReadNBytes(r, 2)
|
bs, err := ReadNBytes(r, 2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -197,7 +203,7 @@ func (i Int) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a Int
|
//Decode a Int
|
||||||
func (i *Int) Decode(r io.ByteReader) error {
|
func (i *Int) Decode(r ComByteReader) error {
|
||||||
bs, err := ReadNBytes(r, 4)
|
bs, err := ReadNBytes(r, 4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -217,7 +223,7 @@ func (l Long) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a Long
|
//Decode a Long
|
||||||
func (l *Long) Decode(r io.ByteReader) error {
|
func (l *Long) Decode(r ComByteReader) error {
|
||||||
bs, err := ReadNBytes(r, 8)
|
bs, err := ReadNBytes(r, 8)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -246,7 +252,7 @@ func (v VarInt) Encode() (vi []byte) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Decode a VarInt
|
//Decode a VarInt
|
||||||
func (v *VarInt) Decode(r io.ByteReader) error {
|
func (v *VarInt) Decode(r ComByteReader) error {
|
||||||
var n uint32
|
var n uint32
|
||||||
for i := 0; i < 5; i++ { //读数据前的长度标记
|
for i := 0; i < 5; i++ { //读数据前的长度标记
|
||||||
sec, err := r.ReadByte()
|
sec, err := r.ReadByte()
|
||||||
@ -277,7 +283,7 @@ func (p Position) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Decode a Position
|
// Decode a Position
|
||||||
func (p *Position) Decode(r io.ByteReader) error {
|
func (p *Position) Decode(r ComByteReader) error {
|
||||||
var v Long
|
var v Long
|
||||||
if err := v.Decode(r); err != nil {
|
if err := v.Decode(r); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -308,7 +314,7 @@ func (f Float) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Decode a Float
|
// Decode a Float
|
||||||
func (f *Float) Decode(r io.ByteReader) error {
|
func (f *Float) Decode(r ComByteReader) error {
|
||||||
var v Int
|
var v Int
|
||||||
if err := v.Decode(r); err != nil {
|
if err := v.Decode(r); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -324,7 +330,7 @@ func (d Double) Encode() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Decode a Double
|
// Decode a Double
|
||||||
func (d *Double) Decode(r io.ByteReader) error {
|
func (d *Double) Decode(r ComByteReader) error {
|
||||||
var v Long
|
var v Long
|
||||||
if err := v.Decode(r); err != nil {
|
if err := v.Decode(r); err != nil {
|
||||||
return err
|
return err
|
||||||
|
Reference in New Issue
Block a user