Exemple #1
0
        private CharactersList GetMembers()
        {
            CharactersList result = new CharactersList();

            foreach (var guild in GuildEnum.GetValues(typeof(GuildEnum)))
            {
                var    response       = HttpStatusCode.NoContent;
                string responseString = null;
                int    counter        = 0;
                do
                {
                    response = RequestManager.SendGETRequest($"{ TibiaSiteGuildUrl }{ guild.ToString() }", out responseString);
                    counter++;
                } while (String.IsNullOrEmpty(responseString) && counter < 4);


                if (!String.IsNullOrEmpty(responseString))
                {
                    var parsedHtmlPage = PageAnalyzer.ParseHtmlPage(responseString);

                    result.Character.AddRange(PageAnalyzer.AnalyzePage(parsedHtmlPage, (GuildEnum)guild));
                }
            }

            return(result);
        }
Exemple #2
0
        private void ProcessResponse(string responseString)
        {
            var guild = JsonConvert
                        .DeserializeObject <GuildDO.RootObject>
                            (responseString);

            string    membersListAsString = BuildStringMembers(guild);
            GuildEnum guildTypeEnum       = (GuildEnum)System.Enum.Parse
                                                (typeof(GuildEnum), guild.guild.data.name);

            StoreGuildMembersInDb(membersListAsString, guildTypeEnum);
        }
Exemple #3
0
        public void Proceed()
        {
            foreach (var guild in GuildEnum.GetValues(typeof(GuildEnum)))
            {
                bool isRequestOk = RequestManager.SendGETRequest(
                    $"{ TibiaAPIGuildUrl }{ guild.ToString() }.json",
                    out var responseString) == HttpStatusCode.OK &&
                                   !String.IsNullOrEmpty(responseString);

                if (isRequestOk)
                {
                    ProcessResponse(responseString);
                }
            }
        }
Exemple #4
0
        private void StoreGuildMembersInDb(string members, GuildEnum guild)
        {
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                string sql = $"INSERT INTO [dbo].[MembersList] ([Members], [Guild], [Date]) " +
                             $"VALUES (@MembersList, @Guild, @Date)";

                using (SqlCommand cmd = new SqlCommand(sql, connection))
                {
                    connection.Open();

                    cmd.Parameters.AddWithValue("@MembersList", OleDbType.VarWChar).Value = members;
                    cmd.Parameters.AddWithValue("@Guild", OleDbType.VarWChar).Value       = (int)guild;
                    cmd.Parameters.AddWithValue("@Date", OleDbType.DBDate).Value          = DateTime.Now;

                    cmd.ExecuteNonQuery();
                }
            }
        }
Exemple #5
0
        private void StoreDeathInDatabase(RootObject death, string characterName, string deathString, string characterGuild)
        {
            string sql = $"INSERT INTO [dbo].[DeathList] ([CharacterName], [Reason], [Guild], [Killers], [Level], [Date]) VALUES" +
                         $"(@CharacterName, @Reason, @Guild, @Killers, @Level, @Date)";

            var guildEnumAsInt = (int)GuildEnum.Parse(typeof(GuildEnum), characterGuild);

            using (SqlConnection cnn = new SqlConnection(ConnectionString))
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    cnn.Open();
                    cmd.Parameters.AddWithValue("@CharacterName", OleDbType.VarWChar).Value = characterName;
                    cmd.Parameters.AddWithValue("@Reason", OleDbType.VarWChar).Value        = death.reason;
                    cmd.Parameters.AddWithValue("@Guild", OleDbType.Integer).Value          = guildEnumAsInt;
                    cmd.Parameters.AddWithValue("@Killers", OleDbType.VarWChar).Value       = deathString;
                    cmd.Parameters.AddWithValue("@Level", OleDbType.Integer).Value          = death.level;
                    cmd.Parameters.AddWithValue("@Date", OleDbType.DBDate).Value            = DateTime.Parse(death.date.date);
                    cmd.ExecuteNonQuery();
                }
        }
Exemple #6
0
        private void ProcessResponse(string responseString, string characterNameInProcess, GuildEnum playerGuild)
        {
            var deaths = JsonConvert
                         .DeserializeObject <DeathsDO.RootObject>
                             (responseString);

            foreach (var item in deaths.characters.deaths)
            {
                var death = JsonConvert
                            .DeserializeObject <RootObject>
                                (item.ToString());

                bool isOwnDeath = death.involved.Count == 1 &&
                                  death.involved[0].name == characterNameInProcess;
                bool hasAnyDeaths      = death.involved.Count() > 0;
                bool isWorthDeathLevel = death.level >= 250;

                if (isOwnDeath)
                {
                    continue;
                }

                if (hasAnyDeaths && isWorthDeathLevel)
                {
                    string deathString = BuildDeathString(death.involved);

                    bool isInDatabase = DoesDeathExistInDatabase(
                        characterNameInProcess, death.date.date);

                    if (!isInDatabase)
                    {
                        StoreDeathInDatabase(death, characterNameInProcess, deathString, playerGuild.ToString());
                    }
                }
            }
        }
Exemple #7
0
        public static List <Character> AnalyzePage(HtmlNodeCollection collection, GuildEnum guild)
        {
            List <Character> list = new List <Character>();

            for (int j = 0; j < collection.Count(); j++)
            {
                if (collection[j].ChildNodes.Count.Equals(11))
                {
                    Character character = new Character();

                    if (j == 10)
                    {
                        for (int i = 1; i < collection[j].ChildNodes.Count; i += 2)
                        {
                            if (collection[j].ChildNodes[9].InnerText == "offline")
                            {
                                continue;
                            }

                            switch (i)
                            {
                            case 1:
                                var index = collection[j].ChildNodes[i].InnerText.Replace("&#160;", " ").LastIndexOf(" (");
                                if (index > 0)
                                {
                                    character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace("&#160;", " ").Substring(0, index);
                                }
                                else
                                {
                                    character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace("&#160;", " ");
                                }
                                break;

                            case 3:
                                character.Vocation = collection[j].ChildNodes[i].InnerText;
                                break;

                            case 5:
                                character.Level = int.Parse(collection[j].ChildNodes[i].InnerText);
                                break;

                            case 9:
                                character.Status = collection[j].ChildNodes[i].InnerText;
                                break;
                            }
                        }

                        character.Guild = guild;

                        list.Add(character);
                    }
                    else
                    {
                        for (int i = 2; i < collection[j].ChildNodes.Count; i += 2)
                        {
                            if (collection[j].ChildNodes[10].InnerText == "offline")
                            {
                                continue;
                            }

                            switch (i)
                            {
                            case 2:
                                var index = collection[j].ChildNodes[i].InnerText.Replace("&#160;", " ").LastIndexOf(" (");
                                if (index > 0)
                                {
                                    character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace("&#160;", " ").Substring(0, index);
                                }
                                else
                                {
                                    character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace("&#160;", " ");
                                }
                                break;

                            case 4:
                                character.Vocation = collection[j].ChildNodes[i].InnerText;
                                break;

                            case 6:
                                character.Level = int.Parse(collection[j].ChildNodes[i].InnerText);
                                break;

                            case 10:
                                character.Status = collection[j].ChildNodes[i].InnerText;
                                break;
                            }
                        }

                        character.Guild = guild;

                        if (!String.IsNullOrEmpty(character.Status))
                        {
                            list.Add(character);
                        }
                    }
                }
            }

            return(list);
        }