X-111 送信テスト用サンプル | 開発用掲示板 |

SubWin無し/ 一時jsファイル無し / NN4 IE5 /

  CASE 1 : 最新のデータのみ返ってくるパターン (早い。データ欠落有り。)
●CASE 2 : サーバー登録順に並んだ全データが返ってくるパターン
           (重い。サーバーへ届いたデータの欠落はほとんど無し。)
  CASE 3 : 最新のデータにsendIDを付けて返って来たデータと照合するパターン (データ欠落少ない。再リクエスト時時間がかかる。)

10〜100のボタンを押すか、送信データ Y O U へ入力してから
送信ボタンをクリックすると送/受信されます。
このケースでは送受するデータ量が多いので、このサンプルは 48 時間 以内 && 5件 以内の
データに限定しています。これも設定できるようにするようですね。
あと、データの頭にサーバー受信順の連番つけるのは無駄でしょうか?
送信
send & get
Y O U

Name-      
data-

受信
get only

alldata-
N E W

Name- IP- sendID- entryID-
ローカル送信時間-
サーバー登録時間-
data-
previous1

Name- IP- sendID- entryID-
ローカル送信時間-
サーバー登録時間-
data-
previous2

Name- IP- sendID- entryID-
ローカル送信時間-
サーバー登録時間-
data-
previous3

Name- IP- sendID- entryID-
ローカル送信時間-
サーバー登録時間-
data-
previous4

Name- IP- sendID- entryID-
ローカル送信時間-
サーバー登録時間-
data-
previous5

Name- IP- sendID- entryID-
ローカル送信時間-
サーバー登録時間-
data-


PCのローカルタイムはずれてるのが普通なので、パソコン内蔵時計修正ソフト
をかけておくとこのテストではレスポンスの時間差が良く分かっていいかも。

Win
http://www.forest.impress.co.jp/library/skrw.html
Mac
http://www.fureai.or.jp/time/vremya.html



参考 :

対戦ゲーム内での必要最低限な処理は下記 1 〜 4 です。

     GRSX_name                            // 1. 名前セット
     GRSX_data                            // 2. 対戦データセット
     GRSX_sendXData(GRSX_name,GRSX_data)  // 3. 送信(と受信)を行う
     GRSX_onAfterReceived()               // 4. 受信後の処理(この名前の関数を作って中へ受信後の処理を書いてください)


●送信されるデータ
 *
 * GRSX_sendXData(GRSX_name,GRSX_data)によってGRSX_sendNewID,GRSX_name,GRSX_dat
 * の3つのデータを送信します。
 *
 *
 *   GRSXsendID='+GRSX_sendNewID+'&GRSXname='+GRSX_name+'&GRSXdata='+GRSX_data
 *
 *   データ例 :
 *
 *   GRSXsendID=948872092&GRSXname=ToshirouTakahashi&GRSXdata=123456789
 *
 *   意味 :
 *
 *     GRSX_sendNewID // 送信ID(1970.1.1からの秒数)自動生成 Math.ceil(now.getTime()/1000)
 *     GRSX_name     // 名前
 *     GRSX_data     // 対戦データ
 *
 *   JavaScript使用例 :
 *
 *     var GRSX_name = document.f1.rename.value  // 1. 名前をセットする
 *     var GRSX_data = document.f1.xdata.value   // 2. データをセットする
 *     GRSX_sendXData(GRSX_name,GRSX_data)  // 3. 送信(と受信)をする
 *
 *
