Fixed some smaller issues and refactored code

This commit is contained in:
Verox001 2025-02-21 17:30:49 +01:00
parent f22a917f21
commit c20ff0fea7

35
main.go
View File

@ -6,6 +6,7 @@ import (
"encoding/json"
"errors"
"fmt"
"io"
"net"
)
@ -89,19 +90,33 @@ func handleConnection(client *ClientState) {
for {
n, err := client.conn.Read(buf)
if err != nil {
fmt.Println("Error reading from connection or connection closed:", err)
if err.Error() == "EOF" {
fmt.Println("Client disconnected:", client.conn.RemoteAddr())
} else {
fmt.Println("Error reading from client:", err)
}
break
}
reader := bytes.NewReader(buf[:n])
// Read packet length
packetLength, err := readVarInt(reader)
if err != nil || packetLength > reader.Len() {
fmt.Println("Incomplete packet received")
if err != nil {
fmt.Println("Error reading packet length:", err)
break
}
packetID, err := readVarInt(reader)
// Ensure full packet is read
packetData := make([]byte, packetLength)
if _, err := io.ReadFull(reader, packetData); err != nil {
fmt.Println("Error reading full packet data:", err)
break
}
packetReader := bytes.NewReader(packetData)
packetID, err := readVarInt(packetReader)
if err != nil {
fmt.Println("Error reading packet ID:", err)
break
@ -110,11 +125,15 @@ func handleConnection(client *ClientState) {
fmt.Println("Packet ID:", packetID)
switch packetID {
case HandshakePacketID | StatusRequestID:
case HandshakePacketID: // The same packet ID is used for the Status Request
if client.nextState == 1 {
handleStatusRequest(client)
} else if client.nextState == 2 {
fmt.Println("Received status request in the wrong state")
} else if client.nextState == 3 {
fmt.Println("Received status request in the wrong state")
} else {
handshake, err := handleHandshake(reader)
handshake, err := handleHandshake(packetReader)
if err != nil {
fmt.Println("Error processing handshake:", err)
return
@ -123,7 +142,7 @@ func handleConnection(client *ClientState) {
}
case PingRequestID:
var timestamp int64
if err := binary.Read(reader, binary.BigEndian, &timestamp); err != nil {
if err := binary.Read(packetReader, binary.BigEndian, &timestamp); err != nil {
fmt.Println("Error reading timestamp:", err)
break
}
@ -183,7 +202,7 @@ func handleStatusRequest(client *ClientState) {
}
var packetData bytes.Buffer
packetData.WriteByte(StatusResponseID)
writeVarInt(&packetData, StatusResponseID)
writeVarInt(&packetData, len(response))
packetData.Write(response)