C#でSignalRを使用した通信を行いたい その3(接続検知) | プログラミングがわからなすぎる

プログラミングがわからなすぎる

気が向いた時の備忘録。プログラミングは好きなのに物凄く単純なものしか理解できないからメモしていくうちに覚えられたらいいな
ターゲットフレームワークは大体4.7.2

SignalRでサーバとクライアントが接続できるようにはなったけど

本当に接続されているのか不安なので、クライアントが接続してきたら

サーバ側で検知できるようにしてみる

 

クライアント側のプロジェクト 

前回と変更箇所無し

 

サーバ側のプロジェクト 

 

ハブクラスからフォーム画面のメソッドを実行するために

フォームのインスタンスを置いておける場所が欲しかったので

FormSet.csというファイルを増やした

 

 メインの書き換え

static void Main()
{
    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; }
    }
}

 

 ServerForm.cs(メソッド追加)

/// <summary>
/// メッセージ表示
/// </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);
        }
    }
}

public override Task OnConnected()

 クライアントに接続されたときに呼ばれるメソッド

 Hubクラスにoverideで作成する

public override Task OnDisconnected(bool stopCalled)

 クライアントに切断されたときに呼ばれるメソッド

 Hubクラスにoverideで作成する

 

Hubクラスで「Context.ConnectionId」と書くと接続IDが取得できる

今回はこれをFormに書いたShowMessageに渡して、メッセージボックスに表示してみる

 

動かしてみる 

 

サーバ側の「開始」ボタンをクリックしてサーバを開始しておく

次にクライアント側の「接続」ボタンを押す

 

メッセージボックスが表示され、接続IDっぽいものが表示されてるので成功

 

今度はクライアント側の「切断」ボタンを押してみる

メッセージボックスが表示されたので成功