public static async Task CreateNeutralAsync(GameServiceClient client) { var neutral = new Neutral(); neutral.Name = ConsoleUtility.GetUserInput("Neutral Name: "); neutral.GamePackageId = await GamePackageUtility.SelectGamePackageId(client); if (!ConsoleUtility.ShouldContinue($"Creating Neutral: '{neutral.Name}', in gamePackage '{neutral.GamePackageId}'")) { await CreateNeutralAsync(client); return; } var createRequest = new CreateNeutralsRequest(); createRequest.Neutrals.Add(neutral); var createReply = await client.CreateNeutralsAsync(createRequest); if (createReply.Status.Code != 200) { ConsoleUtility.WriteLine($"Failed to create neutral: {createReply.Status.Message}"); } else { ConsoleUtility.WriteLine($"Neutral '{createReply.Neutrals.First().Name}' was created with Id '{createReply.Neutrals.First().Id}'"); } }
private static async ValueTask <IReadOnlyList <Neutral> > CreateNeutrals(GameServiceClient client, IReadOnlyList <GamePackage> packages) { ConsoleUtility.WriteLine("Creating neutrals"); List <Neutral> result = (await NeutralUtility.GetNeutralsAsync(client, null)).ToList(); if (result.Any()) { return(result); } foreach (var file in Directory.EnumerateFiles(@"C:\Users\Ryan\SkyDrive\code\LegendaryGameStarter\LegendaryGameModel2\GameSets", s_fileMask)) { var doc = XDocument.Load(file); var name = doc.Element("Set").Attribute("Name").Value; var activeGamePackage = packages.FirstOrDefault(x => x.Name == name); if (activeGamePackage == null) { ConsoleUtility.WriteLine($"Failed to find matching game package for {file}"); } foreach (var neutralElement in doc.Element("Set").Element("Cards").Elements("Card").Where(x => x?.Attribute("Area").Value == "Neutral")) { var request = new CreateNeutralsRequest(); request.CreateOptions.Add(CreateOptions.ErrorOnDuplicates); var neutral = new Neutral(); neutral.Name = neutralElement.Attribute("Name").Value; neutral.GamePackageId = activeGamePackage.Id; request.Neutrals.Add(neutral); var reply = await client.CreateNeutralsAsync(request); if (reply.Status.Code != 200) { ConsoleUtility.WriteLine($"Failed to create '{neutral.Name}': {reply.Status.Message}"); } result.AddRange(reply.Neutrals); } } return(result); }
public static async Task <CreateNeutralsReply> CreateNeutralsAsync(CreateNeutralsRequest request, ServerCallContext context) { using var db = new LegendaryDatabase(); var connector = DbConnector.Create(db.Connection, new DbConnectorSettings { AutoOpen = true, LazyOpen = true }); var reply = new CreateNeutralsReply { Status = new Status { Code = 200 } }; List <int> newNeutralIds = new List <int>(); foreach (var neutral in request.Neutrals) { // Validate the GamePackageId var packageRequest = new GetGamePackagesRequest(); packageRequest.GamePackageIds.Add(neutral.GamePackageId); packageRequest.Fields.Add(GamePackageField.Id); var packageReply = await GamePackageUtility.GetGamePackagesAsync(packageRequest, context); if (packageReply.Status.Code != 200) { reply.Status = packageReply.Status; return(reply); } // Verify that this neutral doesn't already exist var neutralRequest = new GetNeutralsRequest(); neutralRequest.Name = neutral.Name; neutralRequest.Fields.AddRange(new[] { NeutralField.NeutralId, NeutralField.NeutralName, NeutralField.NeutralGamePackageId }); neutralRequest.NameMatchStyle = NameMatchStyle.MixedCase; var neutralReply = await GetNeutralsAsync(neutralRequest, context); if (neutralReply.Status.Code == 200 && neutralReply.Neutrals.Any(x => x.GamePackageId == neutral.GamePackageId)) { var matchingNeutral = neutralReply.Neutrals.First(); reply.Status = new Status { Code = 400, Message = $"Neutral {matchingNeutral.Id} with name '{matchingNeutral.Name}' was found in game package '{matchingNeutral.GamePackageId}'" }; return(reply); } // Create the neutral var newNeutralId = ((int)(await connector.Command($@" insert into {DatabaseDefinition.DefaultTableName} ({DatabaseDefinition.ColumnName[NeutralField.NeutralName]}) values (@NeutralName); select last_insert_id();" , ("NeutralName", neutral.Name)) .QuerySingleAsync <ulong>())); // Add to game package await connector.Command( $@" insert into {TableNames.GamePackageNeutrals} ({DatabaseDefinition.ColumnName[NeutralField.NeutralId]}, {GamePackageUtility.DatabaseDefinition.ColumnName[GamePackageField.Id]}) values (@NeutralId, @GamePackageId);" , ("NeutralId", newNeutralId), ("GamePackageId", neutral.GamePackageId)) .ExecuteAsync(); newNeutralIds.Add(newNeutralId); } // Get all of the created neutrals var finalRequest = new GetNeutralsRequest(); finalRequest.NeutralIds.AddRange(newNeutralIds); var finalReply = await GetNeutralsAsync(finalRequest, context); reply.Status = finalReply.Status; reply.Neutrals.AddRange(finalReply.Neutrals); return(reply); }
public override async Task <CreateNeutralsReply> CreateNeutrals(CreateNeutralsRequest request, ServerCallContext context) { return(await NeutralUtility.CreateNeutralsAsync(request, context)); }