public IEnumerable <DataContainers.PlayerDetails> GetPlayers(uint teamId)
        {
            string url = new StringBuilder("file=players&version=2.0&teamID=")
                         .Append(teamId).ToString();

            XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Dynamic));

            XElement elTeam = doc.Root.AssertElement("Team");

            Team compTeam = MatchParserHelper.GetTeam(elTeam, string.Empty);

            if (teamId != compTeam.ID)
            {
                throw new Exception("received wrong team info");
            }

            IList <PlayerDetails> players = new List <PlayerDetails>();

            foreach (XElement el in elTeam.AssertElement("PlayerList").Elements("Player"))
            {
                int    id        = int.Parse(el.AssertElement("PlayerID").Value);
                string givenName = el.AssertElement("FirstName").Value;
                string nickName  = el.AssertElement("NickName").Value;
                string surName   = el.AssertElement("LastName").Value;

                players.Add(new PlayerDetails(id, givenName, nickName, surName));
                //yield return new PlayerDetails(id, givenName, nickName, surName); // this was very slow, why?
            }

            return(players);
        }
        public TeamDetails GetTeamDetails(uint teamId)
        {
            string url = new StringBuilder("file=teamdetails&version=2.6&teamID=")
                         .Append(teamId).ToString();

            XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Dynamic));

            XElement elUser = doc.Root.AssertElement("User");

            int      userId       = int.Parse(elUser.AssertElement("UserID").Value);
            string   userName     = elUser.AssertElement("Loginname").Value;
            DateTime userJoinDate = DateTime.Parse(elUser.AssertElement("ActivationDate").Value); // not <SignupDate> here

            User user = new User(userId, userName)
            {
                JoinDate = userJoinDate
            };

            Team team = MatchParserHelper.GetTeam(doc.Root.AssertElement("Team"), string.Empty);

            return(new TeamDetails(team.ID, team.Name)
            {
                Owner = user
            });
        }
        public TransferHistory GetTransfers(uint teamId)
        {
            Team            team      = null;
            DateTime        from      = DateTime.MaxValue;
            DateTime        to        = DateTime.MinValue;
            List <Transfer> transfers = new List <Transfer>();

            uint numberOfPages = 0;
            uint curPage       = 1;

            do
            {
                string url = new StringBuilder("file=transfersteam&version=1.2")
                             .Append("&teamID=").Append(teamId)
                             .Append("&pageIndex=")
                             .Append(curPage).ToString();

                XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Dynamic));

                team = MatchParserHelper.GetTeam(doc.Root.AssertElement("Team"), string.Empty);

                XElement elTransfers = doc.Root.AssertElement("Transfers");
                numberOfPages = uint.Parse(elTransfers.AssertElement("Pages").Value);
                DateTime startDate = DateTime.Parse(elTransfers.AssertElement("StartDate").Value);
                DateTime endDate   = DateTime.Parse(elTransfers.AssertElement("EndDate").Value);
                if (startDate < from && startDate != DateTime.MinValue)
                {
                    from = startDate;
                }
                // ORIGINAL IMPLEMENTATION OF NEXT LINE:
                //if (endDate > to && endDate != DateTime.MaxValue) to = endDate;
                // REASON FOR CHANGE:
                // DateTime.MaxValue contains additional nanosecond ticks, so it does not equal DateTime(9999,12,31,23,59,59)
                // For simplicity, we deduct one day from this max value and assert that the returned value is smaller than this
                if (endDate > to && endDate < DateTime.MaxValue.AddDays(-1))
                {
                    to = endDate;
                }

                foreach (XElement elTransfer in elTransfers.Elements("Transfer"))
                {
                    int      id     = int.Parse(elTransfer.AssertElement("TransferID").Value);
                    DateTime date   = DateTime.Parse(elTransfer.AssertElement("Deadline").Value);
                    Player   player = MatchParserHelper.GetPlayer(elTransfer.AssertElement("Player"));
                    Team     buyer  = MatchParserHelper.GetTeam(elTransfer.AssertElement("Buyer"), "Buyer");
                    Team     seller = MatchParserHelper.GetTeam(elTransfer.AssertElement("Seller"), "Seller");
                    Money    price  = new Money(double.Parse(elTransfer.AssertElement("Price").Value), Currency.SEK);

                    transfers.Add(new Transfer(id, date, player, buyer, seller, price));
                }
            } while (curPage++ < numberOfPages);

            return(new TransferHistory(team, from, to)
            {
                Transfers = transfers
            });
        }
        public MatchArchive GetMatches(uint teamId, DateTime startDate, DateTime endDate)
        {
            List <Match> matches       = new List <Match>();
            DateTime     curMonthStart = startDate;
            Team         team          = null;

            // 15 minute grid
            endDate = endDate.AddSeconds(-endDate.Second);
            endDate = endDate.AddMinutes(-(endDate.Minute % 15));

            while (curMonthStart < endDate)
            {
                DateTime curMonthEnd = new DateTime(curMonthStart.Year, curMonthStart.Month, 1).AddMonths(1).AddSeconds(-1);
                if (curMonthEnd > endDate)
                {
                    curMonthEnd = endDate;
                }

                string url = new StringBuilder("file=matchesarchive&version=1.1")
                             .Append("&teamID=").Append(teamId)
                             .Append("&FirstMatchDate=").Append(curMonthStart.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture))
                             .Append("&LastMatchDate=").Append(curMonthEnd.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)).ToString();

                XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Static));

                XElement elTeam = doc.Root.AssertElement("Team");

                Team compTeam = MatchParserHelper.GetTeam(elTeam, string.Empty);
                if (teamId != compTeam.ID)
                {
                    throw new Exception("received wrong team info");
                }
                team = compTeam;
                // assert dates

                foreach (XElement el in doc.Descendants("Match"))
                {
                    matches.Add(MatchParserHelper.GetMatch(el));
                }

                curMonthStart = curMonthEnd.AddSeconds(1);
            }

            // TODO: team may be null here (if endDate < startDate)
            MatchArchive ar = new MatchArchive(team, startDate, endDate);

            ar.Matches = matches;

            return(ar);
        }
