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" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io"
"net" "net"
) )
@ -89,19 +90,33 @@ func handleConnection(client *ClientState) {
for { for {
n, err := client.conn.Read(buf) n, err := client.conn.Read(buf)
if err != nil { 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 break
} }
reader := bytes.NewReader(buf[:n]) reader := bytes.NewReader(buf[:n])
// Read packet length
packetLength, err := readVarInt(reader) packetLength, err := readVarInt(reader)
if err != nil || packetLength > reader.Len() { if err != nil {
fmt.Println("Incomplete packet received") fmt.Println("Error reading packet length:", err)
break 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 { if err != nil {
fmt.Println("Error reading packet ID:", err) fmt.Println("Error reading packet ID:", err)
break break
@ -110,11 +125,15 @@ func handleConnection(client *ClientState) {
fmt.Println("Packet ID:", packetID) fmt.Println("Packet ID:", packetID)
switch packetID { switch packetID {
case HandshakePacketID | StatusRequestID: case HandshakePacketID: // The same packet ID is used for the Status Request
if client.nextState == 1 { if client.nextState == 1 {
handleStatusRequest(client) 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 { } else {
handshake, err := handleHandshake(reader) handshake, err := handleHandshake(packetReader)
if err != nil { if err != nil {
fmt.Println("Error processing handshake:", err) fmt.Println("Error processing handshake:", err)
return return
@ -123,7 +142,7 @@ func handleConnection(client *ClientState) {
} }
case PingRequestID: case PingRequestID:
var timestamp int64 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) fmt.Println("Error reading timestamp:", err)
break break
} }
@ -183,7 +202,7 @@ func handleStatusRequest(client *ClientState) {
} }
var packetData bytes.Buffer var packetData bytes.Buffer
packetData.WriteByte(StatusResponseID) writeVarInt(&packetData, StatusResponseID)
writeVarInt(&packetData, len(response)) writeVarInt(&packetData, len(response))
packetData.Write(response) packetData.Write(response)