adding serialization/deserialization DataPacket because sending structs over the sockets is awful, taking out the AckPacket all together, this will have some cascading changes in the receive logic I think, let's see