示例#1
0
        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);
        }
示例#2
0
        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());
        }
示例#3
0
        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);
        }
示例#4
0
        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());
        }
示例#5
0
        internal static void RegisterServer(BidirTcpServerTransportSink snk, 
			String receiver)
        {
            // Registering sink for a specified receiver channel
            _servers[receiver] = snk;
        }
示例#6
0
            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.
                    }
                }
            }
示例#7
0
 internal static void RegisterServer(BidirTcpServerTransportSink snk,
                                     String receiver)
 {
     // Registering sink for a specified receiver channel
     _servers[receiver] = snk;
 }