Esempio n. 1
0
 public void TestChannelStartStop()
 {
     using (IpcEventChannel channel = new IpcEventChannel(_registrar, _channel))
     {
         channel.StartListening();
         channel.StopListening();
         channel.StartListening();
         channel.StopListening();
     }
 }
Esempio n. 2
0
        public void TestListenerDies()
        {
            using (IpcEventChannel ch1 = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                {
                    ch1.StartListening("ch1");

                    ManualResetEvent ready = new ManualResetEvent(false);
                    ManualResetEvent die   = new ManualResetEvent(false);
                    ch1["Message"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                    {
                        ready.Set();
                        die.WaitOne();
                        Thread.CurrentThread.Abort();
                    };

                    sender.Broadcast(100, "Message");
                    Assert.IsTrue(ready.WaitOne(1000, false));

                    sender.EnableAsyncSend();
                    sender.Broadcast(0, "Message");
                    die.Set();
                    sender.StopAsyncSending(true, 1000);
                    ch1.StopListening();
                }
        }
Esempio n. 3
0
        public void TestEventHandlerThrows()
        {
            Exception error = null;

            using (IpcEventChannel ch1 = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                {
                    ch1.StartListening("ch1");
                    ch1.OnError          += delegate(object o, ErrorEventArgs e) { error = e.GetException(); };
                    ch1["Throw"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                    { throw new Exception("Throw"); };

                    ch1.RaiseLocal("Throw");
                    Assert.IsNotNull(error);
                    Assert.AreEqual(typeof(Exception), error.GetType());
                    Assert.AreEqual("Throw", error.Message);

                    error = null;
                    sender.Broadcast(100, "Throw");
                    ch1.StopListening(1000);
                    Assert.IsNotNull(error);
                    Assert.AreEqual(typeof(Exception), error.GetType());
                    Assert.AreEqual("Throw", error.Message);
                }
        }
Esempio n. 4
0
        public void TestChannelNamedInstance()
        {
            int ch1count = 0, ch2count = 0;

            using (IpcEventChannel ch1 = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel ch2 = new IpcEventChannel(_registrar, _channel))
                    using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                    {
                        ch1.StartListening("ch1");
                        ch2.StartListening("ch2");
                        sender.EnableAsyncSend();

                        ch1["Test"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                        { ch1count++; };
                        ch2["Test"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                        { ch2count++; };

                        for (int i = 0; i < 1000; i++)
                        {
                            Assert.AreEqual(1, sender.SendTo(10000, i % 2 == 0 ? "ch1" : "ch2", "Test"));
                        }

                        sender.StopAsyncSending(true, -1);
                        ch1.StopListening();
                        ch2.StopListening();
                    }
            Assert.AreEqual(500, ch1count);
            Assert.AreEqual(500, ch2count);
        }
Esempio n. 5
0
        public void TestBroadcastWithNonResponsive()
        {
            ManualResetEvent wait = new ManualResetEvent(false);
            int ch1count = 0, ch2count = 0;

            using (IpcEventChannel ch1 = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel ch2 = new IpcEventChannel(_registrar, _channel))
                    using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                    {
                        ch1.DefaultTimeout      = 100;
                        ch2.DefaultTimeout      = 100;
                        sender.ExecutionTimeout = 0;

                        ch1.StartListening("ch1");
                        ch2.StartListening("ch2");
                        sender.EnableAsyncSend();

                        ch1["Test"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                        { ch1count++; };
                        ch2["Test"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                        { ch2count++; wait.WaitOne(); };

                        sender.Broadcast(100, "Test");
                        sender.Broadcast(100, "Test");
                        sender.Broadcast(100, "Test");
                        sender.StopAsyncSending(false, 0);
                        ch1.StopListening();
                    }
            //We don't need to release the thread by wait.Set(), the thread was aborted by the
            //Dispose()... Had we called ch2.StopListening() instead, the program would hang.
            //thus to gracefully shutdown one calls StopListening()
            Assert.AreEqual(3, ch1count);
            Assert.AreEqual(1, ch2count);
        }
Esempio n. 6
0
        public void TestChannelSelfDispatch()
        {
            int count = 0;

            using (IpcEventChannel channel = new IpcEventChannel(_registrar, _channel))
            {
                channel.StartListening();
                channel["Test"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                { count++; };

                channel.Broadcast("Test");
                channel.Broadcast("Test");
                channel.Broadcast("Test");
                channel.StopListening();
            }
            Assert.AreEqual(3, count);
        }
Esempio n. 7
0
        public void TestChannelSenderReciever()
        {
            int count = 0;

            using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel reciever = new IpcEventChannel(_registrar, _channel))
                {
                    reciever.StartListening();
                    reciever["Test"].OnEvent += delegate(object o, IpcSignalEventArgs e)
                    { count++; };

                    for (int i = 0; i < 1000; i++)
                    {
                        Assert.AreEqual(1, sender.Broadcast(10000, "Test"));
                    }

                    reciever.StopListening();
                }
            Assert.AreEqual(1000, count);
        }
Esempio n. 8
0
        public void TestIpcEventArgs()
        {
            Exception error = null;

            using (IpcEventChannel ch1 = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                {
                    ch1.StartListening("ch1");
                    bool recieved = false;
                    ch1.OnError +=
                        delegate(object o, ErrorEventArgs e) { error = e.GetException(); };
                    ch1["TestArgs"].OnEvent +=
                        delegate(object o, IpcSignalEventArgs e)
                    {
                        recieved = true;
                        Assert.AreEqual(ch1, o);
                        Assert.AreEqual(ch1, e.EventChannel);
                        Assert.AreEqual("TestArgs", e.EventName);
                        Assert.AreEqual("1,2,3", String.Join(",", e.Arguments));
                        e.Arguments[0] = "a";
                        Assert.AreEqual("1,2,3", String.Join(",", e.Arguments));
                    };

                    recieved = false;
                    ch1.RaiseLocal("TestArgs", "1", "2", "3");
                    Assert.IsTrue(recieved);
                    if (error != null)
                    {
                        throw new AssertionException("Event Raised Error", error);
                    }

                    recieved = false;
                    sender.Broadcast(100, "TestArgs", "1", "2", "3");
                    ch1.StopListening(1000);
                    Assert.IsTrue(recieved);
                    if (error != null)
                    {
                        throw new AssertionException("Event Raised Error", error);
                    }
                }
        }
Esempio n. 9
0
        public void TestChannelSendOverloads()
        {
            using (IpcEventChannel sender = new IpcEventChannel(_registrar, _channel))
                using (IpcEventChannel ch1 = new IpcEventChannel(_registrar, _channel))
                    using (IpcEventChannel ch2 = new IpcEventChannel(_registrar, _channel))
                    {
                        ch1.StartListening("ch1");
                        ch2.StartListening("ch2");

                        int ch1Count = 0, ch2Count = 0;
                        ch1["Message"].OnEvent += delegate(object o, IpcSignalEventArgs e) { ch1Count++; };
                        ch2["Message"].OnEvent += delegate(object o, IpcSignalEventArgs e) { ch2Count++; };

                        sender.ExecutionTimeout = 1000;
                        Assert.AreEqual(1, sender.SendTo("CH1", "Message"));
                        Assert.AreEqual(1, sender.SendTo(new string[] { "CH2" }, "Message"));
                        Assert.AreEqual(2, sender.SendTo(1000, new string[] { "ch1", "ch2" }, "Message"));

                        ch1.StopListening();
                        Assert.AreEqual(2, ch1Count);
                        ch2.StopListening();
                        Assert.AreEqual(2, ch2Count);
                    }
        }