refactored ConvaiUDPSpeechSender for faster audio clip detection and simplified UDPPeerDiscovery to maintain connection without timeouts or heartbeats

This commit is contained in:
tom.hempel
2025-10-27 15:57:40 +01:00
parent fae9ddc9af
commit 639ac894ce
4 changed files with 28 additions and 57 deletions

View File

@ -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)