public void StartServer()
        {
            // Start the policy server to be able to communicate with silverlight.
            myPolicyServer.StartPolicyServer();

            // Create duplex message receiver.
            // It can receive messages and also send back response messages.
            IDuplexStringMessagesFactory aStringMessagesFactory = new DuplexStringMessagesFactory();

            CommandReceiver = aStringMessagesFactory.CreateDuplexStringMessageReceiver();
            CommandReceiver.ResponseReceiverConnected    += ClientConnected;
            CommandReceiver.ResponseReceiverDisconnected += ClientDisconnected;
            CommandReceiver.RequestReceived += MessageReceived;

            // Create TCP based messaging.
            IMessagingSystemFactory aMessaging          = new TcpMessagingSystemFactory();
            IDuplexInputChannel     aDuplexInputChannel = aMessaging.CreateDuplexInputChannel("tcp://127.0.0.1:4502");

            // Attach the duplex input channel to the message receiver and start listening.
            // Note: Duplex input channel can receive messages but also send messages back.
            CommandReceiver.AttachDuplexInputChannel(aDuplexInputChannel);
            Logger.Info("Server started");

            StartWorker4504Server();
        }
 public EncryptingTypedMessageReceiver(IDuplexStringMessageReceiver receiver, Func <string, ISerializer> serializer_factory)
 {
     serializer_factory_ = serializer_factory;
     string_receiver_    = receiver;
     string_receiver_.RequestReceived              += OnRequestReceived;
     string_receiver_.ResponseReceiverConnected    += OnResponseReceiverConnected;
     string_receiver_.ResponseReceiverDisconnected += OnResponseReceiverDisconnected;
 }
示例#3
0
        static void Main(string[] args)
        {
            IMessagingSystemFactory     messagingSystemFactoryTCP = new TcpMessagingSystemFactory();
            DuplexStringMessagesFactory aReceiverFactory          = new DuplexStringMessagesFactory();

            myStringReceiver = aReceiverFactory.CreateDuplexStringMessageReceiver();
            // Subscribe to get notified when a client connects, disconnects
            // or sends a message.

            myStringReceiver.RequestReceived           += OnMessageReceived;
            myStringReceiver.ResponseReceiverConnected += OnConnect;
            IMessagingSystemFactory stringMessaging = new TcpMessagingSystemFactory()
            {
                // Set to receive messages in the main UI thread.
                // Note: if this is not set then methods OnMessageReceived, OnClientConnected
                //       and OnClientDisconnected would not be called from main UI thread
                //       but from a listener thread.
                MaxAmountOfConnections = 5
            };

            // Create input channel.
            IDuplexInputChannel aInputChannel = stringMessaging.CreateDuplexInputChannel("tcp://192.168.1.5:8061/");

            // Attach the input channel and be able to receive messages
            // and send back response messages.
            myStringReceiver.AttachDuplexInputChannel(aInputChannel);



            IMessagingSystemFactory aTcpMessaging = new TcpMessagingSystemFactory();



            // Use authenticated connection.
            IMessagingSystemFactory aMessaging =
                new AuthenticatedMessagingFactory(aTcpMessaging, GetHandshakeMessage, Authenticate);
            IDuplexInputChannel anInputChannel =
                aMessaging.CreateDuplexInputChannel("tcp://192.168.1.5:8060/");

            // Use simple text messages.
            IDuplexStringMessagesFactory aStringMessagesFactory = new DuplexStringMessagesFactory();

            myReceiver = aStringMessagesFactory.CreateDuplexStringMessageReceiver();
            myReceiver.RequestReceived += OnRequestReceived;

            // Attach input channel and start listening.
            // Note: the authentication sequence will be performed when
            //       a client connects the service.
            myReceiver.AttachDuplexInputChannel(anInputChannel);

            Console.WriteLine("Service is running. Press Enter to stop.");
            Console.ReadLine();

            // Detach input channel and stop listening.
            // Note: tis will release the listening thread.
            myReceiver.DetachDuplexInputChannel();
        }