●受信されるデータ
 *
 * GRSX_getXData()かGRSX_sendXData(GRSX_name,GRSX_data)によって
 * 二次元配列GRSX_receivedDataを受信します。
 * GRSX_receivedDataには下記のデータがセットされています。
 *
 *
 * 注:サーバーのデータが誰かによって更新されているかどうかは、GRSX_getXData()ま
 * たはGRSX_sendXData()による受信でGRSX_receivedDataを受け取るまでわかりません。
 * したがって、ゲームによっては、setIntervalやsetTimeoutなどを使うことによって定
 * 期的にGRSX_getXData()を起動して監視を行う必要があります。
 * ただし、これはゲームの負荷を高める可能性があるので今はモジュールに入れていま
 * せん。各自のゲーム内で必要に応じて実装することになります。
 *
 *
 *
 *   GRSX_receivedData
 *
 *   意味 :
 *
 *   GRSX_receivedData.length //参加中のデータ数(参加人数)
 *   GRSX_receivedData[n][0]  //最新データ登録時(秒) from 1970/1/1 00:00:00
 *   GRSX_receivedData[n][1]  //送信ID 最新データ送信ローカル時(秒) from 1970/1/1 00:00:00
 *                   クライアントPCの日付設定は信頼性に欠けるのでTimeとしてはあまり信用はできません。
 *                   モジュールでは送信データの受け渡し確認用IDとして使用しています。
 *   GRSX_receivedData[n][2]  //名前
 *   GRSX_receivedData[n][3]  //対戦データ
 *   GRSX_receivedData[n][4]  //REMOTE_ADDR--見せないほうが良いかな?
 *
 *   JavaScript使用例 :
 *
 *     例1
 *
                     // 4. 対戦データ受信直後の処理をこのGRSX_onAfterReceived()内に書いてください。
                     //受信後すぐに起動します。
     function GRSX_onAfterReceived(){

       for (var i = 0 ; i < GRSX_receivedData.length ; i++ ){

         eval('document.f1.re'+i+'entryID.value=GRSX_receivedData[i][0]')   //-登録ID
         eval('document.f1.re'+i+'sendID.value=GRSX_receivedData[i][1]')   //-送信ID
         eval('document.f1.re'+i+'svrtime.value=new Date(GRSX_receivedData[i][0]*1000)')   //-最新データ登録時間
         eval('document.f1.re'+i+'loctime.value=new Date(GRSX_receivedData[i][1]*1000)')   //-送信ローカル時間

         eval('document.f1.re'+i+'name.value=GRSX_receivedData[i][2]') //-名前
         eval('document.f1.re'+i+'data.value=GRSX_receivedData[i][3]') //-data
         eval('document.f1.re'+i+'ip.value=GRSX_receivedData[i][4]')   //-ip
       }
     }
 *
 *     例2 0番目のデータを取り出す
 *
     function GRSX_onAfterReceived(){

        var entryTime = new Date(GRSX_receivedData[0][0]*1000)
        var data      = ""

        data += (entryTime.getYear()+1900) + "年"
        data += (entryTime.getMonth()+1) + "月"
        data += entryTime.getDate() + "日"
        data += entryTime.getHours() + "時"
        data += entryTime.getMinutes() + "分"
        data += entryTime.getSeconds() + "秒"
        data += "\n名前  : " + GRSX_receivedData[0][2]
        data += "\nデータ: " + GRSX_receivedData[0][3]

        alert(data)
     }
 *
 *
 *     例3 チャット
 *

 /********************************************************************
 * [ for Chat Script ]
 *
 *-------------------------------------------------------------------
 */

   //受信データの保存
   var recdata = new Array();
   function recData(){

     for(var i = 0 ; i < GRSX_receivedData.length ; i++ ){//重複を無視
       if(!recdata[GRSX_receivedData[i][0]])
         recdata[GRSX_receivedData[i][0]] = GRSX_receivedData
     }

   }

   //ChatAreaへ出力
   function outputChat(){

     GRSX_receivedData.sort()

     for (var i = 0 ; i < GRSX_receivedData.length ; i++ ){

       if(!recdata[GRSX_receivedData[i][0]]){

         var time = new Date(GRSX_receivedData[i][0]*1000)
           var times  = (time.getMonth()+1) + "月"
               times += time.getDate() + "日"
               times += time.getHours() + "時"
               times += time.getMinutes() + "分"
               times += time.getSeconds() + "秒"
         var name = GRSX_receivedData[i][3]
         var data = GRSX_receivedData[i][4]

         document.f1.chatarea.value += times + ':' + name + '> ' + data + '\n'
         document.f1.chatarea.select()
       }
     }
     recData()
   }



   function reloadFunc(){

       if(!GRSX_sendingFlg)GRSX_getXData()
   var timeID=0
       timeID=setTimeout('reloadFunc()',10000)

   }

/*-------------------------------------------------------------------
 * END of [ for Chat Script ]
 ********************************************************************/

 <TEXTAREA NAME="chatarea" ROWS=10 COLS=73>

 *
 *
 *
 *
 *
 *
 *

ゲームページのJavaScript内で設定できる変数 ...まだ使えません。

* 付けたい機能ってありますか?
参加人数設定
説明 参加人数のMax設定。
Syntax [ GRSX_memberlength = 数値 ]

数値 1〜n(Max 10)
(宣言しなければ 4 )
test GRSX_memberLength =
エラー処理停止
説明 エラー時に高橋ロボ2を呼び出さない。
Syntax [ GRS_errorOff = false | true ]

true 停止
false 実行(宣言しなければfalse)
test GRS_errorOff=
Timeout設定
説明 データ保存時間の設定。
Syntax [ GRSX_timeout = 数値(時間) ]

数値 1〜n(Max 24*90)
(宣言しなければ 48 )
test GRSX_timeout =
受信リトライ回数
説明 受信失敗時の再受信起動処理の回数
Syntax [ GRSX_retryGetXData= 数値 ]

数値1〜n(Max 20)
( 宣言しなければ 15 )
test GRSX_retryGetXData=
*プロトコル(Case)の選択はゲーム中に変わるとまずいので登録時設定。
*データ送受のデフォルト期間と件数 / DBから削除する期間と件数を設定できるようにする
ゲームページディレクトリ内へ設定用GRSX_localpref.jsを置くのはどうかな。
*たとえば上記フォームの場合、人数が減った時に差分のデータがフォーム(変数)
に残るのでクリアすることを要意識。