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...")
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil {
log.Printf("Error reading player ID from server: %v", err)
reader := bufio.NewReader(conn)
// Read message length (4 bytes)
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
}
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)
return nil, 0, err
}
@ -63,13 +73,7 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play
player.ActionQueue = player.ActionQueue[:0]
player.Unlock()
data, err := proto.Marshal(batch)
if err != nil {
log.Printf("Failed to marshal action batch: %v", err)
continue
}
if _, err = conn.Write(data); err != nil {
if err := writeMessage(conn, batch); err != nil {
log.Printf("Failed to send actions to server: %v", err)
return
}