Пример #1
0
        private PendingWrite CreatePendingBufferWrite(IActorRef commander, ByteString data, Tcp.Event ack, Tcp.WriteCommand tail)
        {
            var buffer = _tcp.BufferPool.Acquire();

            try
            {
                var copied = data.CopyToBuffer(buffer);
                buffer.Flip();
                return(new PendingBufferWrite(this, commander, data.Drop(copied), ack, buffer, tail));
            }
            catch (Exception)
            {
                _tcp.BufferPool.Release(buffer);
                throw;
            }
        }
Пример #2
0
        public static List<object> Deserialize(ActorSystem system, ByteString message)
        {
            var result = new List<object>();

            while (!message.IsEmpty)
            {
                var seriliazerId = BitConverter.ToInt32(message.Take(SeriliazerIdBytesCount).ToArray(), 0);
                var messageLength = BitConverter.ToInt32(message.Skip(SeriliazerIdBytesCount).Take(MessageLengthBytesCount).ToArray(), 0);
                var messageBytes = message.Skip(CompletePrefixBytesCount).Take(messageLength).ToArray();
                var seriliazer = system.Serialization.GetSerializerById(seriliazerId);

                result.Add(seriliazer.FromBinary(messageBytes, typeof(object)));

                message = message.Drop(CompletePrefixBytesCount + messageLength);
            }

            return result;
        }