我写在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
方法将被调用?