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)); } }
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)); } }