private SyncingPeerData _UpdateSyncingPeer(SyncingPeerData peerData, long first, long firstPeerHas) { // TODO: This should not be able to happen peerData.nextCommandToSend = Math.Min(peerData.nextCommandToSend, first); peerData.firstCommandPeerHas = Math.Max(peerData.firstCommandPeerHas, firstPeerHas); return(peerData); }
public void AddSyncingPeer(string peerId, long firstNeededCmd, long firstStashedCmd) { SyncingPeerData peer = !syncingPeers.ContainsKey(peerId) ? new SyncingPeerData(peerId, firstNeededCmd, firstStashedCmd) : _UpdateSyncingPeer(syncingPeers[peerId], firstNeededCmd, firstStashedCmd); syncingPeers[peerId] = peer; }
private int _SendCmdsToOnePeer(SyncingPeerData sPeer, Dictionary <long, ApianCommand> commandStash, int maxToSend) // true means "keep going" { int cmdsSent = 0; for (int i = 0; i < maxToSend; i++) { long cmdNum = sPeer.nextCommandToSend; if (commandStash.ContainsKey(cmdNum)) { ApianCommand cmd = commandStash[cmdNum]; ApianInst.GameNet.SendApianMessage(sPeer.peerId, cmd); cmdsSent++; sPeer.nextCommandToSend++; if (sPeer.nextCommandToSend == sPeer.firstCommandPeerHas) { break; } } else { break; // should have access to logger to warn } } return(cmdsSent); }