私は自分のゲームにプレーヤーの位置をリアルタイムで処理するためにsignalRを実装し、それをすべての接続されたクライアントにブロードキャストしようとしています。.done以外の関数を呼び出すときにSignalRがサーバーハブメソッドを呼び出さない
しかし、私が$ .connection.hub.start()。done()の直後に呼び出さない限り、サーバーハブメソッドを呼び出すクライアント関数はサーバーに到達しません。
$.connection.hub.start().done(function() {
$.connection.playerHub.server.updatePlayerPosition(playerObj)
});
しかし、私が作成した場合:これは正しく、サーバーハブ方式のUpdatePlayerPositionを呼び出しますが、私はの.doneにこのメソッドを直接呼び出す必要はありません
...私はあなたに例を挙げましょう私のメインのgameEngineオブジェクトの変数とそれを後で呼び出す、IEは、プレーヤーが移動するたびに、何も起こりません。
$.connection.hub.start().done(function() {
gameEngine.updatePlayerPosition = function() {
$.connection.playerHub.server.updatePlayerPosition(playerObj)
//playerObj is a global variable
}
});
if (player.isMoving) {
gameEngine.updatePlayerPosition();
}
gameEngine.updatePlayerPositionを呼び出すには、()正しい関数を押すと、signalr.jsのすべてを通過するが、サーバー上のブレークポイントがヒットしないん。ここで
はsignalRのusing Microsoft.AspNet.SignalR;
using RPGGameCS.Models.Player;
namespace RPGGameCS
{
public class PlayerHub : Hub
{
public void UpdatePlayerPosition(IPlayer player)
{
Clients.All.updatePlayerPosition(player);
}
}
}
すべての例私がしました(私は最初に行くの通信を取得したい、私はまだハブのプレーヤーを更新するための機能が追加されていない)ハブコードですこれらのサーバー呼び出しをクリックイベントにバインドすることを見ましたが、これは実行したくありません。これは可能であるはずですが、これまでに試したことはありませんでした。私が間違っていることはありますか?あるいは、singalR関数をこのように委譲することはできませんか?
EDIT 1 ***:私はハブメソッドに送信しているプレーヤーオブジェクトと関係があるようです。プレーヤーのオブジェクトをnullにすると、通信は正常に動作しているように見えます。しかし、実際のプレーヤーオブジェクトを送信すると、ブレークポイントは決して打たれません。
ありがとうございました!!私はそれを逃した方法を知らない – awweather