/// <summary> /// Invoked when this server recieves a packet from this client. /// </summary> /// <param name="asyn">Asyncronous state.</param> private void OnRecievePacket(IAsyncResult asyn) { if (_socket == null || (_socket.Connected == false && _isListening == false && _isConnected == true)) return; try { // Reading the header. if (_recieveBuffer.Length == NetworkPacket.HEADER_SIZE) { // Finish recieving. _socket.EndReceive(asyn); // Decode the header. _recievedPacket = new NetworkPacket(); _recievedPacket.Decode(_recieveBuffer, true, false); _globalBytesRecieved += _recieveBuffer.Length; _bytesRecieved += _recieveBuffer.Length; // No extra data? if (_recievedPacket.DataLength <= 0) { // Evaluate the packet. if (EvaluatePacket(_recievedPacket) == false) { if (PacketRecieved != null) PacketRecieved(this, _recievedPacket); if (_asyncRecievePacketID == -1 || _recievedPacket.ID == _asyncRecievePacketID) _asyncRecievePacket = _recievedPacket; _recievedPacket = null; } // Go back to recieving general data. BeginRecieving(NetworkPacket.HEADER_SIZE); } else { // Read in the rest of the packet. BeginRecieving(_recievedPacket.DataLength); } } // Reading the data. else { // Finish recieving. _socket.EndReceive(asyn); // Decode rest of data. _recievedPacket.Decode(_recieveBuffer, false, true); _globalBytesRecieved += _recieveBuffer.Length; _bytesRecieved += _recieveBuffer.Length; // Evaluate the packet. if (EvaluatePacket(_recievedPacket) == false) { if (PacketRecieved != null) PacketRecieved(this, _recievedPacket); if (_asyncRecievePacketID == -1 || _recievedPacket.ID == _asyncRecievePacketID) _asyncRecievePacket = _recievedPacket; _recievedPacket = null; } // Go back to recieving general data. BeginRecieving(NetworkPacket.HEADER_SIZE); } } catch (Exception) { } }