Example #1
0
        private RdCall <TIn, TOut> CreateEndpoint <TIn, TOut>(Func <TIn, TOut> handler)
        {
            var res = new RdCall <TIn, TOut>();

            res.Set(handler);
            return(res);
        }
Example #2
0
        private RdCall <TIn, TOut> CreateEndpoint <TIn, TOut>(Func <TIn, TOut> handler, IScheduler cancellationScheduler = null, IScheduler handlerScheduler = null)
        {
            var res = new RdCall <TIn, TOut>();

            res.Set(handler, cancellationScheduler, handlerScheduler);
            return(res);
        }
Example #3
0
        public void TestBindable()
        {
            ClientWire.AutoTransmitMode = true;
            ServerWire.AutoTransmitMode = true;


            var call1 = new RdCall <Unit, RdSignal <int> >(Serializers.ReadVoid, Serializers.WriteVoid, RdSignal <int> .Read, RdSignal <int> .Write);
            var call2 = new RdCall <Unit, RdSignal <int> >(Serializers.ReadVoid, Serializers.WriteVoid, RdSignal <int> .Read, RdSignal <int> .Write);

            var respSignal           = new RdSignal <int>();
            var endpointLfTerminated = false;

            call2.Set((endpointLf, _) =>
            {
                endpointLf.OnTermination(() => endpointLfTerminated = true);
                return(RdTask <RdSignal <int> > .Successful(respSignal));
            });

            var serverEntity = BindToServer(LifetimeDefinition.Lifetime, call1, ourKey);
            var clientEntity = BindToClient(LifetimeDefinition.Lifetime, call2, ourKey);

            var ld     = new LifetimeDefinition();
            var lf     = ld.Lifetime;
            var signal = call1.Start(lf, Unit.Instance).AsTask().GetOrWait(lf);
            var log    = new List <int>();

            signal.Advise(Lifetime.Eternal, v =>
            {
                log.Add(v);
                Console.WriteLine(v);
            });

            respSignal.Fire(1);
            respSignal.Fire(2);
            respSignal.Fire(3);
            ld.Terminate();
            Assert.False(respSignal.IsBound);

            SpinWaitEx.SpinUntil(() => log.Count >= 3);
            Thread.Sleep(100);
            Assert.AreEqual(new [] { 1, 2, 3 }, log.ToArray());

            Assert.True(endpointLfTerminated);
        }
Example #4
0
 /// <summary>
 ///  Wrapper method to simplify search with overload resolution for two methods in RdEndpoint
 /// </summary>
 public static void SetHandler <TReq, TRes>(RdCall <TReq, TRes> endpoint, Func <Lifetime, TReq, RdTask <TRes> > handler)
 {
     endpoint.Set(handler);
 }
Example #5
0
 /// <summary>
 ///  Wrapper method to simplify search with overload resolution for two methods in RdEndpoint
 /// </summary>
 public static void SetHandlerTaskVoid <TReq>(RdCall <TReq, Unit> endpoint, Func <Lifetime, TReq, Task> handler)
 {
     endpoint.Set((lt, req) => handler(lt, req).ToRdTask());
 }
Example #6
0
 /// <summary>
 /// Wrapper method to simplify search with overload resolution for two methods in RdEndpoint.
 ///
 /// Used for sync calls only.
 /// </summary>
 public static void SetHandler <TReq, TRes>(RdCall <TReq, TRes> endpoint, Func <Lifetime, TReq, RdTask <TRes> > handler)
 {
     endpoint.Set(handler, null, new SwitchingScheduler(endpoint));
 }