Exemplo n.º 1
0
 public void AddReqPackage(UdpRequestBase req)
 {
     SetReqHeader(req);
     lock (requestQueue)
     {
         requestQueue.Add(req);
     }
 }
Exemplo n.º 2
0
        /*发送消息到指定ip端口*/

        public void SendUdpMessage(UdpRequestBase request)
        {
            if (!isUdpStart)
            {
                return;
            }
            udpAgent.AddReqPackage(request);
        }
Exemplo n.º 3
0
        private void SetReqHeader(UdpRequestBase req)
        {
            if (!req.Id.Equals(0xffffffff))
            {
                return;
            }
            req.Id = Interlocked.Add(ref reqId, 1);
            req.SetIndex(0);
            req.WriteInt32(flagHeader);
            req.WriteInt64(req.Id);
            req.SetIndex(20);//跳过包长度
            req.WriteInt32(req.ClientId);
            req.WriteInt32(req.ProtocolId);
            req.TimeTick = System.DateTime.Now.Ticks;
            req.WriteInt64(req.TimeTick);
            string md5 = MD5Code.GetMD5HashFromByte(req.getMemData());

            byte[] checkData = Encoding.UTF8.GetBytes(md5);
            req.SetIndex(36);
            req.SetMd5Header(checkData);
            req.SetIndex(12);
            req.Count += 8;//加上自己
            req.WriteInt64(req.Count);
        }
Exemplo n.º 4
0
        private void SendMessage()
        {
            List <UdpRequestBase> list = new List <UdpRequestBase>();

            while (true)
            {
                Thread.Sleep(1);

                switch (status)
                {
                case 1:
                    break;

                case 2:
                    continue;

                default:
                    goto StopServer;
                }

                List <UdpRequestBase> tmplist = GetSendData();
                if (tmplist == null)
                {
                    continue;
                }

                list.AddRange(tmplist);

                lock (mainLock)
                {
                    switch (status)
                    {
                    case 1:
                        break;

                    case 2:
                        DestorySendQueue(list);
                        continue;

                    default:
                        DestorySendQueue(list);
                        goto StopServer;
                    }
                    try
                    {
                        for (int i = 0; i < list.Count; i++)
                        {
                            UdpRequestBase req = list[i];

                            udp2AnyRequest.Send(req.getMemData(), (int)req.Count, boardIpEnd);//udpBug,后期修复
                        }
                    }
                    catch (Exception e)
                    {
                        LogAgent.LogError("Udp消息发送失败\t" + e.ToString());
                    }
                    DestorySendQueue(list);
                }
            }

StopServer:
            Interlocked.Add(ref status, 1);
            LogAgent.Log("!关闭Udp循环线程");
        }