created centralized UDP Listener

This commit is contained in:
tom.hempel
2025-10-25 14:58:22 +02:00
parent 4ddb89d011
commit 3f72973ff5
10 changed files with 585 additions and 534 deletions

View File

@ -44,6 +44,15 @@ namespace Convai.Scripts.Runtime.Multiplayer
private float _lastUpdateTime;
private InputAction _toggleAction;
// Packet tracking for enhanced debugging
private System.Collections.Generic.Queue<string> _packetLog = new System.Collections.Generic.Queue<string>();
private const int MAX_PACKET_LOG = 15;
private int _lastAudioSentCount = 0;
private int _lastAudioReceivedCount = 0;
private int _lastSpeechSentCount = 0;
private int _lastSpeechReceivedCount = 0;
private float _lastRateCheckTime = 0f;
private void Start()
{
_mainCamera = Camera.main;
@ -126,7 +135,7 @@ namespace Convai.Scripts.Runtime.Multiplayer
panelImage.color = new Color(0, 0, 0, 0.85f);
RectTransform panelRect = _panel.GetComponent<RectTransform>();
panelRect.sizeDelta = new Vector2(800, 900);
panelRect.sizeDelta = new Vector2(900, 1200); // Increased size for more info
// Create text
GameObject textObj = new GameObject("DebugText");
@ -148,7 +157,7 @@ namespace Convai.Scripts.Runtime.Multiplayer
// Setup canvas transform for VR
RectTransform canvasRect = _canvas.GetComponent<RectTransform>();
canvasRect.sizeDelta = new Vector2(800, 900);
canvasRect.sizeDelta = new Vector2(900, 1200);
canvasRect.localScale = Vector3.one * 0.001f; // Scale down for VR viewing
}
@ -237,6 +246,10 @@ namespace Convai.Scripts.Runtime.Multiplayer
sb.AppendLine($"Time: {DateTime.Now:HH:mm:ss}");
sb.AppendLine();
// Port Binding Status
AppendPortBindingStatus(sb);
sb.AppendLine();
// Peer Discovery Status
AppendPeerDiscoveryStatus(sb);
sb.AppendLine();
@ -257,12 +270,54 @@ namespace Convai.Scripts.Runtime.Multiplayer
AppendSpeechReceiverStatus(sb);
sb.AppendLine();
// Packet Rates
AppendPacketRates(sb);
sb.AppendLine();
// Event Log
AppendEventLog(sb);
sb.AppendLine();
// Packet Log
AppendPacketLog(sb);
_debugText.text = sb.ToString();
}
private void AppendPortBindingStatus(StringBuilder sb)
{
sb.AppendLine("🔌 PORT BINDING STATUS");
// Check if shared listener is active
bool sharedListenerActive = SharedUDPListener.Instance != null && SharedUDPListener.Instance.IsListening;
if (sharedListenerActive)
{
sb.AppendLine($"✅ Shared UDP Listener ACTIVE");
sb.AppendLine($" Port: {SharedUDPListener.Instance.ListenPort}");
sb.AppendLine($" Total Packets: {SharedUDPListener.Instance.TotalPacketsReceived}");
}
else
{
sb.AppendLine($"❌ Shared UDP Listener NOT FOUND!");
sb.AppendLine($" Add SharedUDPListener to scene!");
}
// Check which components are subscribed
bool discoveryActive = _peerDiscovery != null;
bool audioReceiverActive = _audioReceiver != null;
bool speechReceiverActive = _speechReceiver != null;
sb.AppendLine($"Discovery: {(discoveryActive ? " SUBSCRIBED" : " NOT FOUND")} (0x44495343)");
sb.AppendLine($"Audio RX: {(audioReceiverActive ? " SUBSCRIBED" : " NOT FOUND")} (0xC0A1)");
sb.AppendLine($"Speech RX: {(speechReceiverActive ? " SUBSCRIBED" : " NOT FOUND")} (0xC0A3)");
if (!sharedListenerActive)
{
sb.AppendLine("⚠️ CRITICAL: No shared listener!");
}
}
private void AppendPeerDiscoveryStatus(StringBuilder sb)
{
sb.AppendLine("🔍 PEER DISCOVERY");
@ -506,13 +561,99 @@ namespace Convai.Scripts.Runtime.Multiplayer
}
}
private void AppendPacketRates(StringBuilder sb)
{
sb.AppendLine("📊 PACKET RATES (last second)");
float currentTime = Time.time;
float deltaTime = currentTime - _lastRateCheckTime;
if (deltaTime >= 1f)
{
// Calculate rates
int audioSentDelta = 0;
int audioReceivedDelta = 0;
int speechSentDelta = 0;
int speechReceivedDelta = 0;
if (_audioSender != null)
{
audioSentDelta = _audioSender.TotalPacketsSent - _lastAudioSentCount;
_lastAudioSentCount = _audioSender.TotalPacketsSent;
}
if (_audioReceiver != null)
{
audioReceivedDelta = _audioReceiver.TotalPacketsReceived - _lastAudioReceivedCount;
_lastAudioReceivedCount = _audioReceiver.TotalPacketsReceived;
}
if (_speechSender != null)
{
speechSentDelta = _speechSender.TotalClipsSent - _lastSpeechSentCount;
_lastSpeechSentCount = _speechSender.TotalClipsSent;
}
if (_speechReceiver != null)
{
speechReceivedDelta = _speechReceiver.TotalClipsReceived - _lastSpeechReceivedCount;
_lastSpeechReceivedCount = _speechReceiver.TotalClipsReceived;
}
_lastRateCheckTime = currentTime;
// Log significant activity
if (audioSentDelta > 0)
LogPacketActivity($"Sent {audioSentDelta} voice packets (0xC0A1)");
if (audioReceivedDelta > 0)
LogPacketActivity($"Received {audioReceivedDelta} voice packets (0xC0A1)");
if (speechSentDelta > 0)
LogPacketActivity($"Sent {speechSentDelta} speech clips (0xC0A3)");
if (speechReceivedDelta > 0)
LogPacketActivity($"Received {speechReceivedDelta} speech clips (0xC0A3)");
}
sb.AppendLine($"Voice Sent: {(_audioSender != null ? _audioSender.TotalPacketsSent : 0)} total");
sb.AppendLine($"Voice Received: {(_audioReceiver != null ? _audioReceiver.TotalPacketsReceived : 0)} total");
sb.AppendLine($"Speech Sent: {(_speechSender != null ? _speechSender.TotalClipsSent : 0)} clips");
sb.AppendLine($"Speech Received: {(_speechReceiver != null ? _speechReceiver.TotalClipsReceived : 0)} clips");
}
private void LogPacketActivity(string message)
{
string timestamp = DateTime.Now.ToString("HH:mm:ss");
_packetLog.Enqueue($"[{timestamp}] {message}");
while (_packetLog.Count > MAX_PACKET_LOG)
{
_packetLog.Dequeue();
}
}
private void AppendPacketLog(StringBuilder sb)
{
sb.AppendLine("📦 PACKET ACTIVITY LOG");
if (_packetLog.Count > 0)
{
foreach (var entry in _packetLog)
{
sb.AppendLine(entry);
}
}
else
{
sb.AppendLine("No packet activity yet");
}
}
private void AppendEventLog(StringBuilder sb)
{
sb.AppendLine("📋 EVENT LOG");
sb.AppendLine("📋 CONNECTION EVENTS");
if (_peerDiscovery != null && _peerDiscovery.EventLog.Count > 0)
{
int startIndex = Math.Max(0, _peerDiscovery.EventLog.Count - 8);
int startIndex = Math.Max(0, _peerDiscovery.EventLog.Count - 6);
for (int i = startIndex; i < _peerDiscovery.EventLog.Count; i++)
{
sb.AppendLine(_peerDiscovery.EventLog[i]);