public void AddReqPackage(UdpResponseBase req) { lock (responseQueue) { responseQueue.Add(req); } }
private UdpResponseBase GetReponsePackage(byte[] data) { UdpResponseBase package = new UdpResponseBase(); package.Id = BitConverter.ToInt64(data, 4); package.ClientId = BitConverter.ToInt32(data, 20); package.ProtocolId = BitConverter.ToInt32(data, 24); package.TimeTick = BitConverter.ToInt64(data, 28); package.ipEnd = receiveClientIpend; package.Init(data); return(package); }
private void ReceiveMessage() { while (true) { Thread.Sleep(1); try { UdpResponseBase reponse = null; lock (mainLock) { switch (status) { case 1: break; case 2: continue; default: goto StopServer; } byte[] data = udp2ClientResponse.Receive(ref receiveClientIpend);//默认每次只接收一个包 data = CheckPack(data); if (data == null) { continue; } reponse = GetReponsePackage(data); } AddReqPackage(reponse); } catch (Exception e) { LogAgent.LogError("Udp消息接收失败\t" + e.ToString()); } } StopServer: Interlocked.Add(ref status, 1); LogAgent.Log("!关闭Udp循环线程"); }