} //separate this to be called on every XP change private async Task SendFinalizeResult(List <RoomUser> roomUsers, List <User> roomDataUsers, List <RoomXpReport> roomXpReports, List <UserRoomStatus> userRoomStatuses, int lastEaterTurnId) { // var xpRepMapped = roomUsers.Join(roomXpReports, rUser => rUser.TurnId, // roomXpReports.IndexOf, (_, report) => report).ToList(); var finalizeTasks = new List <Task>(); for (int i = 0; i < roomUsers.Count; i++) { var finalizeResult = new FinalizeResult { RoomXpReport = roomXpReports[i], PersonalFullUserInfo = Mapper.ConvertUserDataToClient(roomDataUsers[i]), LastEaterTurnId = lastEaterTurnId, UserRoomStatus = userRoomStatuses, }; finalizeTasks.Add(_masterHub.SendOrderedAsync(roomUsers[i].ActiveUser, "FinalizeRoom", finalizeResult)); } _logger.LogInformation("finalize called"); await Task.WhenAll(finalizeTasks); }
public FinalizeResult Finalize(FinalizeCommand command) { if (command.Period == default) { throw new Exception("Missing parameter: Period"); } if (command.Period.Day != 1) { throw new Exception("Period must be the first day of the month."); } var startedAt = DateTime.Now; using (var conn = NewConnection()) { conn.Open(); var step1 = new BillingDataProcessStep1(new Step1Config { Connection = conn, Context = "ProcessRepository.Finalize", Period = command.Period, Now = startedAt, ClientID = 0, IsTemp = false }); var step4 = new BillingDataProcessStep4Subsidy(new Step4Config { Connection = conn, Context = "ProcessRepository.Finalize", Period = command.Period, ClientID = 0 }); var writeToolDataProcessResult = new WriteToolDataProcess(WriteToolDataConfig.Create(conn, "ProcessRepository.Finalize", command.Period, 0, 0, Cost.GetToolCosts(command.Period, 0))).Start(); var writeRoomDataProcessResult = new WriteRoomDataProcess(new WriteRoomDataConfig { Connection = conn, Context = "ProcessRepository.Finalize", Period = command.Period, ClientID = 0, RoomID = 0 }).Start(); var writeStoreDataProcessResult = new WriteStoreDataProcess(new WriteStoreDataConfig { Connection = conn, Context = "ProcessRepository.Finalize", Period = command.Period, ClientID = 0, ItemID = 0 }).Start(); var populateToolBillingProcessResult = step1.PopulateToolBilling(); var populateRoomBillingProcessResult = step1.PopulateRoomBilling(); var populateStoreBillingProcessResult = step1.PopulateStoreBilling(); var populateSubsidyBillingProcessResult = step4.PopulateSubsidyBilling(); conn.Close(); var result = new FinalizeResult(startedAt) { Period = command.Period, WriteToolDataProcessResult = writeToolDataProcessResult, WriteRoomDataProcessResult = writeRoomDataProcessResult, WriteStoreDataProcessResult = writeStoreDataProcessResult, PopulateToolBillingProcessResult = populateToolBillingProcessResult, PopulateRoomBillingProcessResult = populateRoomBillingProcessResult, PopulateStoreBillingProcessResult = populateStoreBillingProcessResult, PopulateSubsidyBillingProcessResult = populateSubsidyBillingProcessResult }; return(result); } }
public void FinalizeRoom(FinalizeResult finalizeResult) { UniTask.Create(async() => { //wait for the last throw operation, this can be done better await UniTask.Delay(1200); await CoreGameplay.I.EatLast(finalizeResult.LastEaterTurnId); // FinalizeController.I. // DestroyModuleGroup(); // _finalizeFactory.Create(finalizeResult, _roomSettings); RoomUserView.Manager.I.RoomUserViews.ForEach(ruv => Object.Destroy(ruv.gameObject)); Object.FindObjectsOfType <PlayerBase>().ForEach(obj => Object.Destroy(obj.gameObject)); Object.Destroy(Object.FindObjectOfType <ChatSystem>().gameObject); Object.Destroy(PrizeView.I.gameObject); //immmm this will cause issues on the running funs like decreaseMoneyAimTime and events //change indie values instead of rewrite the whole object finalizeResult.PersonalFullUserInfo.Followers = Repository.I.PersonalFullInfo.Followers; finalizeResult.PersonalFullUserInfo.Followings = Repository.I.PersonalFullInfo.Followings; Repository.I.PersonalFullInfo = finalizeResult.PersonalFullUserInfo; Repository.I.PersonalFullInfo.DecreaseMoneyAimTimeLeft().Forget(); //todo you MUST edit each value on it's own now?, this is about replacing the whole //data object, but it seems fine FinalizeController.Construct(RoomReferences.I.Canvas, RoomSettings.I, finalizeResult) .Forget(); }); }
// public Container Container => Container.Room; // //args // [Inject] readonly FinalizeResult _finalizeResult; // [Inject] readonly RoomSettings _roomSettings; //proj // [Inject] private readonly ReferenceInstantiator<FinalizeInstaller> _referenceInstantiator; //fin // [Inject] private readonly FinalizeInstaller.References _finalizeRefs; // public static IFinalizeController I; // public FinalizeController(RoomSettings roomSettings, FinalizeResult finalizeResult) // { // } public static async UniTask Construct(Transform moduleCanvas, RoomSettings roomSettings, FinalizeResult finalizeResult) { // if (I != null) // throw new Exception($"singleton {nameof(IFinalizeController)} already exists"); var finalMuvParent = (await Addressables.InstantiateAsync("finalMuvParent", moduleCanvas)).transform; for (int i = 0; i < roomSettings.UserInfos.Count; i++) { if (i == roomSettings.MyTurn) { continue; } FinalMuv.Create(roomSettings.UserInfos[i], finalizeResult.UserRoomStatus[i], finalMuvParent).Forget(); } RoomResultPanel.Instantiate(moduleCanvas, finalizeResult.RoomXpReport, finalizeResult.PersonalFullUserInfo, finalizeResult.UserRoomStatus[roomSettings.MyTurn]).Forget(); }