public void TestNonEmptyArgumentInjectionWritableTwoWayCommunication()
        {
            IPAddress listeningAddress = IPAddress.Parse("127.0.0.1");

            BlockingCollection <PrefixedStringWritable> queue1 = new BlockingCollection <PrefixedStringWritable>();
            BlockingCollection <PrefixedStringWritable> queue2 = new BlockingCollection <PrefixedStringWritable>();
            List <string> events1 = new List <string>();
            List <string> events2 = new List <string>();

            using (var remoteManager1 = _remoteManagerFactory2.GetInstance <PrefixedStringWritable>(listeningAddress, 0))
                using (var remoteManager2 = _remoteManagerFactory2.GetInstance <PrefixedStringWritable>(listeningAddress, 0))
                {
                    // Register observers for remote manager 1 and remote manager 2
                    var remoteEndpoint = new IPEndPoint(listeningAddress, 0);
                    var observer1      = Observer.Create <PrefixedStringWritable>(queue1.Add);
                    var observer2      = Observer.Create <PrefixedStringWritable>(queue2.Add);
                    remoteManager1.RegisterObserver(remoteEndpoint, observer1);
                    remoteManager2.RegisterObserver(remoteEndpoint, observer2);

                    // Remote manager 1 sends 3 events to remote manager 2
                    var remoteObserver1 = remoteManager1.GetRemoteObserver(remoteManager2.LocalEndpoint);
                    remoteObserver1.OnNext(new PrefixedStringWritable("abc"));
                    remoteObserver1.OnNext(new PrefixedStringWritable("def"));
                    remoteObserver1.OnNext(new PrefixedStringWritable("ghi"));

                    // Remote manager 2 sends 4 events to remote manager 1
                    var remoteObserver2 = remoteManager2.GetRemoteObserver(remoteManager1.LocalEndpoint);
                    remoteObserver2.OnNext(new PrefixedStringWritable("jkl"));
                    remoteObserver2.OnNext(new PrefixedStringWritable("mno"));
                    remoteObserver2.OnNext(new PrefixedStringWritable("pqr"));
                    remoteObserver2.OnNext(new PrefixedStringWritable("stu"));

                    events1.Add(queue1.Take().Data);
                    events1.Add(queue1.Take().Data);
                    events1.Add(queue1.Take().Data);
                    events1.Add(queue1.Take().Data);

                    events2.Add(queue2.Take().Data);
                    events2.Add(queue2.Take().Data);
                    events2.Add(queue2.Take().Data);
                }

            Assert.AreEqual(4, events1.Count);
            Assert.AreEqual(3, events2.Count);
        }
Esempio n. 2
0
        private WritableNetworkService(
            [Parameter(typeof(NetworkServiceOptions.NetworkServicePort))] int nsPort,
            IObserver <WritableNsMessage <T> > messageHandler,
            IIdentifierFactory idFactory,
            INameClient nameClient,
            WritableRemoteManagerFactory remoteManagerFactory)
        {
            IPAddress localAddress = NetworkUtils.LocalIPAddress;

            _remoteManager  = remoteManagerFactory.GetInstance <WritableNsMessage <T> >(localAddress, nsPort);
            _messageHandler = messageHandler;

            _nameClient    = nameClient;
            _connectionMap = new Dictionary <IIdentifier, IConnection <T> >();

            Logger.Log(Level.Info, "Started network service");
        }
        public void TestWritableOneWayCommunication()
        {
            IPAddress listeningAddress = IPAddress.Parse("127.0.0.1");

            BlockingCollection <WritableString> queue = new BlockingCollection <WritableString>();
            List <string> events = new List <string>();

            using (var remoteManager1 = _remoteManagerFactory1.GetInstance <WritableString>(listeningAddress, 0))
                using (var remoteManager2 = _remoteManagerFactory1.GetInstance <WritableString>(listeningAddress, 0))
                {
                    var        observer  = Observer.Create <WritableString>(queue.Add);
                    IPEndPoint endpoint1 = new IPEndPoint(listeningAddress, 0);
                    remoteManager2.RegisterObserver(endpoint1, observer);

                    var remoteObserver = remoteManager1.GetRemoteObserver(remoteManager2.LocalEndpoint);
                    remoteObserver.OnNext(new WritableString("abc"));
                    remoteObserver.OnNext(new WritableString("def"));
                    remoteObserver.OnNext(new WritableString("ghi"));

                    events.Add(queue.Take().Data);
                    events.Add(queue.Take().Data);
                    events.Add(queue.Take().Data);
                }

            Assert.AreEqual(3, events.Count);
        }