/// <summary> /// Receive callback /// </summary> /// <param name="client">client</param> /// <param name="receivedPacket">received packet</param> public void OnReceived(INetworkClient client, Packet receivedPacket) { ParallelPacket receivedParallelPacket = new ParallelPacket(receivedPacket); switch (receivedParallelPacket.GetPacketType()) { case ParallelPacketType.DATA: if (m_receiveType == ReceiveType.BURST) { if (CallBackObj != null) { // Task t = new Task(delegate() // { // CallBackObj.OnReceived(this, receivedParallelPacket); // }); // t.Start(); CallBackObj.OnReceived(this, receivedParallelPacket); } } else if (m_receiveType == ReceiveType.SEQUENTIAL) { lock (m_receiveLock) { m_receivedQueue.Enqueue(receivedParallelPacket); while (m_curReceivedPacketId == -1 || (!m_receivedQueue.IsEmpty() && m_curReceivedPacketId + 1 == m_receivedQueue.Peek().GetPacketID())) { ParallelPacket curPacket = m_receivedQueue.Dequeue(); m_curReceivedPacketId = curPacket.GetPacketID(); if (CallBackObj != null) { // Task t = new Task(delegate() // { // CallBackObj.OnReceived(this, curPacket); // }); // t.Start(); m_callBackObj.OnReceived(this, curPacket); } } } } break; case ParallelPacketType.IDENTITY_REQUEST: PacketSerializer<IdentityResponse> serializer = new PacketSerializer<IdentityResponse>(new IdentityResponse(Guid)); ParallelPacket sendPacket=new ParallelPacket(getCurPacketSequence(),ParallelPacketType.IDENTITY_RESPONSE,serializer.GetPacketRaw()); client.Send(sendPacket.GetPacketRaw()); break; case ParallelPacketType.READY: lock (m_sendLock) { m_pendingClientSet.Add(client); if (m_pendingClientSet.Count > 0 && (m_errorPacketSet.Count > 0 || m_packetQueue.Count > 0)) m_sendReadyEvent.SetEvent(); } break; } }