using System.Diagnostics;
using System.IO;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Notification;

namespace WPReceiveRAW
{
    public partial class MainPage : PhoneApplicationPage
    {
        string channelName = "WP7NotifyRAW";
        HttpNotificationChannel channel;

        // Constructor
        public MainPage()
        {
            InitializeComponent();

            channel = HttpNotificationChannel.Find(channelName);
            if(channel==null)
            {
                channel = new HttpNotificationChannel(channelName);
                //Wird die URL für den Kanal erstellt, so wird dieses Ereignis ausgeführt
                channel.ChannelUriUpdated += channel_ChannelUriUpdated;
                channel.ErrorOccurred += channel_ErrorOccurred;
                //Dieses Ereignis empfängt die RAW Notification Nachrichten
                channel.HttpNotificationReceived += channel_HttpNotificationReceived;
                channel.Open();

            }
            else
            {
                //Wird die URL für den Kanal erstellt, so wird dieses Ereignis ausgeführt
                channel.ChannelUriUpdated += channel_ChannelUriUpdated;
                channel.ErrorOccurred += channel_ErrorOccurred;
                //Dieses Ereignis empfängt die RAW Notification Nachrichten
                channel.HttpNotificationReceived += channel_HttpNotificationReceived;
            }
        }

        void channel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
        {
            //Fehlerbehandlung
        }
        void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
        {
            Debug.WriteLine(e.ChannelUri.ToString());
        }

        //Ereignisbehandlung für RAW Notifications
        void channel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)
        {
            //Da asynchron aufgerufen, muss über den Dispatcher die Eigenschaft auf dem Mainthread geändert werden
            //Ansonsten gibt es hier eine Exception
            Dispatcher.BeginInvoke(() =>
            {
                StreamReader sr = new StreamReader(e.Notification.Body);
                txtRAWData.Text = sr.ReadToEnd();
                sr.Close();
            });
        }

    }
}