我正在 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
调用该方法?