private void ReceiveLogic(byte[] data, int length, int errorCode, NetEndPoint remoteEndPoint) { //Receive some info if (errorCode == 0) { #if DEBUG if (SimulatePacketLoss && _randomGenerator.NextDouble() * 100 < SimulationPacketLossChance) { //drop packet return; } if (SimulateLatency) { int latency = _randomGenerator.Next(SimulationMinLatency, SimulationMaxLatency); if (latency > MinLatencyTreshold) { byte[] holdedData = new byte[length]; Buffer.BlockCopy(data, 0, holdedData, 0, length); lock (_pingSimulationList) { _pingSimulationList.Add(new IncomingData { Data = holdedData, EndPoint = remoteEndPoint, TimeWhenGet = DateTime.UtcNow.AddMilliseconds(latency) }); } //hold packet return; } } #endif try { //ProcessEvents DataReceived(data, length, remoteEndPoint); } catch (Exception e) { //protects socket receive thread NetUtils.DebugWriteError("[NM] SocketReceiveThread error: " + e); } } else //Error on receive { //TODO: strange? lock (_peers) { _peers.Clear(); } var netEvent = CreateEvent(NetEventType.Error); netEvent.AdditionalData = errorCode; EnqueueEvent(netEvent); NetUtils.DebugWriteError("[NM] Receive error: {0}" + errorCode); } }
void INetSocketListener.OnMessageReceived(byte[] data, int length, SocketError errorCode, IPEndPoint remoteEndPoint) { if (errorCode != 0) { _peers.Clear(); CreateEvent(NetEvent.EType.Error, errorCode: errorCode); NetUtils.DebugWriteError("[NM] Receive error: {0}", errorCode); return; } #if DEBUG if (SimulatePacketLoss && _randomGenerator.NextDouble() * 100 < SimulationPacketLossChance) { //drop packet return; } if (SimulateLatency) { int latency = _randomGenerator.Next(SimulationMinLatency, SimulationMaxLatency); if (latency > MinLatencyTreshold) { byte[] holdedData = new byte[length]; Buffer.BlockCopy(data, 0, holdedData, 0, length); lock (_pingSimulationList) { _pingSimulationList.Add(new IncomingData { Data = holdedData, EndPoint = remoteEndPoint, TimeWhenGet = DateTime.UtcNow.AddMilliseconds(latency) }); } //hold packet return; } } #endif try { //ProcessEvents DataReceived(data, length, remoteEndPoint); } catch (Exception e) { //protects socket receive thread NetUtils.DebugWriteError("[NM] SocketReceiveThread error: " + e); } }
private void ClearPeers() { lock (_peers) { _peers.Clear(); } }
private void ClearPeers() { lock (_peers) { #if WINRT && !UNITY_EDITOR _socket.ClearPeers(); #endif _peers.Clear(); } }