73 lines
2.3 KiB
Go
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
|
|
}
|