public BidirTcpServerChannel(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) { _name = (String)properties["name"]; if (_name == null) { _name = "BidirTcpServer"; } _port = int.Parse((String)properties["port"]); String[] urls = { this.GetURLBase() }; // needed for CAOs! _channelData = new ChannelDataStore(urls); String IPAddress = Helper.GetIPAddress(); if (serverSinkProvider == null) { serverSinkProvider = new BinaryServerFormatterSinkProvider(); } if (_clientProvider == null) { _clientProvider = new BinaryClientFormatterSinkProvider(); } _sinkProvider = serverSinkProvider; // collect channel data from all providers IServerChannelSinkProvider provider = _sinkProvider; while (provider != null) { provider.GetChannelData(_channelData); provider = provider.Next; } // create the sink chain IServerChannelSink snk = ChannelServices.CreateServerChannelSinkChain(_sinkProvider, this); // add the BidirTcpServerTransportSink as a first element to the chain _transportSink = new BidirTcpServerTransportSink(snk, _port, IPAddress); MessageHandler.RegisterServer(_transportSink, Helper.GetIPAddress() + ":" + _port); MessageHandler.RegisterServer(_transportSink, Helper.GetMyGUID().ToString()); // start to listen this.StartListening(null); }
public BidirTcpClientChannel(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) { _properties = properties; _provider = clientSinkProvider; _name = (String)_properties["name"]; String[] urls = { this.GetURLBase() }; // needed for CAOs! _channelData = new ChannelDataStore(urls); if (_provider == null) { _provider = new BinaryClientFormatterSinkProvider(); } if (serverSinkProvider == null) { serverSinkProvider = new BinaryServerFormatterSinkProvider(); } // collect additional channel data from all providers IServerChannelSinkProvider prov = serverSinkProvider; while (prov != null) { prov.GetChannelData(_channelData); prov = prov.Next; } // create the sink chain IServerChannelSink snk = ChannelServices.CreateServerChannelSinkChain(serverSinkProvider, this); // add the BidirTcpServerTransportSink as a first element to the chain _serverSink = new BidirTcpServerTransportSink(snk); MessageHandler.RegisterServer(_serverSink, Helper.GetMyGUID().ToString()); }
public BidirTcpServerChannel(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) { _name = (String) properties["name"]; if (_name == null) { _name = "BidirTcpServer"; } _port = int.Parse((String) properties["port"]); String[] urls = { this.GetURLBase() }; // needed for CAOs! _channelData = new ChannelDataStore(urls); String IPAddress = Helper.GetIPAddress(); if (serverSinkProvider == null) { serverSinkProvider = new BinaryServerFormatterSinkProvider(); } if (_clientProvider == null) { _clientProvider = new BinaryClientFormatterSinkProvider(); } _sinkProvider = serverSinkProvider; // collect channel data from all providers IServerChannelSinkProvider provider = _sinkProvider; while (provider != null) { provider.GetChannelData(_channelData); provider = provider.Next; } // create the sink chain IServerChannelSink snk = ChannelServices.CreateServerChannelSinkChain(_sinkProvider,this); // add the BidirTcpServerTransportSink as a first element to the chain _transportSink = new BidirTcpServerTransportSink(snk, _port ,IPAddress); MessageHandler.RegisterServer(_transportSink,Helper.GetIPAddress() + ":" + _port); MessageHandler.RegisterServer(_transportSink,Helper.GetMyGUID().ToString()); // start to listen this.StartListening(null); }
public BidirTcpClientChannel(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) { _properties = properties; _provider = clientSinkProvider; _name = (String) _properties["name"]; String[] urls = { this.GetURLBase() }; // needed for CAOs! _channelData = new ChannelDataStore(urls); if (_provider == null) { _provider = new BinaryClientFormatterSinkProvider(); } if (serverSinkProvider == null) { serverSinkProvider = new BinaryServerFormatterSinkProvider(); } // collect additional channel data from all providers IServerChannelSinkProvider prov = serverSinkProvider; while (prov != null) { prov.GetChannelData(_channelData); prov = prov.Next; } // create the sink chain IServerChannelSink snk = ChannelServices.CreateServerChannelSinkChain(serverSinkProvider,this); // add the BidirTcpServerTransportSink as a first element to the chain _serverSink = new BidirTcpServerTransportSink(snk); MessageHandler.RegisterServer(_serverSink,Helper.GetMyGUID().ToString()); }
internal static void RegisterServer(BidirTcpServerTransportSink snk, String receiver) { // Registering sink for a specified receiver channel _servers[receiver] = snk; }
public void HandleMessage() { // whenever a channel message has been received, it // will be forwarded to this method // check if it's a request or a reply if ((msg.InReplyTo == Guid.Empty) && (msg.ID != Guid.Empty)) { // it's a request Guid requestID = msg.ID; // Request received // check for a registered server BidirTcpServerTransportSink snk = (BidirTcpServerTransportSink) _servers[msg.To]; if (snk == null) { // No server side sink found for address snk = (BidirTcpServerTransportSink) _servers[msg.SecondaryGuessTo]; if (snk == null) { Console.WriteLine("No sink found for address"); return; } } // Dispatch the message to serversink // Console.WriteLine("Will dispatch message to server sink"); snk.HandleIncomingMessage(msg); } else if (msg.InReplyTo != Guid.Empty) { // check who's waiting for it Object notify = _waitingFor[msg.InReplyTo]; AutoResetEvent evt = notify as AutoResetEvent; if (evt != null) { _responses[msg.InReplyTo] = msg; //Console.WriteLine("Removing Event for ID:" + msg.InReplyTo.ToString()); _waitingFor.Remove(msg.InReplyTo); evt.Set(); } else if (notify as AsyncResponseHandler != null) { _waitingFor.Remove(msg.InReplyTo); ((AsyncResponseHandler)notify).HandleAsyncResponseMsg(msg); } else { Console.WriteLine("No one is waiting for this reply"); // No one is waiting for this reply. Ignore. } } }