I decided to ditch the Packet class name and go with a Form module
that contains a BaseForm which child classes inherit from.
I've created a few tests so you can see how the BaseForm class
works and how packets can be read and sent over a socket to
an X11 server
X11 Protocol expects clients to track unique identifiers in order to reduce
network traffic. This reduces network traffic because when you create a new
resource say a window the X11 server doesn't have to reply with the ID
of the newly created resource. This makes the X11 protocol extremely fast
since most requests the server doesn't need to reply to a message.
In the first packet returned from X11 they give you a
resource-id-mask and a resource-id-base. You can use these values to
generate a unique id for X11.
When we created a Packet object before using
Packet.read would return a hash. Instead, return
an OpenStruct object which makes accessing
parameters easier