private void SendScreenResponse(byte[] compr, int len, LdpRectangle.Builder r)
 {
     screenResponse = null;
     responsePacket = null;
     screenResponse = packetFactory.SetScreenResponse(compr, len, r);
     responsePacket = packetFactory.BuildPacket(screenResponse);
     serverHandler.GetSenderChannel.Send(responsePacket);
 }
Beispiel #2
0
        public LdpScreenResponse SetScreenResponse(byte[] compressed,
                                                   int baseLenght, LdpRectangle.Builder rect)
        {
            var        response = LdpScreenResponse.CreateBuilder();
            ByteString bytes    = ByteString.CopyFrom(compressed);

            response.CompressedScreen = bytes;
            response.BaseLenght       = baseLenght;
            response.SetRect(rect);
            return(response.Build());
        }
        private void GetScreen()
        {
            lock (LOCK)
            {
                try
                {
                    Rectangle bounds = Rectangle.Empty;
                    interruptGrabbing = false;

                    while (!interruptGrabbing)
                    {
                        nextScreen = screenGrabber.GetScreenShot();
                        if (nextScreen == null)
                        {
                            break;
                        }
                        bounds = LdpScreenProcessingUtils.GetBoundingBoxForChanges(nextScreen, prevScreen);

                        if (bounds != Rectangle.Empty)
                        {
                            interruptGrabbing = true;
                            CheckRectangleBounds(ref bounds);
                            difference = LdpScreenProcessingUtils.CopyRegion(nextScreen, bounds);

                            origData   = LdpScreenProcessingUtils.ImageToByteArray(difference);
                            baseLenght = origData.Length;
                            compressed = LZ4Codec.Encode(origData, 0, baseLenght);

                            rect        = LdpRectangle.CreateBuilder();
                            rect.Left   = bounds.Left;
                            rect.Top    = bounds.Top;
                            rect.Right  = bounds.Right;
                            rect.Bottom = bounds.Bottom;

                            SendScreenResponse(compressed, baseLenght, rect);

                            difference.Dispose();
                            difference = null;
                            rect       = null;
                            origData   = null;
                            compressed = null;
                        }
                        prevScreen = nextScreen;
                    }
                }
                catch (Exception ex)
                {
                    LdpLog.Error("GetScreen thrown:\n" + ex.Message);
                }
            }
        }
        private void GetScreen()
        {
            lock (LOCK)
            {
                try
                {
                    Rectangle bounds = Rectangle.Empty;
                    interruptGrabbing = false;

                    while (!interruptGrabbing)
                    {

                        nextScreen = screenGrabber.GetScreenShot();
                        if (nextScreen == null) break;
                        bounds = LdpScreenProcessingUtils.GetBoundingBoxForChanges(nextScreen, prevScreen);

                        if (bounds != Rectangle.Empty)
                        {
                            interruptGrabbing = true;
                            CheckRectangleBounds(ref bounds);
                            difference = LdpScreenProcessingUtils.CopyRegion(nextScreen, bounds);

                            origData = LdpScreenProcessingUtils.ImageToByteArray(difference);
                            baseLenght = origData.Length;
                            compressed = LZ4Codec.Encode(origData, 0, baseLenght);

                            rect = LdpRectangle.CreateBuilder();
                            rect.Left = bounds.Left;
                            rect.Top = bounds.Top;
                            rect.Right = bounds.Right;
                            rect.Bottom = bounds.Bottom;

                            SendScreenResponse(compressed, baseLenght, rect);

                            difference.Dispose();
                            difference = null;
                            rect = null;
                            origData = null;
                            compressed = null;
                        }
                        prevScreen = nextScreen;
                    }
                }
                catch (Exception ex)
                {
                    LdpLog.Error("GetScreen thrown:\n" + ex.Message);
                }
            }
        }