multiserver/readwrite.go

88 lines
1.4 KiB
Go

package main
import (
"bytes"
"encoding/binary"
"io"
"github.com/anon55555/mt/rudp"
)
func ByteReader(pkt rudp.Pkt) *bytes.Reader {
buf := make([]byte, rudp.MaxUnrelPktSize)
n, _ := pkt.Read(buf)
buf = buf[:n]
return bytes.NewReader(buf)
}
func ReadUint8(r io.Reader) uint8 {
b := make([]byte, 1)
r.Read(b)
return uint8(b[0])
}
func WriteUint8(w io.Writer, v uint8) {
w.Write([]byte{v})
}
func ReadUint16(r io.Reader) uint16 {
b := make([]byte, 2)
r.Read(b)
return binary.BigEndian.Uint16(b)
}
func WriteUint16(w io.Writer, v uint16) {
b := make([]byte, 2)
binary.BigEndian.PutUint16(b, v)
w.Write(b)
}
func ReadUint32(r io.Reader) uint32 {
b := make([]byte, 4)
r.Read(b)
return binary.BigEndian.Uint32(b)
}
func WriteUint32(w io.Writer, v uint32) {
b := make([]byte, 4)
binary.BigEndian.PutUint32(b, v)
w.Write(b)
}
func ReadUint64(r io.Reader) uint64 {
b := make([]byte, 8)
r.Read(b)
return binary.BigEndian.Uint64(b)
}
func WriteUint64(w io.Writer, v uint64) {
b := make([]byte, 8)
binary.BigEndian.PutUint64(b, v)
w.Write(b)
}
func ReadBytes16(r io.Reader) []byte {
l := ReadUint16(r)
b := make([]byte, l)
r.Read(b)
return b
}
func WriteBytes16(w io.Writer, v []byte) {
WriteUint16(w, uint16(len(v)))
w.Write(v)
}
func ReadBytes32(r io.Reader) []byte {
l := ReadUint32(r)
b := make([]byte, l)
r.Read(b)
return b
}
func WriteBytes32(w io.Writer, v []byte) {
WriteUint32(w, uint32(len(v)))
w.Write(v)
}