コード例 #1
0
        public void TestTwoWayCommunication()
        {
            // Test data.
            int[]    numbers = { 12, 25 };
            string[] strings = { "The first string", "The second string" };

            BlockingCollection <byte[]> queue1 = new BlockingCollection <byte[]>();
            BlockingCollection <byte[]> queue2 = new BlockingCollection <byte[]>();

            IConfiguration config = Tang.NewConfigurationBuilder()
                                    .BindStringNamedParam <ProtocolSerializer.AssemblyName>(this.GetType().Assembly.FullName)
                                    .BindStringNamedParam <ProtocolSerializer.MessageNamespace>("org.apache.reef.wake.tests.message")
                                    .Build();

            var injector             = Tang.NewInjector(config);
            var remoteManagerFactory = injector.GetInstance <IRemoteManagerFactory>();
            var serializer           = injector.GetInstance <ProtocolSerializer>();

            using (var remoteManager1 = remoteManagerFactory.GetInstance(ListeningAddress, Codec))
                using (var remoteManager2 = remoteManagerFactory.GetInstance(ListeningAddress, Codec))
                {
                    // Register observers for remote manager 1 and remote manager 2
                    var remoteEndpoint = new IPEndPoint(ListeningAddress, 0);
                    remoteManager1.RegisterObserver(remoteEndpoint, Observer.Create <byte[]>(queue1.Add));
                    remoteManager2.RegisterObserver(remoteEndpoint, Observer.Create <byte[]>(queue2.Add));

                    var msg1 = new AvroTestMessage(numbers[0], strings[0]);
                    var msg2 = new AvroTestMessage(numbers[1], strings[1]);

                    // Remote manager 1 sends avro message to remote manager 2
                    var remoteObserver1 = remoteManager1.GetRemoteObserver(remoteManager2.LocalEndpoint);
                    remoteObserver1.OnNext(serializer.Write(msg1, 1));

                    // Remote manager 2 sends avro message to remote manager 1
                    var remoteObserver2 = remoteManager2.GetRemoteObserver(remoteManager1.LocalEndpoint);
                    remoteObserver2.OnNext(serializer.Write(msg2, 2));

                    // Verify the messages are properly received.
                    serializer.Read(queue1.Take(), new TestMessageObserver(2, msg2));
                    serializer.Read(queue2.Take(), new TestMessageObserver(1, msg1));
                }
        }
コード例 #2
0
        public void TestTwoWayCommunication()
        {
            // Test data.
            int[]    numbers = { 12, 25 };
            string[] strings = { "The first string", "The second string" };

            IPAddress listeningAddress         = IPAddress.Parse("127.0.0.1");
            BlockingCollection <byte[]> queue1 = new BlockingCollection <byte[]>();
            BlockingCollection <byte[]> queue2 = new BlockingCollection <byte[]>();

            ProtocolSerializer    serializer            = new ProtocolSerializer(this.GetType().Assembly, "org.apache.reef.wake.tests.message");
            IRemoteManagerFactory _remoteManagerFactory = TangFactory.GetTang().NewInjector().GetInstance <IRemoteManagerFactory>();

            using (var remoteManager1 = _remoteManagerFactory.GetInstance(listeningAddress, new ByteCodec()))
                using (var remoteManager2 = _remoteManagerFactory.GetInstance(listeningAddress, new ByteCodec()))
                {
                    // Register observers for remote manager 1 and remote manager 2
                    var remoteEndpoint = new IPEndPoint(listeningAddress, 0);
                    remoteManager1.RegisterObserver(remoteEndpoint, Observer.Create <byte[]>(queue1.Add));
                    remoteManager2.RegisterObserver(remoteEndpoint, Observer.Create <byte[]>(queue2.Add));

                    var msg1 = new AvroTestMessage(numbers[0], strings[0]);
                    var msg2 = new AvroTestMessage(numbers[1], strings[1]);

                    // Remote manager 1 sends avro message to remote manager 2
                    var remoteObserver1 = remoteManager1.GetRemoteObserver(remoteManager2.LocalEndpoint);
                    remoteObserver1.OnNext(serializer.Write(msg1, 1));

                    // Remote manager 2 sends avro message to remote manager 1
                    var remoteObserver2 = remoteManager2.GetRemoteObserver(remoteManager1.LocalEndpoint);
                    remoteObserver2.OnNext(serializer.Write(msg2, 2));

                    // Verify the messages are properly received.
                    serializer.Read(queue1.Take(), new TestMessageObserver(2, msg2));
                    serializer.Read(queue2.Take(), new TestMessageObserver(1, msg1));
                }
        }