SignalR でゲームを書いています。アイデアは、「ディスプレイ」として使用されるラップトップに接続し、次にスマートフォンに接続して「ジョイスティック」として使用するというものです。セットアップ全体が非常にうまく機能します。
すべてが機能するようになったので、コードをリファクタリングすることにしました。ジョイスティックとディスプレイの関係は一方通行であることに気付きました (ディスプレイはジョイスティックに情報を送り返す必要はありません)。したがって、ジョイスティックで signalR 呼び出し可能なクライアント関数は必要ないと判断しました (たとえばgameHub.client.joyStickMethod()
、ジョイスティック js.
その時、私は奇妙なことを発見しました
public override Task OnConnected()
さまざまなタイプのクライアント (ディスプレイとジョイスティック) を処理するためにオーバーライドしたハブ メソッドは、 myHub.client.clientSideMethod()
. これが私が扱っている例です:
var gameHub = $.connection.gameHub;
gameHub.client.connection();
$("#joystick").joystick({
hub: gameHub
});
gameHub.client.activateJoystick = function () { };
$.connection.hub.qs = "type=joystick&gameId=" + "@Model.Id";
$.connection.hub.start(); //this will invoke on connected
空のクライアント側メソッドがわかりますか? OnConnected
これが、サーバー側で呼び出される理由です。そのコード行を削除すると、呼び出されなくなります。
var gameHub = $.connection.gameHub;
gameHub.client.connection();
$("#joystick").joystick({
hub: gameHub
});
//gameHub.client.activateJoystick = function () { };
$.connection.hub.qs = "type=joystick&gameId=" + "@Model.Id";
$.connection.hub.start(); //this will invoke on connected
ハブにはクライアント側のメソッドがないため、これは機能しません。おそらくRegistrateJoystick
ハブにメソッドを追加して呼び出すこともできますが、動作は予期しないものだと思います。したがって、私の質問は次のとおりです。
OnConnect
メソッドが呼び出されるように、手動でハブに「接続」する方法はありますか?