public RemotingServer(INetServerSettings settings, INetChannel channel)
 {
     _channel  = channel;
     _settings = settings;
     _channel.OnChannelReport += (sender, message) => { Debug.WriteLine("Server: " + message); };
     this._channel.SetHandlerIdentifier("ServerHandler");
 }
        public RemotingClient(INetServerSettings settings, INetChannel channel, RemotingClientSetup setup)
        {
            _channel    = channel;
            this._setup = setup;

            _channel.OnChannelReport += (sender, message) => { Debug.WriteLine($"Client: " + message); };
            _channel.Start(settings);
            _channel.OnEvent += (sender, ev) => { this.OnEvent?.Invoke(sender, ev); };
            this._channel.SetHandlerIdentifier("ClientHandler");
        }
예제 #3
0
        public void Start(INetServerSettings serverSettings)
        {
            this._serverSettings = serverSettings;
            IPEndPoint endpoint = this._serverSettings.GetServerAddress();

            _Listener = new TcpListener(endpoint.Address, endpoint.Port);
            _Listener.Start();

            Thread.Sleep(100);

            this.Report($"Listening {_Listener.LocalEndpoint}");

            _Listener.BeginAcceptTcpClient(new AsyncCallback(OnAccept), _Listener);

            //Task receive = Task.Run(() =>
            //{
            //    try
            //    {
            //        while (!ct.IsCancellationRequested)
            //        {
            //            using (TcpClient tcpClient = _Listener.AcceptTcpClient()) // Waiting for a client
            //            {
            //                using (_NetworkStream = tcpClient.GetStream())
            //                {
            //                    NetPackage response = this._handler.ProcessRequest(_NetworkStream, (ev) => { this.OnEvent(this, (ServiceEvent)ev); });
            //                    if (response != null)
            //                        _NetworkStream.Write(response.Data, 0, response.Data.Length);
            //                }
            //            }
            //        }
            //    }
            //    catch (SocketException e) when (e.SocketErrorCode == SocketError.Interrupted)
            //    {
            //       // throw new OperationCanceledExeption();
            //    }
            //    catch (Exception ex)
            //    {
            //        this.Report(ex.Message);
            //    }
            //}, ct);


            Task send = Task.Run(() =>
            {
                while (!this.tokenSource.IsCancellationRequested)
                {
                    SendUnit unit = _PackageQueue.Take();
                    if (unit == null)
                    {
                        break;
                    }

                    using (TcpClient sClient = new TcpClient())
                    {
                        //sClient.ReceiveTimeout
                        sClient.Connect(unit.Endpoint);
                        using (NetworkStream stream = sClient.GetStream())
                        {
                            stream.Write(unit.Pakage.Data, 0, unit.Pakage.Data.Length);
                            stream.ReadTimeout = 100 * 1000;               // 100 sec

                            _handler.ProcessRequest(stream, unit.Handler); //, unit.Handler);
                        }
                    }
                }
            }, ct);
        }
예제 #4
0
 public NetListener(INetServerSettings serverSettings, INetListenerHandler listenerHandler)
 {
     this._serverSettings  = serverSettings;
     this._listenerHandler = listenerHandler;
 }