コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
 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);
 }
コード例 #3
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();
 }