public void Write(Serializer serializer, object value, CustomData customData) { var message = (Message) customData.Data; if (value is IDataObject) { serializer.WriteByte((byte)DataType.DataObject); WriteDataObject(serializer, customData.Type, (IDataObject) value, message); return; } if (value is Delegate) { serializer.WriteByte((byte)DataType.Delegate); var contextId = message.RemotingManager.ContextManager.GetContextId(customData.RequestingAssembly); var del = message.RemotingManager.DelegateManager.CreateDelegateImpl(contextId, (Delegate)value); serializer.WriteI32(del.LocalId); // TODO: Serialize Peer and RemoteId so we can create delegate proxies to other peer's delegates. return; } if (ServiceManager.IsService(customData.Type)) { serializer.WriteByte((byte)DataType.Service); var serviceImpl = message.RemotingManager.ServiceManager.GetCreateImplementation(customData.Type, value); serializer.WriteI32(serviceImpl.LocalId); return; } throw new NotImplementedException(); }