public Task Watch <TService>(TService serviceManager, IPEndPoint endpoint) where TService : StateManagerBase, IService { return(Task.Run(() => { var tcpListener = new TcpListener(endpoint); tcpListener.Start(); using (var socket = tcpListener.AcceptSocket()) using (var networkStream = new NetworkStream(socket)) using (var messagingManager = new MessagingManager(networkStream, _bufferManager)) using (var listenTokenSource = new CancellationTokenSource()) { messagingManager.ReceiveEvent += (stream) => this.MessagingManager_ReceiveEvent(serviceManager, stream, messagingManager.Send, () => listenTokenSource.Cancel()); messagingManager.Run(); listenTokenSource.Token.WaitHandle.WaitOne(); messagingManager.Stop(); } foreach (var responseTask in _tasks.Values) { try { responseTask.Stop(); } catch (Exception) { } } })); }
protected override void Dispose(bool disposing) { if (_disposed) { return; } _disposed = true; if (disposing) { _tcpClient.Dispose(); _networkStream.Dispose(); _messagingManager.Stop(); _messagingManager.Dispose(); } }
protected override void Dispose(bool disposing) { this.Exit(); if (_isDisposed) { return; } _isDisposed = true; if (disposing) { _tcpClient.Dispose(); _messagingManager.Stop(); _messagingManager.Dispose(); } }
public void Watch() { _messagingManager.Run(); _tokenSource.Token.WaitHandle.WaitOne(); _messagingManager.Stop(); foreach (var responseTask in _tasks.Values) { try { responseTask.Stop(); } catch (Exception) { } } }