private void questDataReturned(SignedResponse <QuestStateCollection> data) { if (clubPenguinClient.GameServer.CurrentRoom() == null) { PendingQuestUpdateEvent item = default(PendingQuestUpdateEvent); item.eventType = EventType.SYNC_WITH_GAME_SERVER; item.syncData = data; requests.Enqueue(item); processingRequest = false; return; } clubPenguinClient.GameServer.QuestSetQuestState(data); QuestStateCollection questStateCollection = new QuestStateCollection(); questStateCollection.AddRange(data.Data); QuestStateCollection questStateCollection2 = new QuestStateCollection(); foreach (PendingQuestUpdateEvent request in requests) { PendingQuestUpdateEvent current = request; switch (current.eventType) { case EventType.STATUS_UPDATE: for (int i = 0; i < questStateCollection.Count; i++) { if (questStateCollection[i].questId == current.questId) { questStateCollection[i].status = current.status; if (current.status == QuestStatus.COMPLETED) { questStateCollection2.Add(questStateCollection[i]); } } } break; case EventType.PROGRESS_UPDATE: for (int i = 0; i < questStateCollection.Count; i++) { if (questStateCollection[i].status == QuestStatus.ACTIVE) { if (questStateCollection[i].completedObjectives == null) { questStateCollection[i].completedObjectives = new QuestObjectives(); } questStateCollection[i].completedObjectives.Add(current.objective); break; } } break; } } for (int i = 0; i < questStateCollection2.Count; i++) { questStateCollection.Remove(questStateCollection2[i]); } Service.Get <EventDispatcher>().DispatchEvent(new QuestServiceEvents.QuestStatesRecieved(questStateCollection)); }
public void CompleteObjective(string objective) { PendingQuestUpdateEvent item = default(PendingQuestUpdateEvent); item.eventType = EventType.PROGRESS_UPDATE; item.objective = objective; requests.Enqueue(item); processRequest(); }
public void SetStatus(string questId, QuestStatus status) { PendingQuestUpdateEvent item = default(PendingQuestUpdateEvent); item.eventType = EventType.STATUS_UPDATE; item.status = status; item.questId = questId; requests.Enqueue(item); processRequest(); }
private IEnumerator processRequestTimeOut(PendingQuestUpdateEvent lastRequest) { yield return(new WaitForSeconds(35f)); if (processingRequest) { Log.LogErrorFormatted(this, "QuestService process request timeout \neventType: {0} \nstatus: {1} \nquestId: {2} \nobjective: {3}", lastRequest.eventType, lastRequest.status, lastRequest.questId, lastRequest.objective); processingRequest = false; processRequest(); } }
private void processRequest() { if (!processingRequest && requests.Count > 0 && clubPenguinClient.GameServer.CurrentRoom() != null) { CoroutineRunner.StopAllForOwner(this); PendingQuestUpdateEvent lastRequest = requests.Dequeue(); processingRequest = true; switch (lastRequest.eventType) { case EventType.STATUS_UPDATE: setStatus(lastRequest.questId, lastRequest.status); break; case EventType.PROGRESS_UPDATE: completeObjective(lastRequest.objective); break; case EventType.SYNC_WITH_GAME_SERVER: questDataReturned(lastRequest.syncData); break; } CoroutineRunner.Start(processRequestTimeOut(lastRequest), this, "ProcessRequestTimeout"); } }