我可以在我的服务器方法中设置断点,并在集线器启动时调用它。如果我在hub.start()上放置一个断点,我确实看到连接已经绑定了方法的客户端版本。但不知何故,该方法不是从服务器调用的。这是我的代码:
服务器方法
[HubName("MovementHub")]
public class MovementHub : Hub
{
public void UpdatePlayerPosServer(PlayerPosition playerPosition)
{
playerPosition.LastUpdatedBy = Context.ConnectionId;
Clients.AllExcept(playerPosition.LastUpdatedBy).updatePlayerPosClient(playerPosition); //debugging here shows the playerposition all filled out nicely. this hub method is HIT.
}
}
客户端方法
$(() => {
var connection = (<any>$.connection).MovementHub;
//this method is never called
connection.client.updatePlayerPosClient = (playerPosModel) => {
alert("updatingremotePlayers: " + playerPosModel);
}
});
Hub Start(typescript类。方法从另一个类调用)
public updateServerPos = (x: number, y: number) => {
var connection = (<any>$.connection).MovementHub;
this.LoginID = $("#displayname").val();
$.connection.hub.start().done(() => {
var playerposModel = { Id: this.LoginID, X: x, Y: y };
connection.server.updatePlayerPosServer(playerposModel); //debugging here shows me that "connection" has the client method bound at this point
}).fail(function(error) {
console.log(error);
});
}
我已经阅读了一些关于这一点的帖子,指出你必须在集线器启动之前绑定客户端方法,但确实如此。并且正确调用服务器方法。所以不确定这里有什么。
编辑:我意识到,我是一个白痴,可能成为被#34; AllExcept&#34;跳过的受害者。打电话给客户。我是个例外!洛尔
唯一剩下的问题是为什么我必须让客户端方法&#34;实例化&#34;在IFFE?我想将它放在调用服务器方法的相同Typescript类中。
答案 0 :(得分:1)
结果混合javascript IIFE调用带打字稿的调用可能是危险的。在这个客户端方法绑定之前,我有一个完全不相关的(我认为)集线器开始发生。我意识到,即便如此,我还有两个Hub,其中只有一个hub.start();傻我。