示例#4
0
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindowLoaded;
            SizeChanged += MainWindowSizeChanged;

            var target =
                LogManager.Configuration.AllTargets
                .Where(x => x.Name == TargetName)
                .Single() as MemoryTargetEx;

            if (target != null)
                target.Messages.Subscribe(msg => _messages.Add(msg));

            // Start the policy server to be able to communicate with silverlight.
            // Note: Before Silverlight open the communication it asks the policy
            //       server for the policy xml.
            //       If the policy server is not present or the content of the
            //       policy xml does not allow the communication the communication
            //       is not open.
            myPolicyServer = new TcpPolicyServer();
            myPolicyServer.StartPolicyServer();

            // Create duplex message receiver.
            // It can receive messages and also send back response messages.
            IDuplexStringMessagesFactory aStringMessagesFactory = new DuplexStringMessagesFactory();
            myMessageReceiver = aStringMessagesFactory.CreateDuplexStringMessageReceiver();
            myMessageReceiver.ResponseReceiverConnected += ClientConnected;
            myMessageReceiver.ResponseReceiverDisconnected += ClientDisconnected;
            myMessageReceiver.RequestReceived += MessageReceived;

            // Create TCP based messaging.
            // Note: TCP in Silverlight can use only ports 4502 - 4532.
            IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
            IDuplexInputChannel aDuplexInputChannel = aMessaging.CreateDuplexInputChannel("tcp://127.0.0.1:4502/");

            // Attach the duplex input channel to the message receiver and start listening.
            // Note: Duplex input channel can receive messages but also send messages back.
            myMessageReceiver.AttachDuplexInputChannel(aDuplexInputChannel);
        }
        public void WrapUnwrapMessage()
        {
            // Wrapped/unwrapped channels
            string aChannel1Id = "Channel1Id";
            string aChannel2Id = "Channel2Id";

            IDuplexStringMessagesFactory aStringMessagesFactory = new DuplexStringMessagesFactory();

            IDuplexStringMessageReceiver aStringMessageReceiver1 = aStringMessagesFactory.CreateDuplexStringMessageReceiver();
            IDuplexStringMessageReceiver aStringMessageReceiver2 = aStringMessagesFactory.CreateDuplexStringMessageReceiver();

            IDuplexStringMessageSender aStringMessageSender1 = aStringMessagesFactory.CreateDuplexStringMessageSender();
            IDuplexStringMessageSender aStringMessageSender2 = aStringMessagesFactory.CreateDuplexStringMessageSender();

            // Attach input channels to string receivers.
            aStringMessageReceiver1.AttachDuplexInputChannel(myMessagingForUnwrapper.CreateDuplexInputChannel(aChannel1Id));
            aStringMessageReceiver2.AttachDuplexInputChannel(myMessagingForUnwrapper.CreateDuplexInputChannel(aChannel2Id));

            // Connect string senders with the channel wrapper.
            myDuplexChannelWrapper.AttachDuplexInputChannel(myMessagingForWrapper.CreateDuplexInputChannel(aChannel1Id));
            myDuplexChannelWrapper.AttachDuplexInputChannel(myMessagingForWrapper.CreateDuplexInputChannel(aChannel2Id));
            aStringMessageSender1.AttachDuplexOutputChannel(myMessagingForWrapper.CreateDuplexOutputChannel(aChannel1Id));
            aStringMessageSender2.AttachDuplexOutputChannel(myMessagingForWrapper.CreateDuplexOutputChannel(aChannel2Id));

            // Connect wrapper and unwrapper to global channels.
            myDuplexChannelUnwrapper.AttachDuplexInputChannel(myDuplexGlobalInputChannel);
            myDuplexChannelWrapper.AttachDuplexOutputChannel(myDuplexGlobalOutputChannel);


            StringRequestReceivedEventArgs aReceivedMessage1 = null;

            aStringMessageReceiver1.RequestReceived += (x, y) =>
            {
                aReceivedMessage1 = y;
                aStringMessageReceiver1.SendResponseMessage(y.ResponseReceiverId, "Response1");
            };

            StringRequestReceivedEventArgs aReceivedMessage2 = null;

            aStringMessageReceiver2.RequestReceived += (x, y) =>
            {
                aReceivedMessage2 = y;
                aStringMessageReceiver2.SendResponseMessage(y.ResponseReceiverId, "Response2");
            };

            StringResponseReceivedEventArgs aReceivedResponse1 = null;

            aStringMessageSender1.ResponseReceived += (x, y) =>
            {
                aReceivedResponse1 = y;
            };

            StringResponseReceivedEventArgs aReceivedResponse2 = null;

            aStringMessageSender2.ResponseReceived += (x, y) =>
            {
                aReceivedResponse2 = y;
            };

            aStringMessageSender1.SendMessage("Message1");

            Assert.AreEqual("Message1", aReceivedMessage1.RequestMessage, "Message receiver 1 received incorrect message.");
            Assert.AreEqual("Response1", aReceivedResponse1.ResponseMessage, "Response receiver 1 received incorrect message.");
            Assert.IsNull(aReceivedMessage2, "Message receiver 2 should not receive a message.");
            Assert.IsNull(aReceivedResponse2, "Response receiver 2 should not receive a message.");

            string anAssociatedResponseReceiverId = myDuplexChannelUnwrapper.GetAssociatedResponseReceiverId(aReceivedMessage1.ResponseReceiverId);

            Assert.AreEqual(myDuplexChannelWrapper.AttachedDuplexOutputChannel.ResponseReceiverId, anAssociatedResponseReceiverId);


            aReceivedMessage1  = null;
            aReceivedResponse1 = null;

            aStringMessageSender2.SendMessage("Message2");

            Assert.AreEqual("Message2", aReceivedMessage2.RequestMessage, "Message receiver 2 received incorrect message.");
            Assert.AreEqual("Response2", aReceivedResponse2.ResponseMessage, "Response receiver 2 received incorrect message.");
            Assert.IsNull(aReceivedMessage1, "Message receiver 1 should not receive a message.");
            Assert.IsNull(aReceivedResponse1, "Response receiver 1 should not receive a message.");
        }
        //[Test]
        public void AssociatedResponseReceiverId()
        {
            // Wrapped/unwrapped channels
            string aChannel1Id = "Channel1Id";
            string aChannel2Id = "Channel2Id";

            IDuplexStringMessagesFactory aStringMessagesFactory = new DuplexStringMessagesFactory();

            IDuplexStringMessageReceiver aStringMessageReceiver1 = aStringMessagesFactory.CreateDuplexStringMessageReceiver();
            IDuplexStringMessageReceiver aStringMessageReceiver2 = aStringMessagesFactory.CreateDuplexStringMessageReceiver();

            IDuplexStringMessageSender aStringMessageSender1 = aStringMessagesFactory.CreateDuplexStringMessageSender();
            IDuplexStringMessageSender aStringMessageSender2 = aStringMessagesFactory.CreateDuplexStringMessageSender();

            // Attach input channels to string receivers.
            aStringMessageReceiver1.AttachDuplexInputChannel(myMessagingForUnwrapper.CreateDuplexInputChannel(aChannel1Id));
            aStringMessageReceiver2.AttachDuplexInputChannel(myMessagingForUnwrapper.CreateDuplexInputChannel(aChannel2Id));

            // Connect string senders with the channel wrapper.
            myDuplexChannelWrapper.AttachDuplexInputChannel(myMessagingForWrapper.CreateDuplexInputChannel(aChannel1Id));
            myDuplexChannelWrapper.AttachDuplexInputChannel(myMessagingForWrapper.CreateDuplexInputChannel(aChannel2Id));
            aStringMessageSender1.AttachDuplexOutputChannel(myMessagingForWrapper.CreateDuplexOutputChannel(aChannel1Id));
            aStringMessageSender2.AttachDuplexOutputChannel(myMessagingForWrapper.CreateDuplexOutputChannel(aChannel2Id));

            try
            {
                // Connect wrapper and unwrapper to global channels.
                myDuplexChannelUnwrapper.AttachDuplexInputChannel(myDuplexGlobalInputChannel);
                myDuplexChannelWrapper.AttachDuplexOutputChannel(myDuplexGlobalOutputChannel);


                StringRequestReceivedEventArgs aReceivedMessage1 = null;
                aStringMessageReceiver1.RequestReceived += (x, y) =>
                {
                    aReceivedMessage1 = y;
                };
                bool aResponseReceiverChannel1Disconnected = false;
                aStringMessageReceiver1.ResponseReceiverDisconnected += (x, y) =>
                {
                    aResponseReceiverChannel1Disconnected = true;
                };

                StringRequestReceivedEventArgs aReceivedMessage2 = null;
                aStringMessageReceiver2.RequestReceived += (x, y) =>
                {
                    aReceivedMessage2 = y;
                };
                bool aResponseReceiverChannel2Disconnected = false;
                aStringMessageReceiver2.ResponseReceiverDisconnected += (x, y) =>
                {
                    aResponseReceiverChannel2Disconnected = true;
                };


                aStringMessageSender1.SendMessage("Message1");
                aStringMessageSender2.SendMessage("Message2");

                string anAssociatedId1 = myDuplexChannelUnwrapper.GetAssociatedResponseReceiverId(aReceivedMessage1.ResponseReceiverId);
                string anAssociatedId2 = myDuplexChannelUnwrapper.GetAssociatedResponseReceiverId(aReceivedMessage2.ResponseReceiverId);

                Assert.AreEqual(anAssociatedId1, anAssociatedId2);

                myDuplexChannelUnwrapper.AttachedDuplexInputChannel.DisconnectResponseReceiver(anAssociatedId1);
                Assert.IsTrue(aResponseReceiverChannel1Disconnected);
                Assert.IsTrue(aResponseReceiverChannel2Disconnected);
            }
            finally
            {
                myDuplexChannelUnwrapper.DetachDuplexInputChannel();
                myDuplexChannelWrapper.DetachDuplexOutputChannel();
            }
        }
