Ejemplo n.º 1
0
        public async Task StartServer(string ip, int port)
        {
            _server = new NetServer(ip, port);
            _server.StartServer();
            ScreenCaptureThread screen_capture_thread = new ScreenCaptureThread();

            screen_capture_thread.OnFrameReady += (sender, frame_bytes) => {
                logger.Information("Captured " + frame_bytes.Length + " bytes.");

                if (previous_frame_bytes != null)
                {
                    // If it's NOT the first frame, then send the differences between frames.
                    Bitmap image_diff = ScreenInterpolator.GetDeltaImage(
                        ScreenCaptureWPFRenderer.Render(previous_frame_bytes).ToBitmap(),
                        ScreenCaptureWPFRenderer.Render(frame_bytes).ToBitmap(),
                        Color.Purple
                        );
                    previous_frame_bytes = frame_bytes;
                    frame_bytes          = image_diff.ToByteArray(); // Instead of sending frame - send differences.
                }
                else
                {
                    // If it's the first frame, just send it.
                    previous_frame_bytes = frame_bytes;
                }

                // Send frame/differences to clients.
                _server.SendBytesBroadcast(frame_bytes);
            };
            screen_capture_thread.StartCapture();

            await Task.FromResult <object>(null);
        }
Ejemplo n.º 2
0
        public void ReadServerResponse()
        {
            logger.Information("Capture started.");
            _client.OnServerMessage((frame_bytes) => {
                logger.Information("Received from server " + frame_bytes.Length + " bytes. Rendering...");

                BitmapImage server_image_data = ScreenCaptureWPFRenderer.Render(frame_bytes);
                if (previous_image != null)
                {
                    Bitmap image_reconstructed = ScreenInterpolator.AddDeltaImage(
                        previous_image.ToBitmap(),
                        server_image_data.ToBitmap(),
                        Color.Purple
                        );
                    server_image_data = image_reconstructed.ToBitmapImage();
                }
                previous_image = server_image_data;
                OnServerMessage?.Invoke(server_image_data);
            });
        }