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