public void Init(string ipPort, string clientIpPort)
        {
            _clientIpPort = clientIpPort;

            if (!ipPort.CheckIpPort())
            {
                throw new ArgumentException($"IpPort Error : {ipPort}");
            }

            _disposables?.Dispose();
            _disposables = new CompositeDisposable();

            _server?.Dispose();

            _server = new SimpleTcpServer(ipPort);

            var connect = Observable
                          .FromEventPattern <ClientConnectedEventArgs>(h => _server.Events.ClientConnected += h,
                                                                       h => _server.Events.ClientConnected -= h)
                          .Select(p => (p.EventArgs.IpPort, true));

            var disconnect = Observable
                             .FromEventPattern <ClientDisconnectedEventArgs>(h => _server.Events.ClientDisconnected += h,
                                                                             h => _server.Events.ClientDisconnected -= h)
                             .Select(p => (p.EventArgs.IpPort, false));


            connect
            .Merge(disconnect)
            .Select(p => p.Item2)
            .StartWith(false)
            .DistinctUntilChanged()
            .SubscribeOn(NewThreadScheduler.Default)
            .Subscribe(s => _connectionState.OnNext(s))
            .DisposeWith(_disposables);


            Observable
            .FromEventPattern <DataReceivedEventArgs>(h => _server.Events.DataReceived += h,
                                                      h => _server.Events.DataReceived -= h)
            .Select(p => p.EventArgs.Data)
            .SubscribeOn(NewThreadScheduler.Default)
            .Subscribe(b => _received.OnNext(b))
            .DisposeWith(_disposables);
        }
Exemple #2
0
 public void stopServer()
 {
     contractLoadingThread.stopThread();
     foreach (ClientModel item in clients.Clients)
     {
         server.DisconnectClient(item.IpPort);
     }
     clients.clear();
     server.Stop();
     server.Dispose();
     while (server.IsListening)
     {
         ;
     }
     ServerLogger.Instance.writeLog("Server stopped...");
     server.Events.ClientConnected    -= EventClientConnected;
     server.Events.ClientDisconnected -= EventClientDisconnected;
     server.Events.DataReceived       -= EventDataReceived;
 }
 /// <summary>
 /// Kill the server. No mercy!
 /// </summary>
 public void Dispose()
 {
     server.Dispose();
 }
Exemple #4
0
        static void Main(string[] args)
        {
            _ListenerIp   = InputString("Listener IP   :", "127.0.0.1", false);
            _ListenerPort = InputInteger("Listener Port :", 9000, true, false);

            /*
             * _Ssl =          InputBoolean("Use SSL       :", false);
             *
             * if (_Ssl)
             * {
             *  _PfxFilename = InputString("PFX Certificate File:", "simpletcp.pfx", false);
             *  _PfxPassword = InputString("PFX File Password:"******"simpletcp", false);
             * }
             *
             * _Server = new SimpleTcpServer(_ListenerIp, _ListenerPort, _Ssl, _PfxFilename, _PfxPassword);
             */

            // _Server = new SimpleTcpServer(_ListenerIp, + ":" + _ListenerPort));

            _Server = new SimpleTcpServer(_ListenerIp, _ListenerPort);
            _Server.Events.ClientConnected    += ClientConnected;
            _Server.Events.ClientDisconnected += ClientDisconnected;
            _Server.Events.DataReceived       += DataReceived;

            _Server.Settings.IdleClientTimeoutSeconds  = _IdleClientTimeoutSeconds;
            _Server.Settings.MutuallyAuthenticate      = false;
            _Server.Settings.AcceptInvalidCertificates = true;
            _Server.Logger = Logger;
            _Server.Start();

            while (_RunForever)
            {
                string userInput = InputString("Command [? for help]:", null, false);
                switch (userInput)
                {
                case "?":
                    Menu();
                    break;

                case "q":
                case "Q":
                    _RunForever = false;
                    break;

                case "c":
                case "C":
                case "cls":
                    Console.Clear();
                    break;

                case "list":
                    ListClients();
                    break;

                case "send":
                    Send();
                    break;

                case "sendasync":
                    SendAsync();
                    break;

                case "remove":
                    RemoveClient();
                    break;

                case "dispose":
                    _Server.Dispose();
                    break;

                case "stats":
                    Console.WriteLine(_Server.Statistics.ToString());
                    break;

                case "stats reset":
                    _Server.Statistics.Reset();
                    break;

                case "start":
                    _Server.Start();
                    break;

                case "stop":
                    _Server.Stop();
                    break;
                }
            }
        }