Ejemplo n.º 1
0
        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}'");
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 public override async Task <CreateNeutralsReply> CreateNeutrals(CreateNeutralsRequest request, ServerCallContext context)
 {
     return(await NeutralUtility.CreateNeutralsAsync(request, context));
 }