// unwait one groupID public static void UnwaitGroupId(string groupId) { if (!WaitingTransmissions.ContainsKey(groupId)) { return; } var waitingList = WaitingTransmissions[groupId]; for (int i = 0; i < waitingList.Count; i++) { if (waitingList[i].RepeatPairIsCompleted) { waitingList[i].ConcludeFunc(); WaitingTransmissions[groupId].Remove(waitingList[i--]); continue; } if (waitingList[i].PerStepFuncComplete()) { waitingList[i].RepeatPairIsCompleted = true; } } if (!WaitingTransmissions.ContainsKey(groupId)) { return; } if (WaitingTransmissions[groupId].Count == 0) { WaitingTransmissions.Remove(groupId); } }
// conclude a sequence public static void ConcludeSequence(string groupId) { if (!WaitingTransmissions.ContainsKey(groupId)) { return; } for (int i = 0; i < WaitingTransmissions[groupId].Count; i++) { WaitingTransmissions[groupId][i].ConcludeFunc(); } WaitingTransmissions.Remove(groupId); }
public override IEnumerator ReceivePayload(VisualPayload payload) { var groupId = GroupId.GetFirstValue(payload.Data); if (!WaitingTransmissions.ContainsKey(groupId)) { WaitingTransmissions[groupId] = new List <SequencedRepeatPair>(); } WaitingTransmissions[groupId].Add(ProduceTransmissionFunc(payload)); var iterator = BeginSequenceState.Transmit(payload); while (iterator.MoveNext()) { yield return(null); } //start sequence UnwaitGroupId(groupId); }
public override void Unload() { WaitingTransmissions.Clear(); base.Unload(); }