Add login and status clients with modular compression handling

This commit is contained in:
adman
2025-11-10 23:24:58 +01:00
parent 030ea679a7
commit 27f34ec149
4 changed files with 183 additions and 41 deletions
+66
View File
@@ -0,0 +1,66 @@
package modules
import (
"fmt"
"strconv"
"strings"
"strom"
"github.com/admin-else/queser"
"github.com/admin-else/queser/data"
"github.com/admin-else/queser/generated/v1_21_8"
"github.com/google/uuid"
)
type Account struct {
Username string
UUID uuid.UUID
Token string
}
type LoginClient struct {
*strom.Connection
Account Account
}
func (s *LoginClient) Default(event any) (err error) {
err = fmt.Errorf("unexpected event: %T%v", event, event)
return
}
func (s *LoginClient) OnStart(_ strom.OnStart) (err error) {
parts := strings.Split(s.RemoteAddr().String(), ":")
versionData, err := data.LookUpProtocolVersionByName(s.Version)
if err != nil {
return
}
port, err := strconv.Atoi(parts[1])
if err != nil {
return
}
err = s.Send(v1_21_8.HandshakingToServerPacketSetProtocol{
ProtocolVersion: queser.VarInt(versionData.Version),
ServerHost: parts[0],
ServerPort: uint16(port),
NextState: queser.VarInt(queser.Login),
})
if err != nil {
return
}
s.State = queser.Login
err = s.Send(v1_21_8.LoginToServerPacketLoginStart{Username: s.Account.Username, PlayerUUID: s.Account.UUID})
return
}
func (s *LoginClient) OnCompress(compress v1_21_8.LoginToClientPacketCompress) (err error) {
s.CompressionThreshold = int32(compress.Threshold)
return
}
func (s *LoginClient) OnSuccess(success v1_21_8.LoginToClientPacketSuccess) (err error) {
err = s.Send(v1_21_8.LoginToServerPacketLoginAcknowledged{})
if err != nil {
return
}
s.State = queser.Configuration
return
}
+52
View File
@@ -0,0 +1,52 @@
package modules
import (
"fmt"
"strconv"
"strings"
"strom"
"github.com/admin-else/queser"
"github.com/admin-else/queser/data"
"github.com/admin-else/queser/generated/v1_21_8"
)
type StatusClient struct {
*strom.Connection
Status string
}
func (s *StatusClient) Default(event any) (err error) {
err = fmt.Errorf("unexpected event: %v", event)
return
}
func (s *StatusClient) OnStart(_ strom.OnStart) (err error) {
parts := strings.Split(s.RemoteAddr().String(), ":")
versionData, err := data.LookUpProtocolVersionByName(s.Version)
if err != nil {
return
}
port, err := strconv.Atoi(parts[1])
if err != nil {
return
}
err = s.Send(v1_21_8.HandshakingToServerPacketSetProtocol{
ProtocolVersion: queser.VarInt(versionData.Version),
ServerHost: parts[0],
ServerPort: uint16(port),
NextState: queser.VarInt(queser.Status),
})
if err != nil {
return
}
s.State = queser.Status
err = s.Send(v1_21_8.StatusToServerPacketPingStart{})
return
}
func (s *StatusClient) OnStatus(p v1_21_8.StatusToClientPacketServerInfo) (err error) {
s.Status = p.Response
err = strom.HandlerDone
return
}