From 4f5b6441c8620ba920db8a1f00aeed8637c8b505 Mon Sep 17 00:00:00 2001 From: adman Date: Tue, 25 Nov 2025 20:57:04 +0100 Subject: [PATCH] Refactor: Consolidate packages into `modules`, enhance packet handling, and add `UnCodablePacket` structure --- connection.go | 40 ++++++++++++++++++---------- examples/client/main.go | 12 ++++----- modules/config_ignorer.go | 7 +++++ modules/{loginclient => }/login.go | 2 +- modules/{statusclient => }/status.go | 2 +- 5 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 modules/config_ignorer.go rename modules/{loginclient => }/login.go (99%) rename modules/{statusclient => }/status.go (98%) diff --git a/connection.go b/connection.go index b952eef..57ca08e 100644 --- a/connection.go +++ b/connection.go @@ -4,7 +4,6 @@ import ( "bytes" "compress/zlib" "errors" - "fmt" "io" "net" @@ -14,6 +13,12 @@ import ( var BadPacketTypeError = errors.New("bad packet type") +// UnCodablePacket represents a packet that could not be decoded due to querser not supporting all packets. +type UnCodablePacket struct { + Err error + Data []byte +} + type Actor int const ( @@ -54,15 +59,22 @@ type Conn struct { } func (c *Conn) Send(packet any) (err error) { - packetIdentifier := generated.TypeToPacketIdentifier(c.Version, c.Actor.SendDirection(), c.State, packet) - if packetIdentifier == "" { - err = BadPacketTypeError - return - } - rawPacketBuffer := bytes.NewBuffer(nil) - err = generated.EncodePacket(c.Version, c.Actor.SendDirection(), c.State, packetIdentifier, packet, rawPacketBuffer) - if err != nil { - return + var rawPacketBytes []byte + switch packet := packet.(type) { + case UnCodablePacket: + rawPacketBytes = packet.Data + default: + packetIdentifier := generated.TypeToPacketIdentifier(c.Version, c.Actor.SendDirection(), c.State, packet) + if packetIdentifier == "" { + err = BadPacketTypeError + return + } + rawPacketBuffer := bytes.NewBuffer(nil) + err = generated.EncodePacket(c.Version, c.Actor.SendDirection(), c.State, packetIdentifier, packet, rawPacketBuffer) + if err != nil { + return + } + rawPacketBytes = rawPacketBuffer.Bytes() } var packetBytes []byte if c.CompressionThreshold > 0 { @@ -72,7 +84,7 @@ func (c *Conn) Send(packet any) (err error) { if err != nil { return } - _, err = zlib.NewWriter(packetBuffer).Write(rawPacketBuffer.Bytes()) + _, err = zlib.NewWriter(packetBuffer).Write(rawPacketBytes) if err != nil { return } @@ -81,14 +93,14 @@ func (c *Conn) Send(packet any) (err error) { if err != nil { return } - _, err = packetBuffer.Write(rawPacketBuffer.Bytes()) + _, err = packetBuffer.Write(rawPacketBytes) if err != nil { return } } packetBytes = packetBuffer.Bytes() } else { - packetBytes = rawPacketBuffer.Bytes() + packetBytes = rawPacketBytes } err = queser.VarInt(len(packetBytes)).Encode(c.W) if err != nil { @@ -136,7 +148,7 @@ func (c *Conn) Receive() (packet any, err error) { packetBuff := bytes.NewBuffer(packetBytes) packet, err = generated.DecodePacket(c.Version, c.Actor.ReceiveDirection(), c.State, packetBuff) if err != nil { - fmt.Printf("%#v\n", packetBytes) + packet = UnCodablePacket{Err: err, Data: packetBytes} return } return diff --git a/examples/client/main.go b/examples/client/main.go index 71be96a..2c0f2dd 100644 --- a/examples/client/main.go +++ b/examples/client/main.go @@ -4,15 +4,15 @@ import ( "errors" "fmt" "strom" - "strom/modules/loginclient" + "strom/modules" "github.com/google/uuid" ) -var altAccount = loginclient.Account{ - Username: "449stan_Ytb", - Uuid: uuid.MustParse("caec076c80c34637a31b44874ffa009d"), - Token: "eyJraWQiOiIwNDkxODEiLCJhbGciOiJSUzI1NiJ9.eyJ4dWlkIjoiMjUzNTQwOTA1OTUxMzgxOSIsImFnZyI6IkFkdWx0Iiwic3ViIjoiMjY4OGQ0ZTktZmZiZi00N2FkLTlkYWYtZDU3ZWY5Yzg5YWE0IiwiYXV0aCI6IlhCT1giLCJucyI6ImRlZmF1bHQiLCJyb2xlcyI6W10sImlzcyI6ImF1dGhlbnRpY2F0aW9uIiwiZmxhZ3MiOlsib3JkZXJzXzIwMjIiLCJtdWx0aXBsYXllciIsInR3b2ZhY3RvcmF1dGgiLCJtc2FtaWdyYXRpb25fc3RhZ2U0Il0sInByb2ZpbGVzIjp7Im1jIjoiY2FlYzA3NmMtODBjMy00NjM3LWEzMWItNDQ4NzRmZmEwMDlkIn0sInBsYXRmb3JtIjoiUENfTEFVTkNIRVIiLCJwZmQiOlt7InR5cGUiOiJtYyIsImlkIjoiY2FlYzA3NmMtODBjMy00NjM3LWEzMWItNDQ4NzRmZmEwMDlkIiwibmFtZSI6IjQ0OXN0YW5fWXRiIn1dLCJuYmYiOjE3NjI4NDc4OTgsImV4cCI6MTc2MjkzNDI5OCwiaWF0IjoxNzYyODQ3ODk4LCJhaWQiOiJjMzZhOWZiNi00ZjJhLTQxZmYtOTBiZC1hZTdjYzkyMDMxZWIifQ.bcyq-FrP4XXESyKBr4TFstsjw8tgjY5cz_p7ansohPV_VfbKqBeLV-E1XYySwKj6BRuc0dAuW6nGdwE9qlv94tRtapVb1q1W__-GguVWOD16TaEi6dmzDyw8--lpI6eL657lPkzFaVeNrSHNPCPn0ltGcZzlOv1XYJwZM8D1yj57x7aXaOMmJqLY8R5zCgfWp_TnGPjJrbd_gV-N5wP9z_vL6jQKj5bvaTkYqItLq5tTFWbX1wAoeSV47D3mtZfx2N4rGgeUSQ1bYanUZ_eMuH6hSwrwxzqn_-HwN2PA7j0VFVUOu54FRqJbw8D4H6tAf3SY1xIjFC5GUu22IbVP3Q", +var altAccount = modules.Account{ + Username: "laibergraceful70", + Uuid: uuid.MustParse("3a863af533e5452591e913e021bfa724"), + Token: "eyJraWQiOiIwNDkxODEiLCJhbGciOiJSUzI1NiJ9.eyJ4dWlkIjoiMjc3NzIxOTc3MDIzMjM1OCIsImFnZyI6IkFkdWx0Iiwic3ViIjoiMzczMjI0OTktZTAwYS0…JRnCbAsBJl5zg-GAu6NkX1JCvpWdQkgFb0H5RYi2dIUKhNpP57WG2gh562T3BoPELVXDQZQVUBzDFeDuVDGGSkKmSmhzO7l-fEPBt2CjnaLCyr1FmYFSRzDBy1w", } type Client struct { @@ -25,7 +25,7 @@ func (c *Client) Default(event any) (err error) { } func (c *Client) OnStart(_ strom.OnStart) (err error) { - err = loginclient.Login(c.Conn, altAccount) + err = modules.Login(c.Conn, altAccount) if errors.Is(err, strom.HandlerDone) { return nil } diff --git a/modules/config_ignorer.go b/modules/config_ignorer.go new file mode 100644 index 0000000..b5d8eef --- /dev/null +++ b/modules/config_ignorer.go @@ -0,0 +1,7 @@ +package modules + +import "strom" + +func IgnoreConfig(c *strom.Conn) (err error) { + return +} diff --git a/modules/loginclient/login.go b/modules/login.go similarity index 99% rename from modules/loginclient/login.go rename to modules/login.go index b814880..28afd53 100644 --- a/modules/loginclient/login.go +++ b/modules/login.go @@ -1,4 +1,4 @@ -package loginclient +package modules import ( "bytes" diff --git a/modules/statusclient/status.go b/modules/status.go similarity index 98% rename from modules/statusclient/status.go rename to modules/status.go index 2fdbf9d..258053e 100644 --- a/modules/statusclient/status.go +++ b/modules/status.go @@ -1,4 +1,4 @@ -package statusclient +package modules import ( "fmt"