Exemple #1
0
        private BaseDecoder GetDecoder(RfbEncodingType enc)
        {
            switch (enc)
            {
            case RfbEncodingType.Raw:
                return(RawDecoder);

            case RfbEncodingType.CopyRect:
                return(CopyRectDecoder);

            case RfbEncodingType.Zlib:
                return(ZlibDecoder);

            case RfbEncodingType.ZRLE:
                return(ZrleDecoder);

            default:
                throw new NotImplementedException();
            }
        }
        public EncodedRectangle(RfbProtocol rfb, Framebuffer framebuffer, Rectangle rectangle, RfbEncodingType encoding)
        {
            this.rfb       = rfb ?? throw new ArgumentNullException(nameof(rfb));
            Framebuffer    = framebuffer ?? throw new ArgumentNullException(nameof(framebuffer));
            this.rectangle = rectangle;
            EncodingType   = encoding;

            //Select appropriate reader
            var reader = encoding == RfbEncodingType.ZRLE ? rfb.ZrleReader : rfb.Reader;

            // Create the appropriate PixelReader depending on screen size and encoding
            switch (framebuffer.BitsPerPixel)
            {
            case 32:
                if (encoding == RfbEncodingType.ZRLE)
                {
                    preader = new CPixelReader(reader, framebuffer);
                }
                else
                {
                    preader = new PixelReader32(reader, framebuffer);
                }
                break;

            case 16:
                preader = new PixelReader16(reader, framebuffer);
                break;

            case 8:
                preader = new PixelReader8(reader, framebuffer, rfb);
                break;

            default:
                throw new ArgumentOutOfRangeException("BitsPerPixel", framebuffer.BitsPerPixel, "Valid VNC Pixel Widths are 8, 16 or 32 bits.");
            }
        }
        /// <summary>
        /// Creates an object type derived from EncodedRectangle, based on the value of encoding.
        /// </summary>
        /// <param name="r">A Rectangle object defining the bounds of the rectangle to be created</param>
        /// <param name="encoding">An Integer indicating the encoding type to be used for this rectangle.  Used to determine the type of EncodedRectangle to create.</param>
        /// <returns></returns>
        public static EncodedRectangle Build(RfbProtocol rfb, Framebuffer framebuffer, Rectangle r, RfbEncodingType encoding)
        {
            switch (encoding)
            {
            case RfbEncodingType.Raw:
                return(new RawRectangle(rfb, framebuffer, r));

            case RfbEncodingType.CopyRect:
                return(new CopyRectRectangle(rfb, framebuffer, r));

            case RfbEncodingType.RRE:
                return(new RreRectangle(rfb, framebuffer, r));

            case RfbEncodingType.CoRRE:
                return(new CoRreRectangle(rfb, framebuffer, r));

            case RfbEncodingType.Hextile:
                return(new HextileRectangle(rfb, framebuffer, r));

            case RfbEncodingType.ZRLE:
                return(new ZrleRectangle(rfb, framebuffer, r));

            default:
                throw new InvalidOperationException($"Unsupported encoding: {encoding}.");
            }
        }
Exemple #4
0
 public RfbRectangle(Rectangle r, RfbEncodingType e)
 {
     Rectangle    = r;
     EncodingType = e;
 }