예제 #1
0
        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)
                    {
                    }
                }
            }));
        }
예제 #2
0
        protected override void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }
            _disposed = true;

            if (disposing)
            {
                _tcpClient.Dispose();
                _networkStream.Dispose();
                _messagingManager.Stop();
                _messagingManager.Dispose();
            }
        }
예제 #3
0
        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)
                {
                }
            }
        }