SignalR: Hub OnConnected не вызывается, если нет методов клиента
Я пишу игру в SignalR. Идея заключается в том, что вы подключаетесь к ноутбуку, который будет использоваться какдисплей» а затем вы подключитесь к вашему смартфону, и это будет использоваться какджойстик", Вся установка работает очень хорошо.
Теперь, когда все это работает, я решил провести рефакторинг кода. Я понял, что связь между джойстиком и дисплеем односторонняя (дисплей не должен отправлять информацию обратно на джойстик). Поэтому я решил, что мне не нужны никакие вызываемые клиентские функции signalR на джойстике (например, дляgameHub.client.joyStickMethod()
в джойстике
Именно тогда я обнаружил что-то странное
Оказывается, что метод хаба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
метод будет вызван?