Fixed some smaller issues and refactored code
This commit is contained in:
parent
f22a917f21
commit
c20ff0fea7
35
main.go
35
main.go
@ -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, ×tamp); err != nil {
|
||||
if err := binary.Read(packetReader, binary.BigEndian, ×tamp); 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)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user