private void onFrame(int channelId, int playerId, byte voiceId, byte evNumber, byte[] receivedBytes) { if (this.DebugLostPercent > 0 && rnd.Next(100) < this.DebugLostPercent) { this.transport.LogWarning("[PV] Debug Lost Sim: 1 packet dropped"); return; } FramesReceived++; Dictionary <int, Dictionary <byte, RemoteVoice> > channelVoices = null; if (this.remoteVoices.TryGetValue(channelId, out channelVoices)) { Dictionary <byte, RemoteVoice> playerVoices = null; if (channelVoices.TryGetValue(playerId, out playerVoices)) { RemoteVoice voice = null; if (playerVoices.TryGetValue(voiceId, out voice)) { voice.receiveBytes(receivedBytes, evNumber); } else { this.transport.LogWarning("[PV] Frame event for not inited voice #" + voiceId + " of player " + this.playerStr(playerId) + " at channel " + this.channelStr(channelId)); } } else { this.transport.LogWarning("[PV] Frame event for voice #" + voiceId + " of not inited player " + this.playerStr(playerId) + " at channel " + this.channelStr(channelId)); } } else { this.transport.LogWarning("[PV] Frame event for voice #" + voiceId + " of not inited channel " + this.channelStr(channelId)); } }
internal void onVoiceInfo(int channelId, int playerId, byte voiceId, byte eventNumber, VoiceInfo info) { Dictionary <byte, RemoteVoice> playerVoices = null; if (!remoteVoices.TryGetValue(playerId, out playerVoices)) { playerVoices = new Dictionary <byte, RemoteVoice>(); remoteVoices[playerId] = playerVoices; } if (!playerVoices.ContainsKey(voiceId)) { this.transport.LogInfo("[PV] ch#" + this.channelStr(channelId) + " p#" + this.playerStr(playerId) + " v#" + voiceId + " Info received: " + info.ToString() + " ev=" + eventNumber); RemoteVoiceOptions options = new RemoteVoiceOptions() { OutputImageFormat = ImageFormat.Undefined, OutputImageFlip = Flip.Undefined }; if (this.OnRemoteVoiceInfoAction != null) { this.OnRemoteVoiceInfoAction(channelId, playerId, voiceId, info, ref options); } playerVoices[voiceId] = new RemoteVoice(this, options, channelId, playerId, voiceId, info, eventNumber); } else { if (!this.SuppressInfoDuplicateWarning) { this.transport.LogWarning("[PV] Info duplicate for voice #" + voiceId + " of player " + this.playerStr(playerId) + " at channel " + this.channelStr(channelId)); } } }
internal void onFrame(int channelId, int playerId, byte voiceId, byte evNumber, byte[] receivedBytes, FrameFlags flags, bool isLocalPlayer) { if (isLocalPlayer) { // rtt measurement in debug echo mode LocalVoice voice; if (this.localVoices.TryGetValue(voiceId, out voice)) { int sendTime; if (voice.eventTimestamps.TryGetValue(evNumber, out sendTime)) { int rtt = Environment.TickCount - sendTime; int rttvar = rtt - prevRtt; prevRtt = rtt; if (rttvar < 0) { rttvar = -rttvar; } this.RoundTripTimeVariance = (rttvar + RoundTripTimeVariance * 19) / 20; this.RoundTripTime = (rtt + RoundTripTime * 19) / 20; } } //internal Dictionary<byte, DateTime> localEventTimestamps = new Dictionary<byte, DateTime>(); } if (this.DebugLostPercent > 0 && rnd.Next(100) < this.DebugLostPercent) { this.transport.LogWarning("[PV] Debug Lost Sim: 1 packet dropped"); return; } FramesReceived++; Dictionary <byte, RemoteVoice> playerVoices = null; if (remoteVoices.TryGetValue(playerId, out playerVoices)) { RemoteVoice voice = null; if (playerVoices.TryGetValue(voiceId, out voice)) { voice.receiveBytes(receivedBytes, flags, evNumber); } else { this.transport.LogWarning("[PV] Frame event for not inited voice #" + voiceId + " of player " + this.playerStr(playerId) + " at channel " + this.channelStr(channelId)); } } else { this.transport.LogWarning("[PV] Frame event for voice #" + voiceId + " of not inited player " + this.playerStr(playerId) + " at channel " + this.channelStr(channelId)); } }
private void onVoiceInfo(int channelId, int playerId, object payload) { Dictionary <int, Dictionary <byte, RemoteVoice> > channelVoices = null; if (!this.remoteVoices.TryGetValue(channelId, out channelVoices)) { channelVoices = new Dictionary <int, Dictionary <byte, RemoteVoice> >(); this.remoteVoices[channelId] = channelVoices; } Dictionary <byte, RemoteVoice> playerVoices = null; if (!channelVoices.TryGetValue(playerId, out playerVoices)) { playerVoices = new Dictionary <byte, RemoteVoice>(); channelVoices[playerId] = playerVoices; } foreach (var el in (object[])payload) { var h = (Dictionary <byte, Object>)el; var voiceId = (byte)h[(byte)EventParam.VoiceId]; if (!playerVoices.ContainsKey(voiceId)) { var eventNumber = (byte)h[(byte)EventParam.EventNumber]; var info = VoiceInfo.CreateFromEventPayload(h); this.transport.LogInfo("[PV] ch#" + this.channelStr(channelId) + " p#" + this.playerStr(playerId) + " v#" + voiceId + " Info received: " + info.ToString() + " ev=" + eventNumber); // create default decoder RemoteVoiceOptions options = new RemoteVoiceOptions(); // create default decoder // may be overwritten in OnRemoteVoiceInfoAction call options.Decoder = VoiceCodec.CreateDefaultDecoder(channelId, playerId, voiceId, info, this.transport); if (this.OnRemoteVoiceInfoAction != null) { this.OnRemoteVoiceInfoAction(channelId, playerId, voiceId, info, ref options); } playerVoices[voiceId] = new RemoteVoice(this, options, channelId, playerId, voiceId, info, eventNumber); } else { if (!this.SuppressInfoDuplicateWarning) { this.transport.LogWarning("[PV] Info duplicate for voice #" + voiceId + " of player " + this.playerStr(playerId) + " at channel " + this.channelStr(channelId)); } } } }