try to handle tcp fragmentation

This commit is contained in:
bdnugget 2025-01-15 10:58:11 +01:00
parent 0b6ab17ad5
commit 0cd3145d28
2 changed files with 17 additions and 13 deletions

@ -1 +1 @@
Subproject commit a48fef0186faffb8f80fb871fcc7612057a063e7 Subproject commit 23474c19dc152d730bb554040a92d0b5a8ec59e9

View File

@ -22,15 +22,25 @@ func ConnectToServer() (net.Conn, int32, error) {
} }
log.Println("Connected to server. Waiting for player ID...") log.Println("Connected to server. Waiting for player ID...")
buf := make([]byte, 1024) reader := bufio.NewReader(conn)
n, err := conn.Read(buf)
if err != nil { // Read message length (4 bytes)
log.Printf("Error reading player ID from server: %v", err) lengthBuf := make([]byte, 4)
if _, err := io.ReadFull(reader, lengthBuf); err != nil {
log.Printf("Failed to read message length: %v", err)
return nil, 0, err
}
messageLength := binary.BigEndian.Uint32(lengthBuf)
// Read the full message
messageBuf := make([]byte, messageLength)
if _, err := io.ReadFull(reader, messageBuf); err != nil {
log.Printf("Failed to read message body: %v", err)
return nil, 0, err return nil, 0, err
} }
var response pb.ServerMessage var response pb.ServerMessage
if err := proto.Unmarshal(buf[:n], &response); err != nil { if err := proto.Unmarshal(messageBuf, &response); err != nil {
log.Printf("Failed to unmarshal server response: %v", err) log.Printf("Failed to unmarshal server response: %v", err)
return nil, 0, err return nil, 0, err
} }
@ -63,13 +73,7 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play
player.ActionQueue = player.ActionQueue[:0] player.ActionQueue = player.ActionQueue[:0]
player.Unlock() player.Unlock()
data, err := proto.Marshal(batch) if err := writeMessage(conn, batch); err != nil {
if err != nil {
log.Printf("Failed to marshal action batch: %v", err)
continue
}
if _, err = conn.Write(data); err != nil {
log.Printf("Failed to send actions to server: %v", err) log.Printf("Failed to send actions to server: %v", err)
return return
} }