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); }
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(); }
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; } } }