Akka.Interfaced.SlimSocket.Server.TcpConnection.TryDeserializeLargePacket C# (CSharp) Метод

TryDeserializeLargePacket() приватный Метод

private TryDeserializeLargePacket ( int len ) : bool
len int
Результат bool
        private bool TryDeserializeLargePacket(int len)
        {
            var leftLen = _receiveLargeBuffer.Value.Count - _receiveLargeLength;
            Array.Copy(_receiveBuffer, 0,
                       _receiveLargeBuffer.Value.Array,
                       _receiveLargeBuffer.Value.Offset + _receiveLargeLength,
                       Math.Min(leftLen, len));
            if (leftLen > len)
            {
                // 데이터를 더 받아야 한다
                _receiveLargeLength += len;
            }
            else
            {
                // 다 받았으니 Deserialize

                var stream = new MemoryStream(
                    _receiveLargeBuffer.Value.Array,
                    _receiveLargeBuffer.Value.Offset,
                    _receiveLargeBuffer.Value.Count,
                    false, true);

                object packet;
                try
                {
                    packet = Settings.PacketSerializer.Deserialize(stream);
                }
                catch (Exception e)
                {
                    if (_logger != null)
                    {
                        var bytes = Convert.ToBase64String(_receiveLargeBuffer.Value.Array,
                                                           _receiveLargeBuffer.Value.Offset,
                                                           Math.Min(_receiveLargeBuffer.Value.Count, 2048));
                        _logger.WarnFormat("Exception raised in deserializing: " + bytes, e);
                    }
                    HandleSerializeError(SerializeError.DeserializeExceptionRaised);
                    return false;
                }
                if (packet == null)
                {
                    HandleSerializeError(SerializeError.DeserializeNoPacket);
                    return false;
                }

                _lastReceiveTime = DateTime.UtcNow;
                if (Received != null)
                    Received(this, packet);

                var extraLen = len - leftLen;
                if (extraLen > 0)
                {
                    Array.Copy(_receiveBuffer, leftLen,
                               _receiveBuffer, 0, extraLen);
                }
                _receiveLength = extraLen;
                _receiveLargeBuffer = null;
            }

            return true;
        }