ETC

luglio 2009 Blog Posts

Silverlight 3 RTW is out today!

Uscita la versione definitiva di Silverlight 3 :
Installer
Expression Blend 3 with Sketchflow
Silverlight 3 Software Development Kit (SDK)
Silverlight 3 Tools for Visual Studio 2008 SP 1
Dovrò aspettare la fine della prossima settimana che si preannuncia infernale, e del meritato relax in Norvegia per poter fare i primi esperimenti....

Un WebService per la Xbox360

Per tutti i possessori di una Xbox360 come me, vi segnalo questo servizio gentilmente offerto da Duncan Mackenzie disponibile sia come Web Service:
http://duncanmackenzie.net/services/XboxInfo.asmx
che come Url per un approccio REST:
http://duncanmackenzie.net/services/GetXboxInfo.aspx?GamerTag={GamerTag}
Personalmente non sono riuscito a far funzionare il webservice quindi ho usato il secondo Url per costruire una semplice interfaccia per la GamerTag:

Recuperiamo i dati dal servizio in maniera asincrona sfruttando la classe WebClient:

   1:  public void RequestXmlGamerTag(string gamerTag) 
   2:  {
   3:      string url = string.Format("http://duncanmackenzie.net/services/GetXboxInfo.aspx?GamerTag={0}", gamerTag); 
   4:      WebClient webClient = new WebClient(); 
   5:      webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted); 
   6:      webClient.DownloadStringAsync(new Uri(url)); 
   7:  }

Alla fine del download, se tutto è andato a buon fine e non ci sono errori, parserizziamo la stringa ritornata e usiamo l’oggetto creato come DataContext per l’interfaccia:

   1:  void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
   2:  {
   3:      if (e.Error == null) 
   4:      {
   5:          XboxInfo info = loadGamerTag(e.Result); 
   6:          this.DataContext = info; 
   7:      }
   8:      else
   9:      {
  10:          //Visualizzo messaggio d'errore...
  11:      }
  12:  }

parserizziamo l’xml di risposta usando un pò di LINQ:

   1:  private XboxInfo loadGamerTag(string xmlGamerTag) 
   2:  {
   3:      XDocument xDoc = XDocument.Parse(xmlGamerTag); 
   4:      XboxInfo gamer = (from XboxInfo in xDoc.Descendants("XboxInfo") 
   5:      select new XboxInfo {
   6:      PresenceInfo = new PresenceInfo() 
   7:      {
   8:          Valid = (bool)XboxInfo.Element("PresenceInfo").Element("Valid"), 
   9:          LastSeen = (DateTime)XboxInfo.Element("PresenceInfo").Element("LastSeen"), 
  10:          Info = (string)XboxInfo.Element("PresenceInfo").Element("Info"), 
  11:          Info2 = (string)XboxInfo.Element("PresenceInfo").Element("Info2"), 
  12:          Online = (bool)XboxInfo.Element("PresenceInfo").Element("Online"), 
  13:          StatusText = (string)XboxInfo.Element("PresenceInfo").Element("StatusText"), 
  14:          Title = (string)XboxInfo.Element("PresenceInfo").Element("Title")},
  15:          Gamertag = (string)XboxInfo.Element("Gamertag"), 
  16:          ProfileUrl = (string)XboxInfo.Element("ProfileUrl"), 
  17:          TileUrl = (string)XboxInfo.Element("TileUrl"), 
  18:          Country = (string)XboxInfo.Element("Country"), 
  19:          Reputation = (double)XboxInfo.Element("Reputation"), 
  20:          Bio = (string)XboxInfo.Element("Bio"), 
  21:          Location = (string)XboxInfo.Element("Location"), 
  22:          ReputationImageUrl = (string)XboxInfo.Element("ReputationImageUrl"), 
  23:          GamerScore = (int)XboxInfo.Element("GamerScore"), 
  24:          Zone = (string)XboxInfo.Element("Zone"), 
  25:          
  26:          RecentGames = (
  27:          from XboxUserGameInfo in XboxInfo.Element("RecentGames").Descendants("XboxUserGameInfo") 
  28:              select new XboxUserGameInfo 
  29:              {
  30:                  Game = new XboxGameInfo() 
  31:                  {
  32:                      Name = (string)XboxUserGameInfo.Element("Game").Element("Name"), 
  33:                      Image32Url = (string)XboxUserGameInfo.Element("Game").Element("Image32Url"), 
  34:                      Image64Url = (string)XboxUserGameInfo.Element("Game").Element("Image64Url"), 
  35:                      TotalAchievements = (int)XboxUserGameInfo.Element("Game").Element("TotalAchievements"), 
  36:                      TotalGamerScore = (int)XboxUserGameInfo.Element("Game").Element("TotalGamerScore") 
  37:                  },
  38:              Achievements = (int)XboxUserGameInfo.Element("Achievements"), 
  39:              GamerScore = (int)XboxUserGameInfo.Element("GamerScore"), 
  40:              DetailsURL = (string)XboxUserGameInfo.Element("DetailsURL"), 
  41:              LastPlayed = (DateTime)XboxUserGameInfo.Element("LastPlayed") 
  42:          }).ToList<XboxUserGameInfo>() 
  43:          }).First();
  44:   
  45:      return gamer; 
  46:  }

E il gioco è fatto!!! Ora non resta che costruire un’interfaccia grafica accattivante per la nostra gamerTag!!
Ah, per chi volesse una sfida a TopSpin3 o a qualche altro gioco aggiungetemi pure, il mio gamertag è Sullivan80!