Пример #1
0
        public void ContinueWith()
        {
            var threadId1 = 0;
            var threadId2 = 1;

            var runCount1 = 0;
            var runCount2 = 0;

            using (var scheduler = new NetMQScheduler())
            {
                var task = new Task(() =>
                {
                    threadId1 = Thread.CurrentThread.ManagedThreadId;
                    runCount1++;
                });

                var task2 = task.ContinueWith(t =>
                {
                    threadId2 = Thread.CurrentThread.ManagedThreadId;
                    runCount2++;
                }, scheduler);

                task.Start(scheduler);
                task.Wait();
                task2.Wait();

                Assert.AreEqual(threadId1, threadId2);
                Assert.AreEqual(1, runCount1);
                Assert.AreEqual(1, runCount2);
            }
        }
Пример #2
0
        private Task RunServer <T>(ICommonSerializer serializer, Action <int> loadPort, Action <Poller> loadPoller, T service)
            where T : class
        {
            var task = new Task(() =>
            {
                var serverContext   = NetMQContext.Create();
                var serverSocket    = serverContext.CreateResponseSocket();             // serverContext.CreateRouterSocket();
                var serverPoller    = new Poller(serverSocket);
                var serverScheduler = new NetMQScheduler(serverContext, serverPoller);
                var serverTransport = serverSocket.GenerateTransportSource(serverScheduler);
                var serverRouter    = new DefaultMessageRouter(serverTransport, serializer);
                serverRouter.AddService(service);
                var port = serverSocket.BindRandomPort("tcp://localhost");
                loadPoller.Invoke(serverPoller);
                loadPort.Invoke(port);

                serverPoller.PollTillCancelled();

                serverScheduler.Dispose();
                serverPoller.Dispose();
                serverRouter.Dispose();
                serverTransport.Dispose();
                serverSocket.Dispose();
                serverContext.Dispose();
            }, TaskCreationOptions.LongRunning);

            task.Start();
            return(task);
        }
Пример #3
0
        public void ExternalPoller()
        {
            bool triggered = false;

            using (NetMQContext context = NetMQContext.Create())
            {
                Poller poller = new Poller();

                using (NetMQScheduler scheduler = new NetMQScheduler(context, poller))
                {
                    Task.Factory.StartNew(poller.Start);

                    Task task = new Task(() =>
                    {
                        triggered = true;
                    });
                    task.Start(scheduler);
                    task.Wait();

                    Assert.IsTrue(triggered);
                }

                poller.Stop();
            }
        }
Пример #4
0
        private Task RunClient <T>(ICommonSerializer serializer, int port, Action <Poller> loadPoller, Action <T> loadProxy)
            where T : class
        {
            var task = new Task(() =>
            {
                var clientContext           = NetMQContext.Create();
                var clientSocket            = clientContext.CreateRequestSocket();     // clientContext.CreateRouterSocket();
                clientSocket.Options.Linger = TimeSpan.Zero;
                var clientPoller            = new Poller(clientSocket);
                var clientScheduler         = new NetMQScheduler(clientContext, clientPoller);
                var clientTransport         = clientSocket.GenerateTransportSource(clientScheduler);
                var clientRouter            = new DefaultMessageRouter(clientTransport, serializer);
                var proxy = clientRouter.AddInterface <T>();
                clientSocket.Connect("tcp://localhost:" + port);
                loadPoller.Invoke(clientPoller);
                loadProxy.Invoke(proxy);

                clientPoller.PollTillCancelled();

                clientScheduler.Dispose();
                clientPoller.Dispose();
                clientRouter.Dispose();
                clientTransport.Dispose();
                clientSocket.Dispose();
                clientContext.Dispose();
            }, TaskCreationOptions.LongRunning);

            task.Start();
            return(task);
        }
        public void ContinueWith()
        {
            var threadId1 = 0;
            var threadId2 = 1;

            var runCount1 = 0;
            var runCount2 = 0;

            using (var scheduler = new NetMQScheduler())
            {
                var task = new Task(() =>
                {
                    threadId1 = Thread.CurrentThread.ManagedThreadId;
                    runCount1++;
                });

                var task2 = task.ContinueWith(t =>
                {
                    threadId2 = Thread.CurrentThread.ManagedThreadId;
                    runCount2++;
                }, scheduler);

                task.Start(scheduler);
                task.Wait();
                task2.Wait();

                Assert.AreEqual(threadId1, threadId2);
                Assert.AreEqual(1, runCount1);
                Assert.AreEqual(1, runCount2);
            }
        }
