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"
|
"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, ×tamp); err != nil {
|
if err := binary.Read(packetReader, binary.BigEndian, ×tamp); 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)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user