private DuplexCallback(string name, IQbservableProtocol protocol, Func <int, object[], object> invoke) { Contract.Requires(!string.IsNullOrEmpty(name)); Contract.Requires(protocol != null); Contract.Requires(invoke != null); Name = name; this.invoke = invoke; ClientId = protocol.ClientId; Id = protocol.GetOrAddSink(protocol.CreateClientDuplexSink) .RegisterInvokeCallback(this); }
private static object CreateRemoteObservable(string name, IQbservableProtocol protocol, object instance, Type dataType) { Contract.Requires(!string.IsNullOrEmpty(name)); Contract.Requires(protocol != null); Contract.Requires(instance != null); Contract.Requires(dataType != null); Contract.Ensures(Contract.Result <object>() != null); var sink = protocol.GetOrAddSink(protocol.CreateClientDuplexSink); return(sink.RegisterObservableCallback(clientId => (IObservableDuplexCallback)Activator.CreateInstance(typeof(DuplexCallbackObservable <>).MakeGenericType(dataType), name, clientId, protocol.ClientId, instance))); }