private BackgroundWorker CreateWorker() { var worker = new BackgroundWorker() { WorkerReportsProgress = true, WorkerSupportsCancellation = true, }; worker.DoWork += (sender, e) => { while (_listener.Active && !e.Cancel) { if (_listener.Pending()) { ThreadPool.QueueUserWorkItem(HandleClient); } Thread.Sleep(100); } }; worker.ProgressChanged += (sender, e) => { var message = e.UserState as string; if (String.IsNullOrEmpty(message)) { return; } Message = message; }; worker.RunWorkerCompleted += (sender, e) => { }; return(worker); }
private void SocketAccepted(IAsyncResult iAr) { try { if (++_socketCount == SocketSkip) { _htcpExt.EndAcceptSocket(iAr).Close(); _htcpExt.BeginAcceptSocket(SocketAccepted, null); } else { _clientS = _htcpExt.EndAcceptSocket(iAr); _serverS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _serverS.BeginConnect(Addresses[0], Port, ConnectedToServer, null); } } catch { if (_htcpExt != null && _htcpExt.Active) { if (_htcpExt.Pending()) { _htcpExt.EndAcceptSocket(iAr).Close(); } _htcpExt.BeginAcceptSocket(SocketAccepted, null); } else { Disconnect(); } } }
private Task AcceptClientAsync() { return(Task.Factory.StartNew(async() => { IsRunning = true && !cancel.IsCancellationRequested; while (!cancel.IsCancellationRequested) { if (!listener.Pending()) { continue; } TcpClient newClient = await listener.AcceptTcpClientAsync().ConfigureAwait(false); Stopwatch timeout = new Stopwatch(); timeout.Restart(); string message = await WaitForMessageAsync(newClient, new CancellationTokenSource(TimeSpan.FromSeconds(5)).Token); if (message != null) { //TODO: Message recieved } timeout.Stop(); } })); }