1

Opa を使用してオンラインの複数プレイヤー ゲームを作成しています。クライアント接続の操作方法についていくつか質問があります。

これが私のコードの抜粋です:

function game_view(){
    function page_ready(){
        // observe game messages
        _ = Network.observe(game_msg_received,game_channel);

        // set disconnect function
        _ = ClientEvent.set_on_disconnect_client(function(c){
            //do something when client is disconnected  
            ...
        });
    }

    <div onready={function(_){ page_ready() }}>
        //page content
        ...
    </div>
}
  1. 切断機能は、タブまたはウィンドウを閉じてから約 2 分 (4 回の ping 失敗の時間だと思います) に有効になります。私の場合は長すぎます。調整できますか?

  2. このページを離れる (タブを閉じる、または他のページにジャンプする) と、しばらくすると次のようなエラー メッセージが表示されます。

[SESSION] キャッチされない例外: "{OpaRPC_Server: {timeout: {client: {client: $"46rrpwmeiq28ql0d8lgz7e35zt8d701c"$; page: $934885115$}; fun_id: $"__set_game_Mygame"$}}}" 次のメッセージはスキップされます: Ifあなたがしたい (msg, st, ctx) デバッグ印刷 set debug variable session_debug >= 200

ページがもう存在しないためだと思いますが、関数 'game_msg_received' はまだゲーム メッセージを受信したときにこのページに通知しようとします。このエラーを回避するにはどうすればよいですか?

4

1 に答える 1

3

1 - 切断遅延を変更することはできませんが、おそらく非アクティブ イベントを使用できます。

このイベントは、クライアントにサーバーの観点からのアクティビティ (rpc 呼び出し、メッセージの送信など) がない場合に発生します。

ClientEvent.set_on_inactive_client非アクティブ イベントのコールバックを登録しClientEvent.set_inactivity_delay、期間を変更するために使用します。

2 - 確かに、ページがもう存在しないためです。オブザーバーをネットワークから削除する必要があります。これに使用Network.unobserveします。

最後に、コードは次のようになります

// set default inactive delay
// or if you change the 1st params 
// you can set for a specific client 
ClientEvent.set_inactive_delay(none, /*wanted delay*/)

function page_ready(){
    // observe game messages
    obs = Network.observe(game_msg_received,game_channel);

    // set inactive function
    _ = ClientEvent.set_on_inactive_client(function(c){
        // remove the observer
        Network.unobserve(obs);
        //do something when client is disconnected  
        ...
    });
}
于 2012-05-15T09:34:49.737 に答える