Files
got-mod-customserver-server/internal/handlers/auth.go
Jose Luis Montañes Ojados dbab788e6b init commit
2026-01-14 21:33:21 +01:00

73 lines
2.3 KiB
Go

package handlers
import (
"customServer/internal/protocol"
"customServer/internal/state"
"fmt"
"net"
"time"
)
func HandleAsyncAuthRequest(conn net.Conn, requestData []byte) ([]byte, int) {
fmt.Println("[TCP] Handling AsyncAuthRequest")
// Session Message
sessionData := make([]byte, 0)
// field 1 (Id), Varint (WireType 0)
sessionData = append(sessionData, 0x08)
sessionData = append(sessionData, protocol.EncodeVarint(uint64(time.Now().UnixNano()))...)
// Player Message
player := state.GetMockPlayerBytes()
// AsyncConnectedRequest
asyncConnected := make([]byte, 0)
// field 1 (Session), message
asyncConnected = append(asyncConnected, 0x0a)
asyncConnected = append(asyncConnected, protocol.EncodeVarint(uint64(len(sessionData)))...)
asyncConnected = append(asyncConnected, sessionData...)
// field 2 (Player), message
asyncConnected = append(asyncConnected, 0x12)
asyncConnected = append(asyncConnected, protocol.EncodeVarint(uint64(len(player)))...)
asyncConnected = append(asyncConnected, player...)
return asyncConnected, 406
}
func HandlePingRequest(conn net.Conn, requestData []byte) ([]byte, int) {
fmt.Println("[TCP] Handling PingRequest")
// The client sends a PingRequest with a timestamp (field 1).
// We should respond with a PingRequest (777) containing the same timestamp.
// Extract timestamp if possible, otherwise just send back a default one
// For simplicity, we just echo back what we got if it's small, or send a new one.
return requestData, 777
}
func HandleAsyncDisconnectRequest(conn net.Conn, requestData []byte) ([]byte, int) {
fmt.Println("[TCP] Handling AsyncDisconnectRequest")
return []byte{}, 401
}
func HandleAskServerStatisticsRequest(conn net.Conn, requestData []byte) ([]byte, int) {
fmt.Println("[TCP] Handling AskServerStatisticsRequest")
// Return ServerStatisticsRequest (409)
// Fields: 1:HostedGames, 2:Players, 3:ConnectedPlayers (all int32)
stats := make([]byte, 0)
// Field 1: HostedGames (Varint)
stats = append(stats, 0x08)
stats = append(stats, protocol.EncodeVarint(1)...)
// Field 2: Players (Varint)
stats = append(stats, 0x10)
stats = append(stats, protocol.EncodeVarint(1)...)
// Field 3: ConnectedPlayers (Varint)
stats = append(stats, 0x18)
stats = append(stats, protocol.EncodeVarint(1)...)
return stats, 409
}