refactored ConvaiUDPSpeechSender for faster audio clip detection and simplified UDPPeerDiscovery to maintain connection without timeouts or heartbeats
This commit is contained in:
@ -115,15 +115,8 @@ namespace Convai.Scripts.Runtime.Multiplayer
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// Check for peer timeout
|
||||
if (_connectionState == ConnectionState.Connected)
|
||||
{
|
||||
TimeSpan timeSinceLastPacket = DateTime.UtcNow - _lastPeerPacketTime;
|
||||
if (timeSinceLastPacket.TotalSeconds > peerTimeoutSeconds)
|
||||
{
|
||||
HandlePeerLost();
|
||||
}
|
||||
}
|
||||
// No timeout checks - once connected, stay connected until restart
|
||||
// Removed: peer timeout monitoring
|
||||
}
|
||||
|
||||
private void StartDiscovery()
|
||||
@ -150,8 +143,7 @@ namespace Convai.Scripts.Runtime.Multiplayer
|
||||
// Start broadcasting discovery requests
|
||||
_ = BroadcastDiscoveryRequests(_cancellationTokenSource.Token);
|
||||
|
||||
// Start heartbeat when connected
|
||||
_ = SendHeartbeats(_cancellationTokenSource.Token);
|
||||
// NO HEARTBEATS - once connected, stay connected
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -376,23 +368,8 @@ namespace Convai.Scripts.Runtime.Multiplayer
|
||||
break;
|
||||
|
||||
case PACKET_TYPE_HEARTBEAT:
|
||||
// Heartbeat keeps connection alive
|
||||
if (_peerIP == senderIP)
|
||||
{
|
||||
// Same peer - update timestamp and reconnect if we were in Lost state
|
||||
if (_connectionState == ConnectionState.Lost || _connectionState == ConnectionState.Discovering)
|
||||
{
|
||||
// Reconnected to known peer
|
||||
SetConnectionState(ConnectionState.Connected);
|
||||
ConvaiLogger.Info($"🔄 Reconnected to peer Player {senderPlayerID} at {senderIP}", ConvaiLogger.LogCategory.Character);
|
||||
LogEvent($"🔄 Reconnected to peer Player {senderPlayerID}");
|
||||
}
|
||||
}
|
||||
else if (_connectionState != ConnectionState.Connected)
|
||||
{
|
||||
// Different peer IP than expected - this is a new peer
|
||||
HandlePeerDiscovered(senderIP, senderPlayerID);
|
||||
}
|
||||
// Ignore heartbeats - no reconnection logic
|
||||
// Once connected, stay connected until restart
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -420,18 +397,12 @@ namespace Convai.Scripts.Runtime.Multiplayer
|
||||
|
||||
private void HandlePeerLost()
|
||||
{
|
||||
ConvaiLogger.Warn($"⚠️ Peer connection lost (Player {_peerPlayerID} at {_peerIP}) - will keep trying to reconnect", ConvaiLogger.LogCategory.Character);
|
||||
LogEvent($"⚠️ Peer connection lost (Player {_peerPlayerID}) - reconnecting...");
|
||||
ConvaiLogger.Warn($"⚠️ Peer connection lost (Player {_peerPlayerID} at {_peerIP}) - but ignoring, keeping connection alive", ConvaiLogger.LogCategory.Character);
|
||||
LogEvent($"⚠️ Peer connection lost (Player {_peerPlayerID}) - IGNORING (stay connected until restart)");
|
||||
|
||||
SetConnectionState(ConnectionState.Lost);
|
||||
|
||||
// Notify listeners
|
||||
OnPeerLost?.Invoke();
|
||||
|
||||
// Don't clear peer IP - keep it and keep trying to reconnect
|
||||
// The heartbeat system will continue sending packets to the known peer
|
||||
// and will automatically reconnect when the peer comes back online
|
||||
ConvaiLogger.Info($"🔄 Will continue sending heartbeats to {_peerIP}", ConvaiLogger.LogCategory.Character);
|
||||
// DO NOTHING - keep the connection state as Connected
|
||||
// Once connected at the start of the session, stay connected forever
|
||||
// Senders will continue to send to the stored IP
|
||||
}
|
||||
|
||||
private void SetConnectionState(ConnectionState newState)
|
||||
|
||||
Reference in New Issue
Block a user