Fix chat and other players not showing up
This commit is contained in:
@ -18,10 +18,11 @@ import (
|
||||
|
||||
const protoVersion = 1
|
||||
|
||||
var serverAddr = "boner.be:6969"
|
||||
var serverAddr = "boner.be:6969" // Default server address
|
||||
|
||||
func SetServerAddr(addr string) {
|
||||
serverAddr = addr
|
||||
log.Printf("Server address set to: %s", serverAddr)
|
||||
}
|
||||
|
||||
func ConnectToServer(username, password string, isRegistering bool) (net.Conn, int32, error) {
|
||||
@ -175,22 +176,33 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play
|
||||
lengthBuf := make([]byte, 4)
|
||||
if _, err := io.ReadFull(reader, lengthBuf); err != nil {
|
||||
if err != io.EOF {
|
||||
log.Printf("Network read error: %v", err)
|
||||
errChan <- fmt.Errorf("failed to read message length: %v", err)
|
||||
} else {
|
||||
log.Printf("Connection closed by server")
|
||||
}
|
||||
return
|
||||
}
|
||||
messageLength := binary.BigEndian.Uint32(lengthBuf)
|
||||
|
||||
// Sanity check message size to prevent potential memory issues
|
||||
if messageLength > 1024*1024 { // 1MB max message size
|
||||
log.Printf("Message size too large: %d bytes", messageLength)
|
||||
errChan <- fmt.Errorf("message size too large: %d bytes", messageLength)
|
||||
return
|
||||
}
|
||||
|
||||
messageBuf := make([]byte, messageLength)
|
||||
if _, err := io.ReadFull(reader, messageBuf); err != nil {
|
||||
log.Printf("Failed to read message body: %v", err)
|
||||
errChan <- fmt.Errorf("failed to read message body: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
var serverMessage pb.ServerMessage
|
||||
if err := proto.Unmarshal(messageBuf, &serverMessage); err != nil {
|
||||
log.Printf("Failed to unmarshal server message: %v", err)
|
||||
continue
|
||||
continue // Skip this message but don't quit
|
||||
}
|
||||
|
||||
player.Lock()
|
||||
@ -207,7 +219,11 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play
|
||||
}
|
||||
player.Unlock()
|
||||
|
||||
// Process player states
|
||||
validPlayerIds := make(map[int32]bool)
|
||||
for _, state := range serverMessage.Players {
|
||||
validPlayerIds[state.PlayerId] = true
|
||||
|
||||
if state.PlayerId == playerID {
|
||||
player.Lock()
|
||||
// Update initial position if not set
|
||||
@ -223,21 +239,26 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play
|
||||
continue
|
||||
}
|
||||
|
||||
// Update or create other players
|
||||
if otherPlayer, exists := otherPlayers[state.PlayerId]; exists {
|
||||
otherPlayer.UpdatePosition(state, types.ServerTickRate)
|
||||
} else {
|
||||
log.Printf("Creating new player with ID: %d", state.PlayerId)
|
||||
otherPlayers[state.PlayerId] = types.NewPlayer(state)
|
||||
}
|
||||
}
|
||||
|
||||
// Remove players that are no longer in the server state
|
||||
// Remove players no longer in the server state
|
||||
for id := range otherPlayers {
|
||||
if id != playerID {
|
||||
if id != playerID && !validPlayerIds[id] {
|
||||
log.Printf("Removing player with ID: %d", id)
|
||||
delete(otherPlayers, id)
|
||||
}
|
||||
}
|
||||
|
||||
// Handle chat messages
|
||||
if handler, ok := player.UserData.(types.ChatMessageHandler); ok && len(serverMessage.ChatMessages) > 0 {
|
||||
log.Printf("Received %d chat messages from server", len(serverMessage.ChatMessages))
|
||||
handler.HandleServerMessages(serverMessage.ChatMessages)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user