SignalR: Hub OnConnected wird nicht aufgerufen, wenn keine Client-Methoden vorhanden sind
Ich schreibe ein Spiel in SignalR. Die Idee ist, dass Sie sich mit Ihrem Laptop verbinden, der als "Display" und dann mit Ihrem Smartphone als "Joystick" verwendet wird. Das gesamte Setup funktioniert sehr gut.
Jetzt, da alles funktioniert, habe ich beschlossen, den Code umzugestalten. Ich erkannte, dass die Beziehung zwischen dem Joystick und dem Display nur in eine Richtung besteht (das Display muss niemals Informationen an den Joystick zurücksenden). Daher habe ich beschlossen, dass ich keine von signalR aufrufbaren Clientfunktionen auf dem Joystick benötige (z. B. gibt es keine Verwendung fürgameHub.client.joyStickMethod()
im Joystick js.
Dann entdeckte ich etwas Seltsames
Es stellt sich heraus, dass Hub-Methodepublic override Task OnConnected()
dass ich überschreibe, um mit den verschiedenen Arten von Clients (Anzeigen und Joysticks) umzugehen, wird nicht aufgerufen, es sei denn, ich definiere einmyHub.client.clientSideMethod()
. Hier ist das Beispiel, mit dem ich es zu tun habe:
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
Sehen Sie diese leere clientseitige Methode? Das ist der Grund, warumOnConnected
wird serverseitig aufgerufen. Wenn ich diese Codezeile entferne, wird sie nicht aufgerufen.
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
Dies funktioniert nicht, da auf dem Hub keine clientseitige Methode vorhanden ist. Ich kann wohl eine hinzufügenRegistrateJoystick
Methode auf dem Hub und nennen Sie das, aber ich denke, dass das Verhalten unerwartet ist. Meine Frage lautet daher:
Gibt es eine Möglichkeit, manuell eine "Verbindung" zum Hub herzustellen, so dass dieOnConnect
Methode wird aufgerufen?