private void ProcessGamertag(GamervineDataContext DataContext, Gamertag Gamertag) { XDocument xdLatestData = null; IDataConnector dataConnector = DataConnectorFactory.GetDataConnectorForType(Gamertag.Type); int count = 0; do { count++; xdLatestData = dataConnector.GetLatestTagData(Gamertag); } while (xdLatestData == null && count < 5); if (xdLatestData == null) { Debug.WriteLine("Unable to retrieve data from gamertag \"" + Gamertag.Tag + "\"."); return; } IHandler dataHandler = HandlerFactory.GetHandlerForType(Gamertag.Type); dataHandler.ProcessData(DataContext, Gamertag, xdLatestData); try { DataContext.SubmitChanges(); } catch (Exception ex) { Debug.WriteLine("Exception occurred in DataService.DoWork:" + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace); } }
public static Gamertag Insert(string UserID, int TypeID, Hashtable Data) { GamervineDataContext dContext = new GamervineDataContext(); Gamertag gamertag = new Gamertag(); gamertag.TagId = Guid.NewGuid().ToString(); gamertag.Tag = Utility.ToString(((Hashtable)Data["Data"])["Tag"]); gamertag.Type = TypeID; gamertag.State = State.Active.GetHashCode(); gamertag.UserId = UserID; dContext.Gamertags.InsertOnSubmit(gamertag); //Setup the data job to start collecting data on this user Job dataJob = new Job(); dataJob.JobId = Guid.NewGuid().ToString(); dataJob.Type = JobTypes.Data.GetHashCode(); dataJob.TagId = gamertag.TagId; dataJob.FrequencyUnits = 1; dataJob.Frequency = JobFrequency.Day.GetHashCode(); dataJob.NextRunTime = null; dataJob.LastRunTime = null; dataJob.PostFormat = string.Empty; dContext.Jobs.InsertOnSubmit(dataJob); dContext.SubmitChanges(); return gamertag; }
public void ProcessGamertag(GamervineDataContext DataContext, Gamertag Gamertag) { IHandler dataHandler = HandlerFactory.GetHandlerForType(Gamertag.Type); dataHandler.ProcessSummary(DataContext, Gamertag); try { DataContext.SubmitChanges(); } catch (Exception ex) { Debug.WriteLine("Exception occurred in DataService.DoWork:" + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace); } }
public XDocument GetLatestTagData(Gamertag Gamertag) { XDocument xmlDoc = null; try { WebRequest wRequest = HttpWebRequest.Create("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=" + Gamertag.Tag); WebResponse wResponse = wRequest.GetResponse(); StreamReader sr = new StreamReader(wResponse.GetResponseStream()); string result = sr.ReadToEnd(); xmlDoc = XDocument.Parse(result); } catch (Exception ex) { Debug.WriteLine("Exception occurred in XboxEndPoint.GetLatestTagData:" + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace); } return xmlDoc; }
partial void DeleteGamertag(Gamertag instance);
partial void UpdateGamertag(Gamertag instance);
partial void InsertGamertag(Gamertag instance);
private void detach_Gamertags(Gamertag entity) { this.SendPropertyChanging(); entity.User = null; }
private void attach_Gamertags(Gamertag entity) { this.SendPropertyChanging(); entity.User = this; }
public static object PostUserGameConnectionData(string ID, DataConnectionType TypeID, Hashtable Data) { try { GamervineDataContext dContext = new GamervineDataContext(); var gvUser = from usc in dContext.UserSocialConnections where usc.ConnectionUserId == ID && usc.Type == TypeID.GetHashCode() select usc; if (gvUser.Count() > 0) { var dGamertag = from gt in dContext.Gamertags where gt.Type == TypeID.GetHashCode() && gt.UserId == gvUser.First().UserId select gt; bool isStatusJobEnabled = false; bool isSummaryJobEnabled = false; bool isFacebookEnabled = false; //bool isTagInsert = false; if (Utility.ToInt(((Hashtable)((Hashtable)((Hashtable)Data["Data"])["Jobs"])["Status"])["Enabled"]) == 1) isStatusJobEnabled = true; if (Utility.ToInt(((Hashtable)((Hashtable)((Hashtable)Data["Data"])["Jobs"])["Summary"])["Enabled"]) == 1) isSummaryJobEnabled = true; if (Utility.ToInt(((Hashtable)((Hashtable)((Hashtable)Data["Data"])["GamertagSocialConnections"])["Facebook"])["Enabled"]) == 1) isFacebookEnabled = true; Gamertag gamertag = new Gamertag(); if (dGamertag.Count() == 0) { //isTagInsert = true; gamertag = Insert(gvUser.First().UserId, TypeID.GetHashCode(), Data); } else { gamertag = dGamertag.First(); gamertag.Tag = Utility.ToString(((Hashtable)Data["Data"])["Tag"]); var statusPost = from j in dContext.Jobs where j.TagId == gamertag.TagId && j.Type == JobTypes.Status.GetHashCode() select j; var summaryPost = from j in dContext.Jobs where j.TagId == gamertag.TagId && j.Type == JobTypes.Summary.GetHashCode() select j; var fbConnection = from gtsc in dContext.GamertagSocialConnections where gtsc.TagId == gamertag.TagId && gtsc.UserSocialConnectionId == gvUser.First().UserSocialConnectionId select gtsc; if (isStatusJobEnabled) { Hashtable statusData = (Hashtable)((Hashtable)((Hashtable)Data["Data"])["Jobs"])["Status"]; Job statusJob = new Job(); //We have an existing status job and the enabled flag is true - persist settings if (statusPost.Count() > 0) statusJob = statusPost.First(); else { statusJob.JobId = Guid.NewGuid().ToString(); statusJob.LastRunTime = null; statusJob.TagId = gamertag.TagId; statusJob.PostFormat = string.Empty; statusJob.Type = JobTypes.Status.GetHashCode(); dContext.Jobs.InsertOnSubmit(statusJob); } statusJob.Frequency = Utility.ToInt(statusData["Frequency"]); statusJob.FrequencyUnits = Utility.ToInt(statusData["FrequencyUnits"]); statusJob.NextRunTime = statusJob.CalculateNextRunTime(); } else { //The enabled flag is false and if we have an existing status job - delete the job if (statusPost.Count() > 0) dContext.Jobs.DeleteOnSubmit(statusPost.First()); } if (isSummaryJobEnabled) { Hashtable summaryData = (Hashtable)((Hashtable)((Hashtable)Data["Data"])["Jobs"])["Summary"]; Job summaryJob = new Job(); //We have an existing summary job and the enabled flag is true - persist settings if (summaryPost.Count() > 0) summaryJob = summaryPost.First(); else { summaryJob.JobId = Guid.NewGuid().ToString(); summaryJob.LastRunTime = null; summaryJob.TagId = gamertag.TagId; summaryJob.PostFormat = string.Empty; summaryJob.Type = JobTypes.Summary.GetHashCode(); dContext.Jobs.InsertOnSubmit(summaryJob); } summaryJob.Frequency = Utility.ToInt(summaryData["Frequency"]); summaryJob.FrequencyUnits = Utility.ToInt(summaryData["FrequencyUnits"]); summaryJob.NextRunTime = summaryJob.CalculateNextRunTime(); } else { //The enabled flag is false and if we have an existing summary job - delete the job if (summaryPost.Count() > 0) dContext.Jobs.DeleteOnSubmit(summaryPost.First()); } if (isFacebookEnabled) { Hashtable fbData = (Hashtable)((Hashtable)((Hashtable)Data["Data"])["GamertagSocialConnections"])["Facebook"]; GamertagSocialConnection fbSocialConn = new GamertagSocialConnection(); //We have an existing summary job and the enabled flag is true - persist settings if (fbConnection.Count() > 0) fbSocialConn = fbConnection.First(); else { fbSocialConn.TagId = gamertag.TagId; fbSocialConn.UserSocialConnectionId = gvUser.First().UserSocialConnectionId; dContext.GamertagSocialConnections.InsertOnSubmit(fbSocialConn); } } else { //The enabled flag is false and if we have an existing facebook connection - delete the connection if (fbConnection.Count() > 0) dContext.GamertagSocialConnections.DeleteOnSubmit(fbConnection.First()); } } dContext.SubmitChanges(); return string.Empty; } else return new { Error = "Social connection ID \"" + ID + "\" does not exist." }; } catch (Exception ex) { return new { Error = ex.ToString() }; } }
public void ProcessData(GamervineDataContext DataContext, Gamertag Gamertag, XDocument CurrentData) { var latestData = from xd in DataContext.XboxData where xd.TagId == Gamertag.TagId orderby xd.RetrieveDate descending select xd; //If we have a set of most recent data & the most recent data doesn't equal the data just retrieved, store it //Or, if the RecentGames element doesn't have any children, their authorization isn't set correctly and move on //TODO: Need to flag the account and notify the user that we are unable to retrieve their data if ((latestData.Count() != 0 && latestData.First().XmlData.Equals(CurrentData.ToString())) || CurrentData.Descendants("RecentGames").Descendants().Count() == 0) return; XboxData dcXboxInfo = new XboxData(); dcXboxInfo.XboxDataId = Guid.NewGuid().ToString(); dcXboxInfo.TagId = Gamertag.TagId; dcXboxInfo.XmlData = CurrentData.ToString(); dcXboxInfo.RetrieveDate = DateTime.UtcNow; var xboxInfos = from xi in CurrentData.Descendants("XboxInfo") select new bcXboxInfo { AccountStatus = xi.Element("AccountStatus").Value, State = xi.Element("State").Value, Gamertag = xi.Element("Gamertag").Value, ProfileUrl = new Uri(xi.Element("ProfileUrl").Value), TileUrl = new Uri(xi.Element("TileUrl").Value), Country = xi.Element("Country").Value, Reputation = decimal.Parse(xi.Element("Reputation").Value), Bio = xi.Element("Bio").Value, Location = xi.Element("Location").Value, ReputationImageUrl = new Uri(xi.Element("ReputationImageUrl").Value), GamerScore = int.Parse(xi.Element("GamerScore").Value), Zone = xi.Element("Zone").Value, }; var presenceInfos = from p in CurrentData.Descendants("PresenceInfo") select new bcPresenceInfo { Valid = bool.Parse(p.Element("Valid").Value), Info = p.Element("Info").Value.Trim(' '), Info2 = p.Element("Info2").Value.Trim(' '), LastSeen = p.Element("LastSeen").Value.Trim(' '), Online = bool.Parse(p.Element("Online").Value), StatusText = p.Element("StatusText").Value.Trim(' '), Title = p.Element("Title").Value.Trim(' ') }; bcXboxInfo xInfo = xboxInfos.First<bcXboxInfo>(); xInfo.PresenceInfo = presenceInfos.First<bcPresenceInfo>(); if (latestData.Count() != 0) { //If the most recent data was offline and the current data is offline, move on - unless gamerscore changed if (latestData.First().Online.HasValue && latestData.First().Online == 0 && !xInfo.PresenceInfo.Online && latestData.First().Gamerscore == xInfo.GamerScore) return; //If the most recent data was away and the current data is away, move on - unless gamerscore changed if (latestData.First().StatusText.ToLower().Equals("away") && !xInfo.PresenceInfo.StatusText.ToLower().Equals("away") && latestData.First().Gamerscore == xInfo.GamerScore) return; } dcXboxInfo.AccountStatus = xInfo.AccountStatus; dcXboxInfo.Bio = xInfo.Bio; dcXboxInfo.Country = xInfo.Country; dcXboxInfo.Gamerscore = xInfo.GamerScore; dcXboxInfo.Gamertag = xInfo.Gamertag; dcXboxInfo.Info = xInfo.PresenceInfo.Info; dcXboxInfo.Info2 = xInfo.PresenceInfo.Info2; if(DateTime.Parse(xInfo.PresenceInfo.LastSeen) != DateTime.MinValue) dcXboxInfo.LastSeen = DateTime.Parse(xInfo.PresenceInfo.LastSeen); dcXboxInfo.Location = xInfo.Location; dcXboxInfo.Online = (xInfo.PresenceInfo.Online ? bcPresenceInfo.Status.Online.GetHashCode() : bcPresenceInfo.Status.Offline.GetHashCode()); dcXboxInfo.ProfileUrl = xInfo.ProfileUrl.ToString(); dcXboxInfo.Reputation = xInfo.Reputation; dcXboxInfo.ReputationImageUrl = xInfo.ReputationImageUrl.ToString(); dcXboxInfo.StatusText = xInfo.PresenceInfo.StatusText; dcXboxInfo.TileUrl = xInfo.TileUrl.ToString(); dcXboxInfo.Title = xInfo.PresenceInfo.Title; dcXboxInfo.Valid = (xInfo.PresenceInfo.Valid ? 1 : 0); dcXboxInfo.Zone = xInfo.Zone; //xboxInfo.First<XboxInfo>().PresenceInfo = presence.First<PresenceInfo>(); //var recentGames = from xugi in xmlDoc.Descendants("XboxUserGameInfo") // select new XboxUserGameInfo // { // Game = new Game // { // Name = xugi.Element("Game").Element("Name").Value, // TotalAchievements = int.Parse(xugi.Element("Game").Element("TotalAchievements").Value), // TotalGamerScore = int.Parse(xugi.Element("Game").Element("TotalGamerScore").Value), // Image32Url = new Uri(xugi.Element("Game").Element("Image32Url").Value), // Image64Url = new Uri(xugi.Element("Game").Element("Image64Url").Value) // }, // LastPlayed = xugi.Element("LastPlayed").Value, // Achievements = int.Parse(xugi.Element("Achievements").Value), // GamerScore = int.Parse(xugi.Element("GamerScore").Value), // DetailsUrl = new Uri(xugi.Element("DetailsURL").Value) // }; //XboxInfo xInfo = xboxInfo.First<XboxInfo>(); //PresenceInfo pInfo = presence.First<PresenceInfo>(); //List<XboxUserGameInfo> rGames = recentGames.ToList<XboxUserGameInfo>(); //xInfo.PresenceInfo = pInfo; //xInfo.RecentGames = rGames; DataContext.XboxData.InsertOnSubmit(dcXboxInfo); }
public void ProcessSummary(GamervineDataContext DataContext, Gamertag Gamertag) { var summaryData = from s in DataContext.SummaryData where s.TagId == Gamertag.TagId select s; SummaryData sData = null; XDocument xdXmlData = null; bool isNew = false; if (summaryData.Count() == 0) { isNew = true; sData = new SummaryData(); sData.TagId = Gamertag.TagId; sData.LastProcessedDate = DateTime.Parse("01/01/1753"); xdXmlData = GetSummaryXml(); sData.XmlData = xdXmlData.ToString(); } else { sData = summaryData.First(); xdXmlData = XDocument.Parse(sData.XmlData); } var dataToProcess = from xd in DataContext.XboxData where xd.TagId == Gamertag.TagId && xd.RetrieveDate > sData.LastProcessedDate orderby xd.RetrieveDate ascending select xd; if (dataToProcess.Count() == 0) return; //This handles the first row of data - everything else is then based off of it's successor int? lastGamerscore = int.Parse(xdXmlData.Descendants("Gamerscore").First().Value); int? achievementPoints = int.Parse(xdXmlData.Descendants("AchievementPoints").First().Value); if (lastGamerscore == 0) lastGamerscore = dataToProcess.First().Gamerscore; DateTime lastProcessedDate = DateTime.MinValue; foreach (XboxData currXboxData in dataToProcess) { if (currXboxData.Gamerscore != lastGamerscore) { achievementPoints += currXboxData.Gamerscore - lastGamerscore; lastGamerscore = currXboxData.Gamerscore; } lastProcessedDate = currXboxData.RetrieveDate; } XDocument lastXboxData_XmlData = XDocument.Parse(dataToProcess.AsEnumerable().Last().XmlData); var lastGames = from xugi in lastXboxData_XmlData.Descendants("XboxUserGameInfo") select new bcGame { Name = xugi.Element("Game").Element("Name").Value, TotalAchievements = int.Parse(xugi.Element("Game").Element("TotalAchievements").Value), TotalGamerScore = int.Parse(xugi.Element("Game").Element("TotalGamerScore").Value), Image32Url = new Uri(xugi.Element("Game").Element("Image32Url").Value), Image64Url = new Uri(xugi.Element("Game").Element("Image64Url").Value) }; sData.LastProcessedDate = lastProcessedDate; xdXmlData.Descendants("Gamerscore").First().SetValue(lastGamerscore); xdXmlData.Descendants("AchievementPoints").First().SetValue(achievementPoints); StringBuilder sbGames = new StringBuilder(); int maxVal = (lastGames.Count() >= 5 ? 5 : lastGames.Count()); for (int i = 0; i < maxVal; i++) sbGames.Append(lastGames.AsEnumerable().ElementAt(i).Name + ","); xdXmlData.Descendants("Games").First().SetValue(sbGames.ToString().TrimEnd(new char[]{ ',' })); sData.XmlData = xdXmlData.ToString(); if(isNew) DataContext.SummaryData.InsertOnSubmit(sData); }