mc root source folder cleanup

This commit is contained in:
adman
2026-06-27 13:54:54 +02:00
parent b2784574bd
commit 666f250b3e
480 changed files with 325 additions and 325 deletions
+67
View File
@@ -0,0 +1,67 @@
package replay
import (
"bytes"
"encoding/binary"
"io"
"reflect"
proto2 "github.com/admin-else/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base"
)
type Reader struct {
r io.Reader
State proto_base.State
Version int32
}
func NewReader(r io.Reader) *Reader {
return &Reader{r: r}
}
func (r *Reader) ReadRaw() (packetData []byte, timestamp, length uint32, err error) {
err = binary.Read(r.r, binary.BigEndian, &timestamp)
if err != nil {
return
}
err = binary.Read(r.r, binary.BigEndian, &length)
if err != nil {
return
}
// Read the packet data into a byte slice
packetData = make([]byte, length)
_, err = io.ReadFull(r.r, packetData)
return
}
func (r *Reader) ReadPacket() (packet proto_base.EncodeDecodeAble, err error) {
packetData, _, _, err := r.ReadRaw()
if err != nil {
return
}
b := bytes.NewReader(packetData)
packetId, err := proto_base.DecodeVarInt(b)
if err != nil {
return
}
// Calculate position after reading the packet ID
// indexafterid represents how many bytes we've read so far
indexafterid := int(b.Size()) - b.Len()
i, ok := proto2.LookUpTypeByPacketInfo(proto_base.ToClient, r.State, packetId, r.Version)
if !ok {
packet = &proto2.UnCodablePacket{Err: proto2.BadPacketIdErr, Data: packetData, Info: i}
return
}
packet = reflect.New(reflect.TypeOf(i.Type).Elem()).Interface().(proto_base.EncodeDecodeAble)
err = packet.Decode(b)
if err != nil {
packet = &proto2.UnCodablePacket{Err: err, Data: packetData[indexafterid:], Info: i}
return
}
return
}
+51
View File
@@ -0,0 +1,51 @@
package replay
import (
"bytes"
"encoding/binary"
"io"
proto2 "github.com/admin-else/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base"
)
type Writer struct {
w io.Writer
}
func NewWriter(w io.Writer) *Writer {
return &Writer{w: w}
}
func (w *Writer) WriteRaw(p []byte, timestamp uint32) (err error) {
err = binary.Write(w.w, binary.BigEndian, timestamp)
if err != nil {
return
}
err = binary.Write(w.w, binary.BigEndian, uint32(len(p)))
if err != nil {
return
}
_, err = w.w.Write(p)
return
}
func (w *Writer) WritePacket(packet proto_base.EncodeDecodeAble, timestamp uint32) (err error) {
b := bytes.NewBuffer(nil)
info, ok := proto2.LookupPacketInfoByType(packet)
if !ok {
return proto2.BadPacketIdErr
}
err = proto_base.EncodeVarInt(b, info.PacketId)
if err != nil {
return
}
err = packet.Encode(b)
if err != nil {
return
}
return w.WriteRaw(b.Bytes(), timestamp)
}