示例#7
0
文件: SMSIM.cs 项目: JMdeKlerk/SMSIM
 private void SMSIM_Load(object sender, EventArgs e)
 {
     IDuplexStringMessagesFactory aReceiverFactory = new DuplexStringMessagesFactory();
     receiver = aReceiverFactory.CreateDuplexStringMessageReceiver();
     receiver.RequestReceived += handleRequest;
     IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
     String localIP = LocalIPAddress();
     IDuplexInputChannel anInputChannel = aMessaging.CreateDuplexInputChannel("tcp://" + localIP + ":8060/");
     receiver.AttachDuplexInputChannel(anInputChannel);
     if (receiver.IsDuplexInputChannelAttached) ipAddress.Text = localIP;
     this.ActiveControl = label1;
     System.Timers.Timer pingTimer = new System.Timers.Timer();
     pingTimer.Elapsed += new ElapsedEventHandler(pingTimeout);
     pingTimer.Interval = 1000 * 30;
     pingTimer.Enabled = true;
 }
        public void StartServer()
        {
            // Start the policy server to be able to communicate with silverlight.
            myPolicyServer.StartPolicyServer();

            // Create duplex message receiver.
            // It can receive messages and also send back response messages.
            IDuplexStringMessagesFactory aStringMessagesFactory = new DuplexStringMessagesFactory();
            CommandReceiver = aStringMessagesFactory.CreateDuplexStringMessageReceiver();
            CommandReceiver.ResponseReceiverConnected += ClientConnected;
            CommandReceiver.ResponseReceiverDisconnected += ClientDisconnected;
            CommandReceiver.RequestReceived += MessageReceived;

            // Create TCP based messaging.
            IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
            IDuplexInputChannel aDuplexInputChannel = aMessaging.CreateDuplexInputChannel("tcp://127.0.0.1:4502");

            // Attach the duplex input channel to the message receiver and start listening.
            // Note: Duplex input channel can receive messages but also send messages back.
            CommandReceiver.AttachDuplexInputChannel(aDuplexInputChannel);
            Logger.Info("Server started");

            StartWorker4504Server();
        }