"""Remote Framebuffer Protocol."""

from pypacker import pypacker

# Remote Framebuffer Protocol
# http://www.realvnc.com/docs/rfbproto.pdf
# TODO: RFP uses dynamic ports 5900+..auto-decoding for this?

# Client to Server Messages
CLIENT_SET_PIXEL_FORMAT			= 0
CLIENT_SET_ENCODINGS			= 2
CLIENT_FRAMEBUFFER_UPDATE_REQUEST	= 3
CLIENT_KEY_EVENT			= 4
CLIENT_POINTER_EVENT			= 5
CLIENT_CUT_TEXT				= 6

# Server to Client Messages
SERVER_FRAMEBUFFER_UPDATE		= 0
SERVER_SET_COLOUR_MAP_ENTRIES		= 1
SERVER_BELL				= 2
SERVER_CUT_TEXT				= 3


class RFB(pypacker.Packet):
	__hdr__ = (
		("type", "B", 0),
	)


class SetPixelFormat(pypacker.Packet):
	__hdr__ = (
		("pad", "3s", ""),
		("pixel_fmt", "16s", "")
	)


class SetEncodings(pypacker.Packet):
	__hdr__ = (
		("pad", "1s", ""),
		("num_encodings", "H", 0)
	)


class FramebufferUpdateRequest(pypacker.Packet):
	__hdr__ = (
		("incremental", "B", 0),
		("x_position", "H", 0),
		("y_position", "H", 0),
		("width", "H", 0),
		("height", "H", 0)
	)


class KeyEvent(pypacker.Packet):
	__hdr__ = (
		("down_flag", "B", 0),
		("pad", "2s", ""),
		("key", "I", 0)
	)


class PointerEvent(pypacker.Packet):
	__hdr__ = (
		("button_mask", "B", 0),
		("x_position", "H", 0),
		("y_position", "H", 0)
	)


class FramebufferUpdate(pypacker.Packet):
	__hdr__ = (
		("pad", "1s", ""),
		("num_rects", "H", 0)
	)


class SetColourMapEntries(pypacker.Packet):
	__hdr__ = (
		("pad", "1s", ""),
		("first_colour", "H", 0),
		("num_colours", "H", 0)
	)


class CutText(pypacker.Packet):
	__hdr__ = (
		("pad", "3s", ""),
		("length", "I", 0)
	)