Пример #6
0
        public void ExternalPoller()
        {
            bool triggered = false;

            using (NetMQContext context = NetMQContext.Create())
            {
                Poller poller = new Poller();

                using (NetMQScheduler scheduler = new NetMQScheduler(context, poller))
                {
                    poller.PollTillCancelledNonBlocking();

                    Task task = new Task(() =>
                    {
                        triggered = true;
                    });
                    task.Start(scheduler);
                    task.Wait();

                    Assert.IsTrue(triggered);
                }

                poller.CancelAndJoin();
            }
        }
Пример #7
0
        public void ContinueWith()
        {
            int threadId1 = 0;
            int threadId2 = 1;

            int runCount1 = 0;
            int runCount2 = 0;

            using (NetMQContext context = NetMQContext.Create())
            {
                using (NetMQScheduler scheduler = new NetMQScheduler(context))
                {
                    Task task = new Task(() =>
                    {
                        threadId1 = Thread.CurrentThread.ManagedThreadId;
                        runCount1++;
                    });
                    Task task2 = task.ContinueWith(t =>
                    {
                        threadId2 = Thread.CurrentThread.ManagedThreadId;
                        runCount2++;
                    }, scheduler);

                    task.Start(scheduler);
                    task.Wait();
                    task2.Wait();

                    Assert.AreEqual(threadId1, threadId2);
                    Assert.AreEqual(1, runCount1);
                    Assert.AreEqual(1, runCount2);
                }
            }
        }
Пример #8
0
        public void ExternalPoller()
        {
            bool triggered = false;

            using (NetMQContext context = NetMQContext.Create())
            {
                Poller poller = new Poller();

                using (NetMQScheduler scheduler = new NetMQScheduler(context, poller))
                {
                    Task.Factory.StartNew(poller.Start);

                    Task task = new Task(() =>
                    {
                        triggered = true;
                    });
                    task.Start(scheduler);
                    task.Wait();

                    Assert.IsTrue(triggered);
                }

                poller.Stop();
            }
        }
Пример #9
0
 public BinaryNetMQConnection(IWampBinaryBinding <TMessage> binding, NetMQSocket socket, NetMQScheduler scheduler)
 {
     _binding              = binding;
     _socket               = socket;
     _scheduler            = scheduler;
     _socket.ReceiveReady += OnReceiveMessage;
 }
Пример #10
0
        public void ContinueWith()
        {
            int threadId1 = 0;
            int threadId2 = 1;

            int runCount1 = 0;
            int runCount2 = 0;

            using (NetMQContext context = NetMQContext.Create())
            {
                using (NetMQScheduler scheduler = new NetMQScheduler(context))
                {
                    Task task = new Task(() =>
                                            {
                                                threadId1 = Thread.CurrentThread.ManagedThreadId;
                                                runCount1++;
                                            });
                    Task task2 = task.ContinueWith(t =>
                                                    {
                                                        threadId2 = Thread.CurrentThread.ManagedThreadId;
                                                        runCount2++;
                                                    }, scheduler);

                    task.Start(scheduler);
                    task.Wait();
                    task2.Wait();

                    Assert.AreEqual(threadId1, threadId2);
                    Assert.AreEqual(1, runCount1);
                    Assert.AreEqual(1, runCount2);
                }
            }
        }
Пример #11
0
 public void Start()
 {
     poller       = new Poller();
     clientSocket = context.CreateDealerSocket();
     clientSocket.ReceiveReady += clientSocket_ReceiveReady;
     clientSocket.Connect(address);
     scheduler = new NetMQScheduler(context, poller);
     Task.Factory.StartNew(poller.Start, TaskCreationOptions.LongRunning);
 }
Пример #12
0
 public ZeroNotificationEnqueue()
 {
     _context = NetMQContext.Create();
     _poller  = new Poller();
     _client  = _context.CreatePushSocket();
     _client.Connect(QueueAddress);
     _scheduler = new NetMQScheduler(_context, _poller);
     Task.Factory.StartNew(_poller.PollTillCancelled, TaskCreationOptions.LongRunning);
 }
        public void OneTask()
        {
            bool triggered = false;

            using (var scheduler = new NetMQScheduler())
            {
                var task = new Task(() => { triggered = true; });
                task.Start(scheduler);
                task.Wait();

                Assert.IsTrue(triggered);
            }
        }
Пример #14
0
        public void OneTask()
        {
            bool triggered = false;

            using (var scheduler = new NetMQScheduler())
            {
                var task = new Task(() => { triggered = true; });
                task.Start(scheduler);
                task.Wait();

                Assert.IsTrue(triggered);
            }
        }
