feat(go): Port full Ananta private server to Go architecture
This commit is contained in:
1 parent
ca2e80f9b7
commit
c73d744649
28 files changed
+3585
-57
No files matched your search
@@ -0,0 +1,127 @@
|
||||
package protocol
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"math"
|
||||
)
|
||||
|
||||
type UxWriter struct {
|
||||
buf bytes.Buffer
|
||||
}
|
||||
|
||||
func NewUxWriter() *UxWriter {
|
||||
return &UxWriter{}
|
||||
}
|
||||
|
||||
func (w *UxWriter) U8(val byte) *UxWriter {
|
||||
w.buf.WriteByte(val)
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) Bool(val bool) *UxWriter {
|
||||
if val {
|
||||
w.buf.WriteByte(1)
|
||||
} else {
|
||||
w.buf.WriteByte(0)
|
||||
}
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) I16(val int16) *UxWriter {
|
||||
var b [2]byte
|
||||
binary.LittleEndian.PutUint16(b[:], uint16(val))
|
||||
w.buf.Write(b[:])
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) U16(val uint16) *UxWriter {
|
||||
var b [2]byte
|
||||
binary.LittleEndian.PutUint16(b[:], val)
|
||||
w.buf.Write(b[:])
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) I32(val int32) *UxWriter {
|
||||
var b [4]byte
|
||||
binary.LittleEndian.PutUint32(b[:], uint32(val))
|
||||
w.buf.Write(b[:])
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) U32(val uint32) *UxWriter {
|
||||
var b [4]byte
|
||||
binary.LittleEndian.PutUint32(b[:], val)
|
||||
w.buf.Write(b[:])
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) I64(val int64) *UxWriter {
|
||||
var b [8]byte
|
||||
binary.LittleEndian.PutUint64(b[:], uint64(val))
|
||||
w.buf.Write(b[:])
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) U64(val uint64) *UxWriter {
|
||||
var b [8]byte
|
||||
binary.LittleEndian.PutUint64(b[:], val)
|
||||
w.buf.Write(b[:])
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) F32(val float32) *UxWriter {
|
||||
return w.U32(math.Float32bits(val))
|
||||
}
|
||||
|
||||
func (w *UxWriter) F64(val float64) *UxWriter {
|
||||
return w.U64(math.Float64bits(val))
|
||||
}
|
||||
|
||||
func (w *UxWriter) WriteVarInt(val int) *UxWriter {
|
||||
v := uint32(val)
|
||||
for v >= 0x80 {
|
||||
w.buf.WriteByte(byte(v | 0x80))
|
||||
v >>= 7
|
||||
}
|
||||
w.buf.WriteByte(byte(v))
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) Int7(val int) *UxWriter {
|
||||
if val < 0 {
|
||||
val = 0
|
||||
}
|
||||
return w.WriteVarInt(val + 1)
|
||||
}
|
||||
|
||||
func (w *UxWriter) Raw7(val int) *UxWriter {
|
||||
if val < 0 {
|
||||
val = 0
|
||||
}
|
||||
return w.WriteVarInt(val)
|
||||
}
|
||||
|
||||
func (w *UxWriter) UxString(str string) *UxWriter {
|
||||
utf8 := []byte(str)
|
||||
w.WriteVarInt(len(utf8) + 1)
|
||||
w.buf.Write(utf8)
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) UxStringNullable(str *string) *UxWriter {
|
||||
if str == nil {
|
||||
w.buf.WriteByte(0x00)
|
||||
return w
|
||||
}
|
||||
return w.UxString(*str)
|
||||
}
|
||||
|
||||
func (w *UxWriter) Raw(b []byte) *UxWriter {
|
||||
w.buf.Write(b)
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *UxWriter) Bytes() []byte {
|
||||
return w.buf.Bytes()
|
||||
}
|
||||
Reference in new issue
Block a user