SignalRでサーバとクライアントが接続できるようにはなったけど
本当に接続されているのか不安なので、クライアントが接続してきたら
サーバ側で検知できるようにしてみる
クライアント側のプロジェクト
前回と変更箇所無し
サーバ側のプロジェクト
ハブクラスからフォーム画面のメソッドを実行するために
フォームのインスタンスを置いておける場所が欲しかったので
FormSet.csというファイルを増やした
メインの書き換え
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ServerForm form = new ServerForm();
FormSet.form = form;
Application.Run(form);
}
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ServerForm form = new ServerForm();
FormSet.form = form;
Application.Run(form);
}
Formのインスタンスを↓のひとに渡しておく
FormSet.cs
namespace SignalRServerTest
{
public static class FormSet
{
public static ServerForm form { get; set; }
}
}
{
public static class FormSet
{
public static ServerForm form { get; set; }
}
}
ServerForm.cs(メソッド追加)
/// <summary>
/// メッセージ表示
/// </summary>
/// <param name="msg"></param>
public void ShowMessage(string msg)
{
MessageBox.Show(msg);
}
/// メッセージ表示
/// </summary>
/// <param name="msg"></param>
public void ShowMessage(string msg)
{
MessageBox.Show(msg);
}
TestHub.cs
using Microsoft.AspNet.SignalR;
using System;
using System.Threading.Tasks;
namespace SignalRServerTest
{
public class TestHub : Hub
{
public override Task OnConnected()
{
FormSet.form.ShowMessage(Context.ConnectionId + "が接続しました");
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
FormSet.form.ShowMessage(Context.ConnectionId + "が切断しました");
return base.OnDisconnected(stopCalled);
}
}
}
using System;
using System.Threading.Tasks;
namespace SignalRServerTest
{
public class TestHub : Hub
{
public override Task OnConnected()
{
FormSet.form.ShowMessage(Context.ConnectionId + "が接続しました");
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
FormSet.form.ShowMessage(Context.ConnectionId + "が切断しました");
return base.OnDisconnected(stopCalled);
}
}
}
public override Task OnConnected()
クライアントに接続されたときに呼ばれるメソッド
Hubクラスにoverideで作成する
public override Task OnDisconnected(bool stopCalled)
クライアントに切断されたときに呼ばれるメソッド
Hubクラスにoverideで作成する
Hubクラスで「Context.ConnectionId」と書くと接続IDが取得できる
今回はこれをFormに書いたShowMessageに渡して、メッセージボックスに表示してみる
動かしてみる
サーバ側の「開始」ボタンをクリックしてサーバを開始しておく
次にクライアント側の「接続」ボタンを押す
メッセージボックスが表示され、接続IDっぽいものが表示されてるので成功
今度はクライアント側の「切断」ボタンを押してみる
メッセージボックスが表示されたので成功