ReadI32() 공개 추상적인 메소드

public abstract ReadI32 ( ) : int
리턴 int
예제 #1
0
        public object Read(Serializer serializer, CustomData customData)
        {
            var message = (Message) customData.Data;

            var dataType = (DataType) serializer.ReadByte();
            switch (dataType)
            {
                case DataType.DataObject:
                    if(!typeof(IDataObject).IsAssignableFrom(customData.Type))
                        throw new Exception();

                    return ReadDataObject(serializer, customData.Type, message);

                case DataType.Delegate:
                    var remoteDelegateId = serializer.ReadI32();
                    var contextId = message.RemotingManager.ContextManager.GetContextId(customData.RequestingAssembly);
                    var del = message.RemotingManager.DelegateManager.CreateDelegateProxy(contextId, customData.Type, message.Peer, remoteDelegateId);
                    return del.Delegate;

                case DataType.Service:
                    var remoteId = serializer.ReadI32();
                    return message.RemotingManager.ServiceManager.GetService(customData.Type, message.Peer, remoteId);

                default:
                    throw new NotImplementedException();
            }
        }
예제 #2
0
        public static RemotingException Read(Serializer iprot)
        {
            string message = null;
            ExceptionType type = ExceptionType.Unknown;

            message = iprot.ReadString();
            type = (ExceptionType)iprot.ReadI32();

            return new RemotingException(type, message);
        }
예제 #3
0
        private static object ReadDataObject(Serializer serializer, Type type, Message message)
        {
            if(!typeof(IObservableDataObject).IsAssignableFrom(type))
                return Activator.CreateInstance(type);

            IDataObjectFactory dataObjectFactory;
            int dataObjectId;

            var referenceRemoteId = serializer.ReadI32();
            var isPolymorphic = serializer.ReadBool();
            if (isPolymorphic)
            {
                var contextId = serializer.ReadI16();
                dataObjectId = serializer.ReadI16();
                dataObjectFactory = message.RemotingManager.ContextManager.GetDataObjectFactory(contextId);
            }
            else
            {
                dataObjectId = type.GetCustomAttribute<DataObjectAttribute>().Id;
                var contextId = message.RemotingManager.ContextManager.GetContextId(type.Assembly);
                dataObjectFactory = message.RemotingManager.ContextManager.GetDataObjectFactory(contextId);
            }

            var dataObject = dataObjectFactory.CreateDataObjectReference((ushort) dataObjectId, message.Peer, referenceRemoteId, message.RemotingManager.ReferenceManager);
            dataObject.Read(serializer, null, message);

            return dataObject;
        }