public void AwaitSignal()
        {
            var sigset = new Yogi.SignalSet(context, Yogi.Signals.Term | Yogi.Signals.Usr5);

            bool called = false;

            sigset.AwaitSignalAsync((res, signal) => {
                Assert.IsType <Yogi.Success>(res);
                Assert.Equal(Yogi.ErrorCode.Ok, res.ErrorCode);
                Assert.Equal(Yogi.Signals.Term, signal);
                called = true;
            });
            GC.Collect();
            Yogi.RaiseSignal(Yogi.Signals.Term, "123");
            GC.Collect();
            context.Poll();
            GC.Collect();
            Assert.True(called);

            called = false;
            sigset.AwaitSignalAsync <string>((res, signal, sigarg) => {
                Assert.IsType <Yogi.Success>(res);
                Assert.Equal(Yogi.ErrorCode.Ok, res.ErrorCode);
                Assert.Equal(Yogi.Signals.Term, signal);
                Assert.Null(sigarg);
                called = true;
            });
            Yogi.RaiseSignal(Yogi.Signals.Term);
            context.Poll();
            Assert.True(called);

            called = false;
            sigset.AwaitSignalAsync <string>((res, signal, sigarg) => {
                Assert.IsType <Yogi.Success>(res);
                Assert.Equal(Yogi.ErrorCode.Ok, res.ErrorCode);
                Assert.Equal(Yogi.Signals.Term, signal);
                Assert.Equal("Hello", sigarg);
                called = true;
            });
            Yogi.RaiseSignal(Yogi.Signals.Term, "Hello");
            context.Poll();
            Assert.True(called);
        }
Exemplo n.º 2
0
        public void AwaitSignal()
        {
            bool called = false;

            Yogi.SignalSet.AwaitSignalFnDelegate fn = (Yogi.Result res, Yogi.Signals signal) =>
            {
                Assert.IsType <Yogi.Failure>(res);
                Assert.Equal(Yogi.ErrorCode.WrongObjectType, res.ErrorCode);
                Assert.Equal(Yogi.Signals.Usr6, signal);
                called = true;
            };

            MOCK_SignalSetAwaitSignalAsync((IntPtr sigset, SignalSetAwaitSignalAsyncFnDelegate fn_, IntPtr userarg) =>
            {
                Assert.Equal(pointer, sigset);
                Assert.NotNull(fn_);
                fn_((int)Yogi.ErrorCode.WrongObjectType, (int)Yogi.Signals.Usr6, IntPtr.Zero, userarg);
                return((int)Yogi.ErrorCode.Ok);
            });

            sigset.AwaitSignalAsync(fn);
            Assert.True(called);
        }
        public void CancelAwaitSignal()
        {
            var sigset = new Yogi.SignalSet(context, Yogi.Signals.Term);

            bool called = false;

            sigset.AwaitSignalAsync <string>((res, signal, sigarg) => {
                Assert.IsType <Yogi.Failure>(res);
                Assert.Equal(Yogi.ErrorCode.Canceled, res.ErrorCode);
                Assert.IsType <Yogi.Signals>(signal);
                Assert.Equal(Yogi.Signals.None, signal);
                Assert.Null(sigarg);
                called = true;
            });
            GC.Collect();
            sigset.CancelAwaitSignal();
            GC.Collect();
            context.Poll();
            Assert.True(called);
        }