Akka.Interfaced.ProtobufSerializer.ProtobufSerializer.FromBinary C# (CSharp) Метод

FromBinary() публичный Метод

public FromBinary ( byte bytes, Type type ) : object
bytes byte
type System.Type
Результат object
        public override object FromBinary(byte[] bytes, Type type)
        {
            using (var ms = new MemoryStream(bytes))
            {
                var code = (MessageCode)ms.ReadByte();
                switch (code)
                {
                    case MessageCode.Notification:
                    {
                        // read observerId

                        var notificationMessage = new NotificationMessage();
                        notificationMessage.ObserverId = ms.Read7BitEncodedInt();
                        notificationMessage.NotificationId = ms.Read7BitEncodedInt();

                        // read message

                        var messageType = ReadType(ms);
                        if (messageType == null)
                            throw new Exception("Cannot resolve messageType.");

                        var message = Activator.CreateInstance(messageType);
                        try
                        {
                            AkkaSurrogate.CurrentSystem = system;
                            notificationMessage.InvokePayload = (IInvokable)_typeModel.Deserialize(ms, message, messageType);
                        }
                        finally
                        {
                            AkkaSurrogate.CurrentSystem = null;
                        }
                        return notificationMessage;
                    }
                    case MessageCode.Request:
                    {
                        // read requestId

                        var requestMessage = new RequestMessage();
                        requestMessage.RequestId = ms.Read7BitEncodedInt();

                        // read message

                        var messageType = ReadType(ms);
                        if (messageType == null)
                            throw new Exception("Cannot resolve messageType.");

                        var message = Activator.CreateInstance(messageType);
                        try
                        {
                            AkkaSurrogate.CurrentSystem = system;
                            requestMessage.InvokePayload = (IInterfacedPayload)_typeModel.Deserialize(ms, message, messageType);
                        }
                        finally
                        {
                            AkkaSurrogate.CurrentSystem = null;
                        }
                        return requestMessage;
                    }
                    case MessageCode.ReplyWithNothing:
                    {
                        var replyMessage = new ResponseMessage();
                        replyMessage.RequestId = ms.Read7BitEncodedInt();
                        return replyMessage;
                    }
                    case MessageCode.ReplyWithException:
                    {
                        var replyMessage = new ResponseMessage();
                        replyMessage.RequestId = ms.Read7BitEncodedInt();

                        var exceptionType = ReadType(ms);
                        replyMessage.Exception = (Exception)Activator.CreateInstance(exceptionType);
                        if (_typeModel.CanSerialize(exceptionType))
                            _typeModel.Deserialize(ms, replyMessage.Exception, exceptionType);
                            return replyMessage;
                    }
                    case MessageCode.ReplyWithResult:
                    {
                        // read requestId

                        var replyMessage = new ResponseMessage();
                        replyMessage.RequestId = ms.Read7BitEncodedInt();

                        // read result

                        var resultType = ReadType(ms);
                        if (resultType == null)
                            throw new Exception("Cannot resolve resultType.");

                        var result = Activator.CreateInstance(resultType);
                        try
                        {
                            AkkaSurrogate.CurrentSystem = system;
                            replyMessage.ReturnPayload = (IValueGetable)_typeModel.Deserialize(ms, result, resultType);
                        }
                        finally
                        {
                            AkkaSurrogate.CurrentSystem = null;
                        }
                        return replyMessage;
                    }
                    default:
                    {
                        return null;
                    }
                }
            }
        }