2017-01-25 5 views
2

ユーザがsignalrを使用して接続および切断するときを検出する必要があります。切断ユーザ信号で検出

私はこれらの2つのハブの方法があります:

$.connection.hub 
      .start() 
      .done(function() { 
       hub.server.say("Hello SignalR"); 
}); 

しかし、どのように、私は切断を検出します:

public void Say(string message) 
{ 
    Trace.WriteLine(message + " - " + Context.ConnectionId); 
} 

public void Goodbye(string message) 
{ 
    Trace.WriteLine(message + " - " + Context.ConnectionId); 
} 

を私はそうのような接続を検出するの世話をSay方法を実装していますか?

+1

'$ .connection.hub.disconnected(function(){...' 'ハブ内の' 'OnDisconnected(bool stopCalled){'をオーバーライドします) – stuartd

+0

@stuartd呼び出すことができないようですコールバック内のハブメソッド、$ .connection.hub.disconnected(function(){ hub.server.goodbye( "bye"); });うまくいきません – frc

+0

クライアントと同じようにうまく動作しません。接続が切断されている** – stuartd

答えて

1

あなたHubクラスにこのオーバーライドされたメソッドを追加します。私はそれはあなたのSignalRそうだとして、それはclient側にそれを追跡するために、あまり意味がありませんだと思いながら

public override Task OnDisconnected(bool stopCalled) 
{ 
    // do the logging here 
    Trace.WriteLine(Context.ConnectionId + ' - disconnected'); 
    return base.OnDisconnected(stopCalled); 
} 

これは、サーバー側でdisconectsを処理し、ログに記録されますセッションはサーバー側から終了します - see here。 あなたもそうあなたは、クライアントがサーバーに再接続し、成功しようとしたときのケースを追跡することができるでしょう

public override Task OnReconnected() 
{ 
    Trace.WriteLine(Context.ConnectionId + ' - reconnected'); 
    return base.OnReconnected(); 
} 

をオーバーライドすることができます:@stuartdコメントについてで

編集。

編集#2:クライアントがあるとき は、その後、あなたはもちろんOnConnectedイベント

public override Task OnConnected() 
{ 
    Trace.WriteLine(Context.ConnectionId + ' - reconnected'); 
    return base.OnConnected(); 
} 

の追跡のために同じメカニズムを使用することができますので、すべてのトラッキングコードが便利な場合には、より堅牢であり、サーバー側でちょうど保たれていますハブにログインしましたが、なんらかの理由でログに記録された状態を追跡するために使用しているメソッドを実行できませんでした。

+1

クライアント側は再接続しようとすることができます.. – stuartd

+0

確かに私は違いがないと思います。クライアント側との接続が切断されたとみなしているので、クライアントサイドからの再接続に成功する場合は 'Hub'クラスの' public override Task OnReconnected() 'を呼び出す必要があります。 –

+0

質問を読んで私は同意する。 – stuartd

関連する問題