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...")
|
||||
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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user