Microsoft.AspNet.SignalR.Client for Portable Class Library

第二弾。

タイトルの通り、SignalRの.NETクライアントライブラリのPortableバージョンです。
NuGetで公開しているので、すぐに使えます。「Microsoft.AspNet.SignalR.Client.Portable」で探してください。
(CodePlex: Microsoft.AspNet.SignalR.Client for Portable Class Library

例によってVS2012でビルドしました。Xbox360は外れますが、Windows Phone 7.5はOKです。現在オフィシャルで配布しているNuGetのClientライブラリはWindows Phone 7.5が駄目なので、そっち方面の人にどうぞ。
インターフェイスに変更はありません。

こんなコードをクライアントに書いて(例はWP7.5):

// Page class (XAML code behind)
public partial class MainPage : PhoneApplicationPage
{
	private HubConnection client_;
	private IHubProxy sampleHub_;

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

	// Page loaded
	private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
	{
		if (client_ == null)
		{
			client_ = new HubConnection("http://localhost:27224/");
			sampleHub_ = client_.CreateHubProxy("SampleHub");

			sampleHub_.On(
				"Receive",
				new Action<string>(
					x => this.Dispatcher.BeginInvoke(
						new Action(() => listBox.Items.Add(x.ToString())))));

			client_.Start();
		}
	}

	// Button clicked
	private void sendButton_Click(object sender, System.Windows.RoutedEventArgs e)
	{
		var r = new Random();
		var message = string.Format("Random={0}", r.Next());
		sampleHub_.Invoke("Send", message);
	}
}

サーバー側に:

// OWIN Startup entry point definition
[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    // OWIN Startup Code
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // SignalR mapping
            app.MapSignalR();
        }
    }

    // The hub
    public class SampleHub : Hub
    {
        // Hub method
        public void Send(string text)
        {
            // Callback all client's "Receive" method.
            this.Clients.All.Receive(text);
        }
    }
}

Page_Loadedで初期化すべきかどうかはちょっと甘いです(WPアプリの開発経験が浅いので)。正しいと思う方法で実装して下さい。

投稿者:

kekyo

A strawberry red slime mold. Likes metaprogramming. MA. Bicycle rider. http://amzn.to/1SeuUwD