/// <summary>
        /// Serializes the given server update (entity snapshot and client-specific data) and immediately sends a packet, only writing data that has changed from a previous snapshot..
        /// </summary>
        public static void Send(INetworkConnection clientNetworkConnection, EntitySnapshot previousEntitySnapshot, EntitySnapshot latestEntitySnapshot, int latestClientTickReceived, int clientCommandingEntityID)
        {
            OutgoingMessage outgoingMessage = clientNetworkConnection.GetOutgoingMessageToSend();

            ServerUpdateSerializer.Serialize(outgoingMessage, previousEntitySnapshot, latestEntitySnapshot, latestClientTickReceived, clientCommandingEntityID);
            clientNetworkConnection.SendMessage(outgoingMessage);
        }
        /// <summary>
        /// Serializes the given client update (client commands) and immediately sends a packet.
        /// </summary>
        public static void Send(INetworkConnection serverNetworkConnection, Queue <ClientCommand <TCommandData> > clientCommands, int latestServerTickReceived, int latestFrameTickAcknowledgedByServer)
        {
            OutgoingMessage outgoingMessage = serverNetworkConnection.GetOutgoingMessageToSend();

            ClientUpdateSerializer <TCommandData> .Serialize(outgoingMessage, clientCommands, latestServerTickReceived, latestFrameTickAcknowledgedByServer);

            serverNetworkConnection.SendMessage(outgoingMessage);
        }