Example #1
0
 public RobotClient(RfbProtocol rfp)
 {
     for (int i = 0; i < 4; i++)
         for (int j = 0; j < 4; j++)
             this.rects[(i * 4 + j)] = new Rectangle();
     rp = rfp;
 }
Example #2
0
        /// <summary>
        /// Creates an instance of the EncodedRectangleFactory using the connected RfbProtocol object and associated Framebuffer object.
        /// </summary>
        /// <param name="rfb">An RfbProtocol object that will be passed to any created EncodedRectangle objects.  Must be non-null, already initialized, and connected.</param>
        /// <param name="framebuffer">A Framebuffer object which will be used by any created EncodedRectangle objects in order to decode and draw rectangles locally.</param>
        public EncodedRectangleFactory(RfbProtocol rfb, Framebuffer framebuffer)
        {
            System.Diagnostics.Debug.Assert(rfb != null, "RfbProtocol object must be non-null");
            System.Diagnostics.Debug.Assert(framebuffer != null, "Framebuffer object must be non-null");

            this.rfb = rfb;
            this.framebuffer = framebuffer;
        }
Example #3
0
        /// <summary>
        /// Creates an object type derived from EncodedRectangle, based on the value of encoding.
        /// </summary>
        /// <param name="rectangle">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 EncodedRectangle Build(Rectangle rectangle, RfbProtocol.Encoding encoding)
        {
            EncodedRectangle e = null;
            int[] pixels = null;
            //Bitmap bmp = PixelGrabber.CreateScreenCapture(rectangle);
            if (framebuffer.ProcessFrameRaw != null) {
                    pixels = framebuffer.ProcessFrameRaw();
            } else {
                    Bitmap bmp = new Bitmap(rectangle.Width, rectangle.Height);
                    Graphics g = Graphics.FromImage(bmp);
                    if (framebuffer.ProcessFrame != null) {
                        framebuffer.ProcessFrame(bmp);
                    } else {
                        g.CopyFromScreen(rectangle.X, rectangle.Y, 0, 0, new Size(rectangle.Width, rectangle.Height));
                    }
                    pixels = PixelGrabber.GrabPixels(bmp, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height, bmp.PixelFormat);
            }

            switch (encoding)
            {
                case RfbProtocol.Encoding.RAW_ENCODING:
                    e = new RawRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                case RfbProtocol.Encoding.COPYRECT_ENCODING:
                    e = new CopyRectRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                case RfbProtocol.Encoding.RRE_ENCODING:
                    e = new RreRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                case RfbProtocol.Encoding.CORRE_ENCODING:
                    e = new CoRreRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                case RfbProtocol.Encoding.HEXTILE_ENCODING:
                    e = new HextileRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                case RfbProtocol.Encoding.ZRLE_ENCODING:
                    e = new ZrleRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                case RfbProtocol.Encoding.ZLIB_ENCODING:
                    e = new ZlibRectangle(rfb, framebuffer, pixels, rectangle);
                    break;
                default:
                    // Sanity check
                    throw new VncProtocolException("Unsupported Encoding Format received: " + encoding.ToString() + ".");
            }
            return e;
        }
Example #4
0
 /// <summary>
 /// Writes the type of message being sent to the client--all messages are prefixed with a message type.
 /// </summary>
 private void WriteServerMessageType(RfbProtocol.ServerMessages message)
 {
     try { writer.Write(Convert.ToByte(message)); }
     catch (IOException ex)
     {
         Console.WriteLine(ex.Message);
         this.Close();
         return;
     }
 }
