public static void PurchaseReceived(ClientStructure client, ShareProgressPartPurchaseMsgData data) { LunaLog.Debug($"Part purchased: {data.PartName} Tech: {data.TechId}"); //send the part purchase to all other clients MessageQueuer.RelayMessage <ShareProgressSrvMsg>(client, data); ScenarioDataUpdater.WritePartPurchaseDataToFile(data); }
/// <summary> /// We received a part purchase message so update the scenario file accordingly /// </summary> public static void WritePartPurchaseDataToFile(ShareProgressPartPurchaseMsgData partPurchaseMsg) { Task.Run(() => { lock (Semaphore.GetOrAdd("ResearchAndDevelopment", new object())) { if (!ScenarioStoreSystem.CurrentScenariosInXmlFormat.TryGetValue("ResearchAndDevelopment", out var xmlData)) { return; } var updatedText = UpdateScenarioWithPartPurchaseData(xmlData, partPurchaseMsg.TechId, partPurchaseMsg.PartName); ScenarioStoreSystem.CurrentScenariosInXmlFormat.TryUpdate("ResearchAndDevelopment", updatedText, xmlData); } }); }
/// <summary> /// We received a part purchase message so update the scenario file accordingly /// </summary> public static void WritePartPurchaseDataToFile(ShareProgressPartPurchaseMsgData partPurchaseMsg) { Task.Run(() => { lock (Semaphore.GetOrAdd("ResearchAndDevelopment", new object())) { if (!ScenarioStoreSystem.CurrentScenarios.TryGetValue("ResearchAndDevelopment", out var scenario)) { return; } var techNodes = scenario.GetNodes("Tech").Select(v => v.Value); var specificTechNode = techNodes.FirstOrDefault(n => n.GetValue("id").Value == partPurchaseMsg.TechId); if (specificTechNode != null) { specificTechNode.CreateValue(new CfgNodeValue <string, string>("part", partPurchaseMsg.PartName)); } } }); }