/// <summary> /// Each client connection will be served by this thread. /// </summary> /// <param name="client"></param> private void ClientThread(object client) { var socket = (Socket)client; WriteToLogbook(string.Format("New client from: {0}", socket.RemoteEndPoint)); lock (_clients) { _clients.Add(socket); } try { using (var mjpegWriter = new MjpegWriter(new NetworkStream(socket, true))) { // Writes the response header to the client. mjpegWriter.WriteHeader(); // Streams the images from the source to the client. foreach (var imageStream in ImagesSource.Streams()) { if (Interval > 0) { Thread.Sleep(Interval); } mjpegWriter.Write(imageStream); } } } catch (Exception exception) { WriteToLogbook(exception.Message); } finally { lock (_clients) { _clients.Remove(socket); } } }
private void ClientThread(object client) { if (_stopListeningTokenSource.IsCancellationRequested) { return; } Socket socket = (Socket)client; lock (_clients) _clients.Add(socket); try { using (MjpegWriter writer = new MjpegWriter(new NetworkStream(socket, true))) { writer.WriteHeader(); while (!_stopListeningTokenSource.IsCancellationRequested) { MemoryStream ms = new MemoryStream(); foreach (var imgStream in ImagesSource.Streams()) { Thread.Sleep(_interval); writer.Write(imgStream); } } } } catch { // Shit happens... // Client probably disconnected. } finally { lock (_clients) _clients.Remove(socket); } }