Пример #1
0
        private void OnRecvPacket(object sender, EventArgs e)
        {
            var queue = (ConcurrentQueue <NetworkMgr.QueuePack>)sender;

            while (true)
            {
                NetworkMgr.QueuePack pack = null;
                if (queue.TryDequeue(out pack))
                {
                    switch (pack.type)
                    {
                    case NetworkMgr.NetType.CONNECT:
                        procConnect(pack);
                        break;

                    case NetworkMgr.NetType.DISCON:
                        procDisConnect(pack);
                        break;

                    case NetworkMgr.NetType.DATA:
                        procData(pack);
                        break;

                    default:
                        LOG.warn();
                        break;
                    }
                }

                if (queue.IsEmpty)
                {
                    break;
                }
            }
        }
Пример #2
0
        private void procData(NetworkMgr.QueuePack pack)
        {
            while (true)
            {
                long nRecvLen = pack.buf.GetSize();
                int  headSize = ICD.HEADER.HeaderSize();
                if (nRecvLen < headSize)
                {
                    break;
                }

                byte[] headBuf = pack.buf.readSize(headSize);
                HEADER head    = new HEADER();
                head.Deserialize(ref headBuf);
                if (head.msgSOF != ICD.DEF.MAGIC_SOF)
                {
                    pack.buf.Clear();
                    break;
                }

                int msgSize = head.msgSize;
                if (nRecvLen < msgSize)
                {
                    break;
                }

                byte[] msgBuf = pack.buf.Pop(msgSize);

                HEADER msg = null;
                if (head.msgType == DEF.TYPE_REQ)
                {
                    msg = CreateICD_onServer(head);
                }
                else if (head.msgType == DEF.TYPE_REP)
                {
                    msg = CreateICD_onClient(head);
                }
                else
                {
                    LOG.warn();
                }

                msg.Deserialize(ref msgBuf);
                OnRecv?.Invoke(pack.ClientID, msg);
            }
        }
Пример #3
0
 private void procDisConnect(NetworkMgr.QueuePack pack)
 {
     OnDisConnected?.Invoke(pack.ClientID, null);
 }