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; }
/// <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; }
/// <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; }
/// <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; } }
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; }
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(); } }