void ReceiveThread() { while (IsActive) { try { IPEndPoint ip = new IPEndPoint(IPAddress.Any, 0); byte[] data = Receive(ref ip); if (data.Length > 0) { Session c = mService.GetSession(ip); if (MessageBuffer.IsValid(data)) { var buffer = new MessageBuffer(data); if (c == null || c.id != buffer.extra()) { c = mService.GetSession(buffer.extra()); } if (c != null) { if (c.udpAdress == null || c.udpAdress.Equals(ip) == false) { c.udpAdress = ip; } if (onReceive != null) { onReceive(new MessageInfo(buffer, c)); } } } } Thread.Sleep(1); } catch (SocketException e) { mService.Debug(e.Message); continue; } catch (Exception e) { mService.CatchException(e); throw e; } } }
public void OnReceiveKcp(byte[] data, IPEndPoint ip) { if (mKCP == null) { return; } lock (mKCP) { mKCP.Input(data); for (int size = mKCP.PeekSize(); size > 0; size = mKCP.PeekSize()) { MessageBuffer message = new MessageBuffer(size); if (mKCP.Recv(message.buffer) > 0) { if (message.IsValid() && message.extra() == id) { if (udpAdress == null || udpAdress.Equals(ip) == false) { udpAdress = ip; } mService.OnReceive(new MessageInfo(message, this)); } } } } }