/// <summary> /// Checks for bad packets and does retransmission or throws error /// </summary> /// <param name="arg"></param> void TimerCallback(Object arg) { lock (reliableMessages) { for (int n = reliableMessages.Count - 1; n >= 0; --n) { ReliableMessage message = reliableMessages[n]; message.RetransmissionElapsed += timerDeltaTime; if (message.RetransmissionElapsed > RetransmissionTime) { message.RetransmissionElapsed = TimeSpan.Zero; ++message.RetransmissionCount; if (message.RetransmissionCount > RetransmissionTries) { reliableMessages.RemoveAt(n); OnTimeout?.Invoke(message); } else { SendRetransmitted(message.Buffer, message.Target, message.ID); } } } } }
public void bufferMessage(ReliableMessage rm, Connection connection) { int userId = connections[connection]; if (!bufferedMessages[userId].ContainsKey(rm._MessageId)) { bufferedMessages[userId].Add(rm._MessageId, rm); } }
public void processBufferedMessages(Connection connection) { int userId = connections[connection]; while (bufferedMessages[userId].ContainsKey(lastAcks[userId] + 1)) { ReliableMessage rm = bufferedMessages[userId][lastAcks[userId] + 1]; lastAcks[userId] = rm._MessageId; bufferedMessages[userId].Remove(rm._MessageId); MessageHandler.ProcessMessage((GameMessage)rm, connection); } }
public void AddQueueWithTimeout(ReliableMessage gm, float time) { MessageQueue.Add(gm); if (SentFrames.ContainsKey(gm)) { SentFrames[gm] = 0; gamemessages[gm._MessageId] = gm; } else { SentFrames.Add(gm, 0); gamemessages.Add(gm._MessageId, gm); } }
public void ReceivedACK(int ackid) { var a = 5; while (MessageQueue.Count > 0 && MessageQueue[0]._MessageId <= ackid) { ReliableMessage toRemove = MessageQueue[0]; MessageQueue.RemoveAt(0); SentFrames.Remove(gamemessages[toRemove._MessageId]); gamemessages.Remove(toRemove._MessageId); } while (NoTimeOutQueue.Count() > 0 && NoTimeOutQueue[0]._MessageId <= ackid) { Debug.Log("Removing from NoTimeoutQueue ackid " + ackid); NoTimeOutQueue.RemoveAt(0); } }
public void AddQueueWithOutTimeout(ReliableMessage gm) { NoTimeOutQueue.Add(gm); }