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(); } }
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); }
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; }