Example #5
0
        public EncodedRectangle Build(Bitmap bmp,int x, int y, RfbProtocol.Encoding encoding)
        {
            EncodedRectangle e = null;
            int[] pixels = PixelGrabber.GrabPixels(bmp, 0, 0, bmp.Width, bmp.Height, bmp.PixelFormat);
            Rectangle rect = new Rectangle(x, y, bmp.Width, bmp.Height);

            switch (encoding)
            {
                case RfbProtocol.Encoding.RAW_ENCODING:
                    e = new RawRectangle(rfb, framebuffer, pixels, rect);
                    break;
                case RfbProtocol.Encoding.COPYRECT_ENCODING:
                    e = new CopyRectRectangle(rfb, framebuffer, pixels, rect);
                    break;
                case RfbProtocol.Encoding.RRE_ENCODING:
                    e = new RreRectangle(rfb, framebuffer, pixels, rect);
                    break;
                case RfbProtocol.Encoding.CORRE_ENCODING:
                    e = new CoRreRectangle(rfb, framebuffer, pixels, rect);
                    break;
                case RfbProtocol.Encoding.HEXTILE_ENCODING:
                    e = new HextileRectangle(rfb, framebuffer, pixels, rect);
                    break;
                case RfbProtocol.Encoding.ZRLE_ENCODING:
                    e = new ZrleRectangle(rfb, framebuffer, pixels, rect);
                    break;
                case RfbProtocol.Encoding.ZLIB_ENCODING:
                    e = new ZlibRectangle(rfb, framebuffer, pixels, rect);
                    break;
                default:
                    // Sanity check
                    throw new VncProtocolException("Unsupported Encoding Format received: " + encoding.ToString() + ".");
            }
            return e;
        }
Example #6
0
        public void Start()
        {
            if (String.IsNullOrEmpty(Name))
                throw new ArgumentNullException("Name", "The VNC Server Name cannot be empty.");
            if (Port == 0)
                throw new ArgumentNullException("Port", "The VNC Server port cannot be zero.");
            //            Console.WriteLine("Started VNC Server at port: " + Port);

            host = new RfbProtocol(Port, Name);

            host.WriteProtocolVersion();
            //            Console.WriteLine("Wrote Protocol Version");

            host.ReadProtocolVersion();
            //        Console.WriteLine("Read Protocol Version");

              //      Console.WriteLine("Awaiting Authentication");
            if (!host.WriteAuthentication(Password))
            {
            //                Console.WriteLine("Authentication failed !");
                host.Close();
                Start();
            }
            else
            {
            //    Console.WriteLine("Authentication successfull !");

                bool share = host.ReadClientInit();
              //              Console.WriteLine("Share: " + share.ToString());

            //            Console.WriteLine("Server name: " + fb.DesktopName);
                host.WriteServerInit(this.fb);

                while ((host.isRunning))
                {
                    switch (host.ReadServerMessageType())
                    {
                        case RfbProtocol.ClientMessages.SET_PIXEL_FORMAT:
                            //Console.WriteLine("Read SetPixelFormat");
                            Framebuffer f = host.ReadSetPixelFormat(fb.Width, fb.Height);
                          //  if (f != null)
                          //      fb = f;
                            break;
                        case RfbProtocol.ClientMessages.READ_COLOR_MAP_ENTRIES:
                            //Console.WriteLine("Read ReadColorMapEntry");
                            host.ReadColorMapEntry();
                            break;
                        case RfbProtocol.ClientMessages.SET_ENCODINGS:
                           // Console.WriteLine("Read SetEncodings");
                            host.ReadSetEncodings();
                            break;
                        case RfbProtocol.ClientMessages.FRAMEBUFFER_UPDATE_REQUEST:
            //                            Console.WriteLine("Read FrameBufferUpdateRequest");
                            host.ReadFrameBufferUpdateRequest(fb);
                            break;
                        case RfbProtocol.ClientMessages.KEY_EVENT:
                            //Console.WriteLine("Read KeyEvent");
                            host.ReadKeyEvent(fb);
                            break;
                        case RfbProtocol.ClientMessages.POINTER_EVENT:
                            //Console.WriteLine("Read PointerEvent");
                            host.ReadPointerEvent(fb);
                            break;
                        case RfbProtocol.ClientMessages.CLIENT_CUT_TEXT:
                           // Console.WriteLine("Read CutText");
                            host.ReadClientCutText();
                            break;
                    }
                }
                if (!host.isRunning)
                    Start();
            }
        }