Exemplo n.º 1
0
        public RpcBindingHost(IConnection <TMarshal> connection, IPlatformBinder <TMarshal> parameterBinder, IScheduler baseScheduler)
        {
            this.connection   = connection;
            bindingRepository = new BindingRepository(new IntIdGenerator());

            if (baseScheduler is IDisposable disposable)
            {
                disposables.Add(disposable);
            }

            // ReSharper disable once InvokeAsExtensionMethod
            var baseMessages = Observable.ObserveOn(connection, baseScheduler);

            callbackExecutor = new CallbackExecutor <TMarshal>(new IntIdGenerator(),
                                                               connection,
                                                               baseMessages.Select(m => m.CallbackResult)
                                                               .Where(m => m != null));
            var callbackFactory = new CallbackFactory <TMarshal>(callbackExecutor);
            var binder          = new ObjectBinderBuilder <TMarshal>().Use(typeof(CallbackBinder <TMarshal>), callbackFactory)
                                  .Use(typeof(OutgoingValueBinder <TMarshal>), bindingRepository)
                                  .Use(typeof(PlatformBinder <TMarshal>), parameterBinder).Build();

            methodExecutor   = new MethodExecutor <TMarshal>(bindingRepository.Objects, binder);
            propertyExecutor = new PropertyExecutor <TMarshal>(bindingRepository.Objects, binder);

            disposables.Add(Observable.ObserveOn((callbackExecutor as IObservable <DeleteCallback>), baseScheduler)
                            .Subscribe(OnDeleteCallback));
            disposables.Add(Observable.ObserveOn((callbackExecutor as IObservable <CallbackExecution <TMarshal> >), baseScheduler)
                            .Subscribe(OnCallbackExecution));

            // ReSharper disable once InvokeAsExtensionMethod

            disposables.Add(baseMessages
                            .Select(m => m.MethodExecution)
                            .Where(m => m != null)
                            .Subscribe(OnMethodExecution));
            disposables.Add(baseMessages
                            .Select(m => m.PropertyGet)
                            .Where(m => m != null)
                            .Subscribe(OnPropertyGetExecution));
            disposables.Add(baseMessages
                            .Select(m => m.PropertySet)
                            .Where(m => m != null)
                            .Subscribe(OnPropertySetExecution));
            disposables.Add(baseMessages
                            .Select(m => m.DynamicObjectRequest)
                            .Where(m => m != null)
                            .Subscribe(OnDyanmicObjectRequest));

            disposables.Add(connection);
        }
Exemplo n.º 2
0
 public TestHost(IConnection <object> connection,
                 IPlatformBinder <object> parameterBinder,
                 IScheduler baseScheduler) : base(connection, parameterBinder,
                                                  baseScheduler)
 {
 }
Exemplo n.º 3
0
 public PlatformBinder(BindingDelegate <TMarshal> next, IPlatformBinder <TMarshal> marshal)
 {
     this.marshal = marshal;
 }