topical media & game development

talk show tell print

#mobile-application-08-GravityWorks.DerbyApp.WP7-GravityWorks.DerbyApp.WP7-MainPage.xaml.cs / cs



  using System;
  using System.Data.Services.Client;
  using System.Text;
  using System.Linq;
  using System.Windows;
  using GravityWorks.DerbyApp.WP7.Service;
  using Microsoft.Phone.Controls;
  using Microsoft.Phone.Notification;
  using Microsoft.Phone.Shell;
  using Microsoft.Devices.Sensors;
  using System.Windows.Controls;
  
  namespace GravityWorks.DerbyApp.WP7
  {
      public partial class MainPage : PhoneApplicationPage
      {
          readonly DerbyNamesEntities context = new DerbyNamesEntities(new Uri("http://localhost:1132/DerbyNames.svc/"));
          const string channelName = "DerbyNamesChannel";
          Accelerometer acc;
  
          public MainPage()
          {
              InitializeComponent();
              LoadApplicationBar();
              //LoadTileInfo();
              EnablePushNotifications();
              //LoadAccelerometer();
  
              
  
              Loaded += MainPage_Loaded;
          }
  
          private void LoadAccelerometer()
          {
              acc = new Accelerometer();
              acc.ReadingChanged += OnAccelerometerReadingChanged;
              acc.Start();
          }
  
          delegate void SetTextBlockTextDelegate(TextBlock txtblk, string text);
          void SetTextBlockText(TextBlock txtblk, string text)
          {
              txtblk.Text = text;
          }
  
          void OnAccelerometerReadingChanged(object sender, AccelerometerReadingEventArgs
          args)
          {
              string str = String.Format("X = {0:F2}\nY = {1:F2}\nZ = {2:F2}\n\nMagnitude = {3:F2}\n\n{4}", args.X, args.Y, args.Z, Math.Sqrt(args.X * args.X + args.Y * args.Y +
  
              args.Z * args.Z),
                 args.Timestamp);
              if (txtblk.CheckAccess())
              {
                  SetTextBlockText(txtblk, str);
              }
  
              else
              {
                  txtblk.Dispatcher.BeginInvoke(new SetTextBlockTextDelegate(SetTextBlockText), txtblk, str);
              }
          }
          
          private static void LoadTileInfo()
          {
              StandardTileData data = new StandardTileData
              {
                  Title = "Derby Names Tile",
                  Count = 42,
  
                  BackTitle = "Gravity Works",
                  BackContent = "Derby Names App",
                  //BackgroundImage = new Uri("/Background.png", UriKind.RelativeOrAbsolute),
                  //BackBackgroundImage = new Uri("/Background.png", UriKind.RelativeOrAbsolute)
              };
  
              ShellTile.ActiveTiles.First().Update(data);
          }
  
          private void EnablePushNotifications()
          {
              HttpNotificationChannel pushChannel = HttpNotificationChannel.Find(channelName);
  
              if (pushChannel == null)
              {
                  pushChannel = new HttpNotificationChannel(channelName);
  
                  pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated;
                  pushChannel.ErrorOccurred += PushChannel_ErrorOccurred;
                  pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived;
                  pushChannel.HttpNotificationReceived += PushChannel_HttpNotificationReceived;
                  pushChannel.Open();
  
                  pushChannel.BindToShellToast();
                  pushChannel.BindToShellTile();
              }
              else
              {
                  pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated;
                  pushChannel.ErrorOccurred += PushChannel_ErrorOccurred;
                  pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived;
                  pushChannel.HttpNotificationReceived += PushChannel_HttpNotificationReceived;
              }
  
              System.Diagnostics.Debug.WriteLine(string.Format("{0}", pushChannel.ChannelUri));
          }
  
          void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
          {
              Dispatcher.BeginInvoke(() =>
              {
                  // Display the new URI.
                  System.Diagnostics.Debug.WriteLine(string.Format("{0}", e.ChannelUri));
                  //MessageBox.Show(String.Format("Channel Uri is {0}", e.ChannelUri));
              });
          }
  
          void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
          {
              // Error handling logic for your particular application would be here.
              Dispatcher.BeginInvoke(() => MessageBox.Show(String.Format("A push notification {0} error occurred.  {1} ({2}) {3}", e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData)));
          }
  
          //Show the Toast Content when in the the app.
          void PushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)
          {
              StringBuilder message = new StringBuilder();
              string relativeUri = string.Empty;
  
              message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString());
  
              // Parse out the information that was part of the message.
              foreach (string key in e.Collection.Keys)
              {
                  message.AppendFormat("{0}: {1}\n", key, e.Collection[key]);
  
                  if (string.Compare(
                      key,
                      "wp:Param",
                      System.Globalization.CultureInfo.InvariantCulture,
                      System.Globalization.CompareOptions.IgnoreCase) == 0)
                  {
                      relativeUri = e.Collection[key];
                  }
              }
  
              Dispatcher.BeginInvoke(() => MessageBox.Show(message.ToString()));
          }
  
          void PushChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)
          {
              string message;
  
              using (System.IO.StreamReader reader = new System.IO.StreamReader(e.Notification.Body))
              {
                  message = reader.ReadToEnd();
              }
  
              Dispatcher.BeginInvoke(() =>
                  MessageBox.Show(String.Format("Received Notification {0}:\n{1}",
                      DateTime.Now.ToShortTimeString(), message))
                      );
          }
  
          private void LoadApplicationBar()
          {
              ApplicationBar = new ApplicationBar() { Mode = ApplicationBarMode.Minimized, Opacity = 1.0, IsVisible = true, IsMenuEnabled = true };
  
              ApplicationBarIconButton button1 = new ApplicationBarIconButton() { IconUri = new Uri("/Toolkit.Content/ApplicationBar.Check.png", UriKind.Relative), Text = "button 1" };
              ApplicationBar.Buttons.Add(button1);
              button1.Click += event_Click;
  
              ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem() { Text = "menu item 1" };
              ApplicationBar.MenuItems.Add(menuItem1);
              menuItem1.Click += event_Click;
          }
  
          private void event_Click(object sender, EventArgs e)
          {
              MessageBox.Show("Alert");
              App.accelerometer.Stop();
          }
  
          private void MainPage_Loaded(object sender, RoutedEventArgs e)
          {
              LoadDerbyNames();
              LoadLeagues();
          }
  
          private void LoadDerbyNames()
          {
              var derbyNamesCollection = new DataServiceCollection<DerbyName>(context);
              DerbyNamesList.ItemsSource = derbyNamesCollection;
              derbyNamesCollection.LoadCompleted += coll_LoadCompleted;
              var DerbyNamesQuery = "/DerbyNames";
              derbyNamesCollection.LoadAsync(new Uri(DerbyNamesQuery, UriKind.Relative));
          }
  
          private void LoadLeagues()
          {
              var derbyLeagueCollection = new DataServiceCollection<League>(context);
              DerbyLeaguesList.ItemsSource = derbyLeagueCollection;
              derbyLeagueCollection.LoadCompleted += coll_LoadCompleted;
              var DerbyLeaguesQuery = "/Leagues";
              derbyLeagueCollection.LoadAsync(new Uri(DerbyLeaguesQuery, UriKind.Relative));
          }
  
          void coll_LoadCompleted(object sender, LoadCompletedEventArgs e)
          {
              if (e.Error != null)
              {
                  MessageBox.Show(e.Error.Message);
              }
          }
      }
  }
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.