public TcpClientSinkProvider(TcpConnectionPool pool, int timeout)
 {
     this.pool = pool;
     this.timeout = timeout;
     sinkCache = new Dictionary<TcpConnection, TcpClientSink>();
 }
        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);
        }
Beispiel #3
0
 public TcpConnection(TcpConnectionPool pool, Socket socket)
 {
     this.pool = pool;
     this.socket = socket;
     socket.NoDelay = true;
     connId = nextId++;
     networkStream = new NetworkStream(socket, true);
     reader = new BinaryReader(networkStream);
     writer = new BinaryWriter(new BufferedOutputStream(networkStream, DefaultBufferSize));
 }