Пример #15
0
        public void CanDisposeSchedulerWhenPollerExternalAndCancelled()
        {
            using (var poller = new Poller())
            using (var scheduler = new NetMQScheduler(poller))
            {
                poller.PollTillCancelledNonBlocking();

                var startedEvent = new ManualResetEvent(false);
                Task.Factory.StartNew(() => { startedEvent.Set(); }, CancellationToken.None, TaskCreationOptions.None, scheduler);

                startedEvent.WaitOne();

                poller.CancelAndJoin();
            }
        }
        public void CanDisposeSchedulerWhenPollerExternalAndCancelled()
        {
            using (var poller = new Poller())
                using (var scheduler = new NetMQScheduler(poller))
                {
                    poller.PollTillCancelledNonBlocking();

                    var startedEvent = new ManualResetEvent(false);
                    Task.Factory.StartNew(() => { startedEvent.Set(); }, CancellationToken.None, TaskCreationOptions.None, scheduler);

                    startedEvent.WaitOne();

                    poller.CancelAndJoin();
                }
        }
        public void ExternalPoller()
        {
            var triggered = false;

            using (var poller = new Poller())
                using (var scheduler = new NetMQScheduler(poller))
                {
                    poller.PollTillCancelledNonBlocking();

                    var task = new Task(() => { triggered = true; });
                    task.Start(scheduler);
                    task.Wait();

                    Assert.IsTrue(triggered);
                }
        }
Пример #18
0
        public void ExternalPoller()
        {
            var triggered = false;

            using (var poller = new Poller())
            using (var scheduler = new NetMQScheduler(poller))
            {
                poller.PollTillCancelledNonBlocking();

                var task = new Task(() => { triggered = true; });
                task.Start(scheduler);
                task.Wait();

                Assert.IsTrue(triggered);
            }
        }
Пример #19
0
        public void TwoThreads()
        {
            int count1 = 0;
            int count2 = 0;

            ConcurrentBag <Task> allTasks = new ConcurrentBag <Task>();

            using (NetMQContext context = NetMQContext.Create())
            {
                using (NetMQScheduler scheduler = new NetMQScheduler(context))
                {
                    Task t1 = Task.Factory.StartNew(() =>
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            Task task = new Task(() =>
                            {
                                count1++;
                            });
                            allTasks.Add(task);
                            task.Start(scheduler);
                        }
                    });

                    Task t2 = Task.Factory.StartNew(() =>
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            Task task = new Task(() =>
                            {
                                count2++;
                            });
                            allTasks.Add(task);
                            task.Start(scheduler);
                        }
                    });

                    t1.Wait(100);
                    t2.Wait(100);
                    Task.WaitAll(allTasks.ToArray(), 100);

                    Assert.AreEqual(100, count1);
                    Assert.AreEqual(100, count2);
                }
            }
        }
Пример #20
0
        public void OneTask()
        {
            bool triggered = false;

            using (NetMQContext context = NetMQContext.Create())
            {
                using (NetMQScheduler scheduler = new NetMQScheduler(context))
                {
                    Task task = new Task(() =>
                    {
                        triggered = true;
                    });
                    task.Start(scheduler);
                    task.Wait();

                    Assert.IsTrue(triggered);
                }
            }
        }
        public void Start()
        {
            _worker.ReceiveReady += _worker_ReceiveReady;
            _worker.Connect("tcp://localhost:5556");

            _heartbeatTimer          = new NetMQTimer(Paranoid.HEARTBEAT_INTERVAL_MS);
            _heartbeatTimer.Elapsed += heartbeatTimer_Elapsed;

            _poller = new Poller();
            _poller.AddSocket(_worker);
            _poller.AddTimer(_heartbeatTimer);

            _scheduler = new NetMQScheduler(_context, _poller);

            _nextHeartbeatAt = DateTime.Now.AddMilliseconds(Paranoid.HEARTBEAT_INTERVAL_MS);
            _cylces          = 0;

            Task.Factory.StartNew(() => Run(), TaskCreationOptions.LongRunning);

            SendReady();
        }
