コード例 #1
0
        private void Init(IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
        {
            pool = new TcpConnectionPool();
            if(clientSinkProvider == null)
            {
                this.clientSinkProvider = new BinaryClientFormatterSinkProvider();
                this.clientSinkProvider.Next = new TcpClientSinkProvider(pool, timeout);
            }
            else
            {
                this.clientSinkProvider = clientSinkProvider;
                IClientChannelSinkProvider provider = clientSinkProvider;
                while(provider.Next != null)
                    provider = provider.Next;
                provider.Next = new TcpClientSinkProvider(pool, timeout);
            }

            if(serverSinkProvider == null)
                serverSinkProvider = new BinaryServerFormatterSinkProvider();

            try
            {
                if(host != null)
                {
                    if(useIpAddress)
                        host = Dns.GetHostName();
                }
                else if(bindTo != IPAddress.Any)
                    host = bindTo.ToString();
                else
                {
                    IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
                    if(addresses.Length == 0)
                        throw new RemotingException("TCP error: IP address could not be determined for this host!");
                    host = addresses[0].ToString();
                }
            }
            catch(SocketException e)
            {
                throw new RemotingException("TCP error: DNS error!", e);
            }

            channelData = new ChannelDataStore(new string[] { "tcp://" + TcpConnection.ThisMachineID });
            for(IServerChannelSinkProvider provider = serverSinkProvider; provider != null; provider = provider.Next)
                provider.GetChannelData(channelData);

            IServerChannelSink chain = ChannelServices.CreateServerChannelSinkChain(serverSinkProvider, this);
            serverSink = new TcpServerSink(chain);

            StartListening(null);
        }
コード例 #2
0
        private void Init(IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
        {
            if(clientSinkProvider == null)
            {
                this.clientSinkProvider = new BinaryClientFormatterSinkProvider();
                this.clientSinkProvider.Next = new TcpClientSinkProvider(pool, timeout);
            }

            else
            {
                this.clientSinkProvider = clientSinkProvider;
                IClientChannelSinkProvider provider = clientSinkProvider;
                while(provider.Next != null)
                    provider = provider.Next;
                provider.Next = new TcpClientSinkProvider(pool, timeout);
            }

            if(serverSinkProvider == null)
                serverSinkProvider = new BinaryServerFormatterSinkProvider();

            channelData = new ChannelDataStore(new string[] { "tcp://" + TcpConnection.ThisMachineID });
            for(IServerChannelSinkProvider provider = serverSinkProvider; provider != null; provider = provider.Next)
                provider.GetChannelData(channelData);

            IServerChannelSink chain = ChannelServices.CreateServerChannelSinkChain(serverSinkProvider, this);
            serverSink = new TcpServerSink(chain);

            StartListening(null);
        }