SignalR: Hub OnConnected não chamado se nenhum método do cliente
Eu estou escrevendo um jogo no SignalR. A idéia é que você se conecte com o seu laptop, que será usado como "display" e, em seguida, você se conecta com o seu smartphone e que será usado como "joystick". Toda a configuração funciona muito bem.
Agora que tudo funciona, decidi refatorar o código. Percebi que a relação entre o joystick e a tela é de um jeito (a tela nunca precisa enviar informações de volta ao joystick). Por isso, decidi que não precisava de nenhum sinalR funções do cliente invocáveis no joystick (por exemplo, não há uso paragameHub.client.joyStickMethod()
no joystick js.
Foi então que descobri algo estranho
Acontece que o método hubpublic override Task OnConnected()
que eu sobrescrevo para lidar com os diferentes tipos de clientes (displays e joysticks) não é invocado a menos que eu defina ummyHub.client.clientSideMethod()
. Aqui está o exemplo que estou lidando:
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
Você vê esse método do lado do cliente vazio? Essa é a razão pela qualOnConnected
é chamado no lado do servidor. Se eu remover essa linha de código, ela não será chamada.
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
Isso não funcionará, já que não há nenhum método do lado do cliente no Hub. Eu provavelmente posso adicionar umRegistrateJoystick
método no Hub e chamar isso, mas acho que o comportamento é inesperado. Minha pergunta é, portanto:
Existe uma maneira de "conectar" manualmente ao hub, para que oOnConnect
método será chamado?