1.19.2 chat support

This commit is contained in:
Tnze
2022-11-30 18:50:10 +08:00
parent 0b7ef620d9
commit 55d79f791a
13 changed files with 431 additions and 244 deletions

View File

@ -95,13 +95,13 @@ func (b Boolean) WriteTo(w io.Writer) (int64, error) {
}
func (b *Boolean) ReadFrom(r io.Reader) (n int64, err error) {
v, err := readByte(r)
n, v, err := readByte(r)
if err != nil {
return 1, err
return n, err
}
*b = v != 0
return 1, nil
return n, nil
}
func (s String) WriteTo(w io.Writer) (int64, error) {
@ -134,13 +134,14 @@ func (s *String) ReadFrom(r io.Reader) (n int64, err error) {
}
// readByte read one byte from io.Reader
func readByte(r io.Reader) (byte, error) {
func readByte(r io.Reader) (int64, byte, error) {
if r, ok := r.(io.ByteReader); ok {
return r.ReadByte()
v, err := r.ReadByte()
return 1, v, err
}
var v [1]byte
_, err := io.ReadFull(r, v[:])
return v[0], err
n, err := r.Read(v[:])
return int64(n), v[0], err
}
func (b Byte) WriteTo(w io.Writer) (n int64, err error) {
@ -149,12 +150,12 @@ func (b Byte) WriteTo(w io.Writer) (n int64, err error) {
}
func (b *Byte) ReadFrom(r io.Reader) (n int64, err error) {
v, err := readByte(r)
n, v, err := readByte(r)
if err != nil {
return 0, err
return n, err
}
*b = Byte(v)
return 1, nil
return n, nil
}
func (u UnsignedByte) WriteTo(w io.Writer) (n int64, err error) {
@ -163,12 +164,12 @@ func (u UnsignedByte) WriteTo(w io.Writer) (n int64, err error) {
}
func (u *UnsignedByte) ReadFrom(r io.Reader) (n int64, err error) {
v, err := readByte(r)
n, v, err := readByte(r)
if err != nil {
return 0, err
return n, err
}
*u = UnsignedByte(v)
return 1, nil
return n, nil
}
func (s Short) WriteTo(w io.Writer) (int64, error) {
@ -267,17 +268,19 @@ func (v VarInt) WriteTo(w io.Writer) (n int64, err error) {
func (v *VarInt) ReadFrom(r io.Reader) (n int64, err error) {
var V uint32
for sec := byte(0x80); sec&0x80 != 0; n++ {
if n > MaxVarIntLen {
var num, n2 int64
for sec := byte(0x80); sec&0x80 != 0; num++ {
if num > MaxVarIntLen {
return n, errors.New("VarInt is too big")
}
sec, err = readByte(r)
n2, sec, err = readByte(r)
n += n2
if err != nil {
return n, err
}
V |= uint32(sec&0x7F) << uint32(7*n)
V |= uint32(sec&0x7F) << uint32(7*num)
}
*v = VarInt(V)
@ -304,16 +307,18 @@ func (v VarLong) WriteTo(w io.Writer) (n int64, err error) {
func (v *VarLong) ReadFrom(r io.Reader) (n int64, err error) {
var V uint64
for sec := byte(0x80); sec&0x80 != 0; n++ {
if n >= MaxVarLongLen {
var num, n2 int64
for sec := byte(0x80); sec&0x80 != 0; num++ {
if num >= MaxVarLongLen {
return n, errors.New("VarLong is too big")
}
sec, err = readByte(r)
n2, sec, err = readByte(r)
n += n2
if err != nil {
return
}
V |= uint64(sec&0x7F) << uint64(7*n)
V |= uint64(sec&0x7F) << uint64(7*num)
}
*v = VarLong(V)