try to handle tcp fragmentation
This commit is contained in:
Submodule goonserver updated: a48fef0186...23474c19dc
@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user