//process packets that have a tick stamp private void ProcessReceivedTickStampedPackets(Packet pktPacket) { //check if packet is ping packet if (pktPacket is PingPacket) { m_iLastTickReceived += TickStampedPacket.MaxTicksBetweenTickStampedPackets; return; } if (pktPacket is TickStampedPacket) { TickStampedPacket tspPacket = pktPacket as TickStampedPacket; //update the tick of the connection target m_iLastTickReceived += tspPacket.Offset; //set the tick of the packet tspPacket.m_iTick = m_iLastTickReceived; return; } if (pktPacket is ResetTickCountPacket) { m_iLastTickReceived = 0; return; } }
private void ProcessSendingTickStampedPackets(Packet pktPacket) { //reset the tick for game start events if (pktPacket is ResetTickCountPacket) { //reset connection tick m_iLastPacketTickQueuedToSend = 0; } if (pktPacket is PingPacket) { m_iLastPacketTickQueuedToSend += TickStampedPacket.MaxTicksBetweenTickStampedPackets; } //set the offset for tick stamped packets if (pktPacket is TickStampedPacket) { TickStampedPacket tspPacket = pktPacket as TickStampedPacket; //check if the target tick between this packet and the next is too big while (tspPacket.m_iTick - m_iLastPacketTickQueuedToSend > TickStampedPacket.MaxTicksBetweenTickStampedPackets) { //queue a ping packet QueuePacketToSend(new PingPacket()); //shift the tick forward m_iLastPacketTickQueuedToSend += TickStampedPacket.MaxTicksBetweenTickStampedPackets; } //set the packets offset from the previouse packet tspPacket.SetOffset(m_iLastPacketTickQueuedToSend); //update the current tick m_iLastPacketTickQueuedToSend = tspPacket.m_iTick; return; } }