try to handle tcp fragmentation
This commit is contained in:
parent
0b6ab17ad5
commit
0cd3145d28
@ -1 +1 @@
|
|||||||
Subproject commit a48fef0186faffb8f80fb871fcc7612057a063e7
|
Subproject commit 23474c19dc152d730bb554040a92d0b5a8ec59e9
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user