Beispiel #5
0
        private Lineup GetLineup(int matchId, int teamId)
        {
            string url = new StringBuilder("file=matchlineup&version=1.6&matchID=").Append(matchId)
                         .Append("&teamID=").Append(teamId).ToString();

            XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Static));

            XElement elTeam = doc.Root.AssertElement("Team");

            Team compTeam = MatchParserHelper.GetTeam(elTeam, string.Empty);

            if (teamId != compTeam.ID)
            {
                throw new Exception("received wrong team info");
            }

            XElement elLineup = elTeam.AssertElement("Lineup");

            Lineup lineup = new Lineup();

            foreach (XElement elPlayer in elLineup.Elements("Player"))
            {
                Lineup.LineupRole role;
                XElement          elRoleId = elPlayer.Element("RoleID");
                if (elRoleId == null || string.IsNullOrEmpty(elRoleId.Value))
                {
                    role = Lineup.LineupRole.ReplacedPlayerN;
                }
                else
                {
                    role = (Lineup.LineupRole) int.Parse(elPlayer.AssertElement("RoleID").Value);
                }

                double?  stars         = null;
                XElement elRatingStars = elPlayer.Element("RatingStars");
                if (elRatingStars != null && !string.IsNullOrEmpty(elRatingStars.Value))
                {
                    stars = double.Parse(elRatingStars.Value, CultureInfo.InvariantCulture);
                }

                Player player = MatchParserHelper.GetPlayer(elPlayer);
                lineup.LineupItems.Add(new Lineup.LineupItem()
                {
                    Player = player, Role = role, RatingStars = stars
                });
            }

            return(lineup);
        }