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