-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
MainPage.xaml.cs
94 lines (83 loc) · 2.71 KB
/
MainPage.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using Microsoft.AspNet.SignalR.Client.Silverlight.Sample.ViewModels;
namespace Microsoft.AspNet.SignalR.Client.Silverlight.Sample
{
public partial class MainPage : UserControl
{
// Constructor
public MainPage()
{
InitializeComponent();
// Set the data context of the listbox control to the sample data
DataContext = App.ViewModel;
var connection = new Connection("http://localhost:40476/raw-connection");
connection.Received += data =>
{
Dispatcher.BeginInvoke(() =>
{
App.ViewModel.Items.Add(data);
});
};
connection.Error += ex =>
{
Dispatcher.BeginInvoke(() =>
{
connection.Trace(TraceLevels.Events, ex.ToString());
var aggEx = (AggregateException)ex;
App.ViewModel.Items.Add(aggEx.InnerExceptions[0].Message);
});
};
connection.Reconnected += () =>
{
Dispatcher.BeginInvoke(() =>
{
App.ViewModel.Items.Add("Connection restored");
});
};
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
connection.TraceWriter = new ActionBasedWriter(val =>
{
Dispatcher.BeginInvoke(() =>
{
App.ViewModel.Items.Add(val);
});
});
connection.Start().ContinueWith(task =>
{
if (task.IsFaulted)
{
var ex = task.Exception.InnerExceptions[0];
App.ViewModel.Items.Add(ex.Message);
}
else
{
App.ViewModel.Items.Add("Connected with transport " + connection.Transport.Name);
}
},
CancellationToken.None,
TaskContinuationOptions.None,
scheduler);
}
private class ActionBasedWriter : TextWriter
{
private readonly Action<string> _log;
public ActionBasedWriter(Action<string> log)
{
_log = log;
}
public override void WriteLine(string value)
{
_log(value);
}
public override System.Text.Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
}
}