Пример #22
0
        private static IDisposable StartNetMQServer()
        {
            var host = new WampHost();

            var serverContext   = NetMQContext.Create();
            var serverSocket    = serverContext.CreateResponseSocket();         // serverContext.CreateRouterSocket();
            var serverPoller    = new Poller(serverSocket);
            var serverScheduler = new NetMQScheduler(serverContext, serverPoller);

            serverPoller.PollTillCancelledNonBlocking();

            host.RegisterTransport(new NetMQTransport(serverSocket, serverScheduler),
                                   new JTokenJsonBinding(), new JTokenMsgpackBinding(), new ProtobufBinding());

            host.Open();

            var realm = host.RealmContainer.GetRealmByName("realm1");

            realm.Services.RegisterCallee(new SumService(), new CalleeNameInterceptor()).Wait();             // add services (aka, RPC endpoints) like this
            // realm.Services.RegisterPublisher // register some event triggerer here

            return(host);
        }
        public void TwoThreads()
        {
            var count1 = 0;
            var count2 = 0;

            var allTasks = new ConcurrentBag <Task>();

            using (var scheduler = new NetMQScheduler())
            {
                var t1 = Task.Factory.StartNew(() =>
                {
                    for (var i = 0; i < 100; i++)
                    {
                        var task = new Task(() => { count1++; });
                        allTasks.Add(task);
                        task.Start(scheduler);
                    }
                });

                var t2 = Task.Factory.StartNew(() =>
                {
                    for (var i = 0; i < 100; i++)
                    {
                        var task = new Task(() => { count2++; });
                        allTasks.Add(task);
                        task.Start(scheduler);
                    }
                });

                t1.Wait(100);
                t2.Wait(100);
                Task.WaitAll(allTasks.ToArray(), 100);

                Assert.AreEqual(100, count1);
                Assert.AreEqual(100, count2);
            }
        }
Пример #24
0
 public NetMQTransport(NetMQSocket socket, NetMQScheduler scheduler)
 {
     _socket    = socket;
     _scheduler = scheduler;
 }
Пример #25
0
        public void TwoThreads()
        {
            int count1 = 0;
            int count2 = 0;

            ConcurrentBag<Task> allTasks = new ConcurrentBag<Task>();

            using (NetMQContext context = NetMQContext.Create())
            {
                using (NetMQScheduler scheduler = new NetMQScheduler(context))
                {
                    Task t1 = Task.Factory.StartNew(() =>
                                                        {
                                                            for (int i = 0; i < 100; i++)
                                                            {
                                                                Task task = new Task(() =>
                                                                                        {
                                                                                            count1++;
                                                                                        });
                                                                allTasks.Add(task);
                                                                task.Start(scheduler);

                                                            }
                                                        });

                    Task t2 = Task.Factory.StartNew(() =>
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            Task task = new Task(() =>
                            {
                                count2++;
                            });
                            allTasks.Add(task);
                            task.Start(scheduler);
                        }
                    });

                    t1.Wait(100);
                    t2.Wait(100);
                    Task.WaitAll(allTasks.ToArray(), 100);

                    Assert.AreEqual(100, count1);
                    Assert.AreEqual(100, count2);
                }
            }
        }
Пример #26
0
        public void OneTask()
        {
            bool triggered = false;

            using (NetMQContext context = NetMQContext.Create())
            {
                using (NetMQScheduler scheduler = new NetMQScheduler(context))
                {
                    Task task = new Task(() =>
                                            {
                                                triggered = true;
                                            });
                    task.Start(scheduler);
                    task.Wait();

                    Assert.IsTrue(triggered);
                }
            }
        }
Пример #27
0
        public void TwoThreads()
        {
            var count1 = 0;
            var count2 = 0;

            var allTasks = new ConcurrentBag<Task>();

            using (var scheduler = new NetMQScheduler())
            {
                var t1 = Task.Factory.StartNew(() =>
                {
                    for (var i = 0; i < 100; i++)
                    {
                        var task = new Task(() => { count1++; });
                        allTasks.Add(task);
                        task.Start(scheduler);
                    }
                });

                var t2 = Task.Factory.StartNew(() =>
                {
                    for (var i = 0; i < 100; i++)
                    {
                        var task = new Task(() => { count2++; });
                        allTasks.Add(task);
                        task.Start(scheduler);
                    }
                });

                t1.Wait(100);
                t2.Wait(100);
                Task.WaitAll(allTasks.ToArray(), 100);

                Assert.AreEqual(100, count1);
                Assert.AreEqual(100, count2);
            }
        }
Пример #28
0
 public static ITransportSource GenerateTransportSource(this NetMQSocket socket, NetMQScheduler scheduler)
 {
     return(new NetMQSocketTransportSource(socket, scheduler));
 }
Пример #29
0
 public NetMQSocketTransportSource(NetMQSocket socket, NetMQScheduler scheduler)
 {
     _socket               = socket;
     _scheduler            = scheduler;
     _socket.ReceiveReady += OnReceiveMessage;
 }