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; } } }
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); } }
private void procDisConnect(NetworkMgr.QueuePack pack) { OnDisConnected?.Invoke(pack.ClientID, null); }