コード例 #1
0
        public void Receive_from_host()
        {
            var cre = PubnubCredentials.LoadFrom("pubnub credentials.txt");

            using (var sut = new PubnubStandInTransceiver(cre, "hostchannel"))
            {
                var        are    = new AutoResetEvent(false);
                HostOutput result = null;
                sut.ReceivedFromHost += _ =>
                {
                    result = _;
                    are.Set();
                };

                var sender = new Pubnub(cre.PublishingKey, cre.SubscriptionKey);
                var ho     = new HostOutput {
                    CorrelationId = Guid.NewGuid(), Data = "hello".Serialize(), Portname = "portname"
                };
                sender.publish(sut.StandInEndpointAddress, ho.Serialize(), _ => { });

                Assert.IsTrue(are.WaitOne(5000));

                Assert.AreEqual(ho.CorrelationId, result.CorrelationId);
                Assert.AreEqual(ho.Data, result.Data);
                Assert.AreEqual(ho.Portname, result.Portname);
            }
        }
コード例 #2
0
        public void Process_local_output(IMessage message)
        {
            var standInEndpointAddress = _cache.Get(message.CorrelationId);
            var output = new HostOutput {
                Portname = message.Port.OutputPortToStandInPortname(), Data = message.Data.Serialize(), CorrelationId = message.CorrelationId
            };

            Translated_output(new Tuple <string, HostOutput>(standInEndpointAddress, output));
        }
コード例 #3
0
            void ProcessOnHost(HostInput input, Action <HostOutput> sendOutput)
            {
                Assert.AreEqual("localhost:1234", input.StandInEndpointAddress);

                var inputPort      = new Port(input.Portname);                                               // remoteOp.inputPort
                var outputPortname = string.Format(inputPort.OperationName + "." + inputPort.Name + "-out"); // remoteOp.outputPort
                var output         = new HostOutput {
                    CorrelationId = input.CorrelationId, Data = ("<" + input.Data.Deserialize() + ">").Serialize(), Portname = outputPortname
                };

                sendOutput(output);
            }
コード例 #4
0
        public void Process_remote_input(HostOutput output)
        {
            var ctx = _cache.Get(output.CorrelationId);

            var port     = output.Portname.RemotePortnameToInputPort(ctx.Path, ctx.StandInOperationName);
            var inputMsg = new ContextualizedMessage(port, output.Data.Deserialize(), ctx.CorrelationId)
            {
                Priority    = ctx.Priority,
                Causalities = ctx.Causalities,
                FlowStack   = ctx.FlowStack
            };

            Translated_input(inputMsg);
        }
コード例 #5
0
        public void Host_to_StandIn()
        {
            using (var host = new WcfHostTransceiver("localhost:8000"))
                using (var standIn = new WcfStandInTransceiver("localhost:8001", "localhost:8000"))
                {
                    HostOutput output = null;
                    standIn.ReceivedFromHost += _ => output = _;

                    host.SendToStandIn(new Tuple <string, HostOutput>("localhost:8001", new HostOutput {
                        Data = new byte[] { 4, 2 }
                    }));

                    Assert.AreEqual(new byte[] { 4, 2 }, output.Data);
                }
        }
コード例 #6
0
        public void Connect_transceivers()
        {
            var cre = PubnubCredentials.LoadFrom("pubnub credentials.txt");

            using (var host = new PubnubHostTransceiver(cre, "thehost"))
            {
                var config = new FlowRuntimeConfiguration()
                             .AddOperation(new PubnubStandInOperation("op", cre, "thehost"))
                             .AddStream(".in", "op#greeting")
                             .AddStream("op#greeting", ".out");
                using (var fr = new FlowRuntime(config))
                {
                    fr.Message += Console.WriteLine;

                    host.ReceivedFromStandIn += rhi =>
                    {
                        var data = (string)rhi.Data.Deserialize();
                        var ho   = new HostOutput
                        {
                            CorrelationId = rhi.CorrelationId,
                            Data          = (data + "y").Serialize(),
                            Portname      = "greeting"
                        };

                        ThreadPool.QueueUserWorkItem(_ =>
                        {
                            host.SendToStandIn(new Tuple <string, HostOutput>(rhi.StandInEndpointAddress, ho));
                        });
                    };

                    fr.Process(".in", "hello");

                    var result = "";
                    Assert.IsTrue(fr.WaitForResult(5000, _ => result = _.Data as string));
                    Assert.AreEqual("helloy", result);
                }
            }
        }
コード例 #7
0
        public void Send_to_standIn()
        {
            var cre = PubnubCredentials.LoadFrom("pubnub credentials.txt");

            using (var sut = new PubnubHostTransceiver(cre, "hostchannel"))
            {
                var standIn = new Pubnub(cre.PublishingKey, cre.SubscriptionKey, cre.SecretKey);
                try
                {
                    var standInChannel = Guid.NewGuid().ToString();

                    var are = new AutoResetEvent(false);
                    ReadOnlyCollection <object> result = null;
                    standIn.subscribe(standInChannel, (ReadOnlyCollection <object> _) =>
                    {
                        result = _;
                        are.Set();
                    });

                    var ho = new HostOutput {
                        CorrelationId = Guid.NewGuid(), Data = "hello".Serialize(), Portname = "portname"
                    };
                    sut.SendToStandIn(new Tuple <string, HostOutput>(standInChannel, ho));

                    Assert.IsTrue(are.WaitOne(5000));

                    var hoReceived = Convert.FromBase64String((string)((JValue)result[0]).Value).Deserialize() as HostOutput;
                    Assert.AreEqual(ho.CorrelationId, hoReceived.CorrelationId);
                    Assert.AreEqual(ho.Data, hoReceived.Data);
                    Assert.AreEqual(ho.Portname, hoReceived.Portname);
                }
                finally
                {
                    standIn.subscribe("standIn", _ => {});
                }
            }
        }
コード例 #8
0
 internal void ChannelFromHost(HostOutput output)
 {
     ReceivedFromHost(output);
 }
コード例 #9
0
ファイル: SyncBus.cs プロジェクト: kouweizhong/NPantaRhei
 void SendFromHostToStandIn(string standInName, HostOutput output)
 {
     _standIns[standInName].ChannelFromHost(output);
 }