using BOTWM.Server.DTO; namespace BOTWM.Server.ServerClasses { public class Quests { public Mutex QMutex = new Mutex(); public bool isQuestSync; public List ServerQuests; public List> Queue = new List>(); public Quests(int playerLimit, bool questSync) { ServerQuests = new List(); for (int i = 0; i < playerLimit; i++) Queue.Add(new List()); UpdateServiceStatus(questSync); } public void UpdateServiceStatus(bool newStatus) { isQuestSync = newStatus; } public void Update(QuestsDTO userData) { if (!isQuestSync) { ClearQuests(); return; } QMutex.WaitOne(100); ProcessQuests(userData); QMutex.ReleaseMutex(); } public void ProcessQuests(QuestsDTO userData) { foreach(string Quest in userData.Completed) { if (!ServerQuests.Contains(Quest)) { ServerQuests.Add(Quest); for (int i = 0; i < Queue.Count; i++) Queue[i].Add(Quest); } } } public void ProcessQuests(List Quests) { foreach (string Quest in Quests) { if (!ServerQuests.Contains(Quest)) { ServerQuests.Add(Quest); for(int i = 0; i < Queue.Count; i++) Queue[i].Add(Quest); } } } public void ClearQuests() { QMutex.WaitOne(100); ServerQuests.Clear(); for (int i = 0; i < Queue.Count; i++) { Queue[i].Clear(); } QMutex.ReleaseMutex(); } public void FillQueue(int playerNumber) { QMutex.WaitOne(100); Queue[playerNumber].Clear(); foreach(string Quest in ServerQuests) Queue[playerNumber].Add(Quest); QMutex.ReleaseMutex(); } public List GetQuests(int playerNumber) { QMutex.WaitOne(100); List QuestData = new List(Queue[playerNumber]); Queue[playerNumber].Clear(); QMutex.ReleaseMutex(); return QuestData; } public List GetPlayerQuests(int playerNumber) { List PlayerQuests = new List(); QMutex.WaitOne(100); for(int i = 0; i < 100; i++) { if (Queue[playerNumber].Count == 0) break; PlayerQuests.Add(Queue[playerNumber][0]); Queue[playerNumber].RemoveAt(0); } QMutex.ReleaseMutex(); return PlayerQuests; } } }