OSDN Git Service

Merge branch 'master' of https://scm.sourceforge.jp/gitroot/h58pcdgame/GameScriptCore...
[h58pcdgame/GameScriptCoreLibrary.git] / www / corelib / coresubc.js
index 1020e73..80e18e6 100644 (file)
@@ -45,17 +45,48 @@ NetworkManager.prototype = {
        },
        sync: function(){
                //ネットワーク同期
-               //サーバーに更新情報をアップロード
                if(mainManager.userID != 0){
+                       var s = mainManager.runningStage;
+                       if(s && s.pendingGlobalStageObjectList.length > 0){
+                               //サーバーにオブジェクト追加情報をアップロード
+                               var request = this.CreateRequestObject();
+                               //同期モード
+                               request.open('POST', URL_PCD_Root + "update.php?uid=" + mainManager.userID + "&action=add", false);
+                               request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+                               //送信データを準備
+                               var aData = s.pendingGlobalStageObjectData;
+                               this.RequestObjectDisableCache(request);
+                               request.send(aData.data);
+                               //エラーチェック省略
+                               if(request.status == 0){
+                                       alert("ネットワークにアクセスできません。" + request.status + ":" + request.statusText);
+                               }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
+                                       var res = request.responseText;
+                                       if(isValidResponseText(res)){
+                                               var retArray = eval(res);
+                                               this.timeStamp = retArray[0];
+                                               //割り当てられたobjectIDを設定する
+                                               for(var i = 0, k = s.pendingGlobalStageObjectList.length; i < k; i++){
+                                                       s.pendingGlobalStageObjectList[i].objectID = retArray[1][i];
+                                                       s.globalStageObjectList.push(s.pendingGlobalStageObjectList[i]);
+                                               }
+                                       }
+                               }else{
+                                       alert("サーバーがエラーを返しました。" + request.status + ":" + request.statusText);
+                               }
+                               s.pendingGlobalStageObjectData = new RequestData();
+                               s.pendingGlobalStageObjectList = new Array();
+                       }
                        //ユーザーIDが設定されている=オンライン状態
-                       request = this.CreateRequestObject();
+                       //更新データを取得
+                       var request = this.CreateRequestObject();
                        //同期モード
                        request.open('POST', URL_PCD_Root + "update.php?uid=" + mainManager.userID + "&action=refresh", false);
                        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                        //送信データを準備
                        aData = new RequestData();
-                       if(mainManager.runningStage){
-                               mainManager.runningStage.appendSyncDataTo(aData);
+                       if(s){
+                               s.appendSyncDataTo(aData);
                        }
                        //送信
                        this.RequestObjectDisableCache(request);
@@ -71,16 +102,16 @@ NetworkManager.prototype = {
                                        //削除処理
                                        for(var i = 0; i < retArray[3].length; i++){
                                                console.log("Network:removeObject:ObjectID=" + retArray[3][i] + "\n");
-                                               var anObject = mainManager.runningStage.getGlobalStageObject(retArray[3][i]);
+                                               var anObject = s.getGlobalStageObject(retArray[3][i]);
                                                if(anObject){
-                                                       mainManager.runningStage.removeStageObject(anObject);
+                                                       s.removeStageObject(anObject);
                                                }
                                        }
                                        //更新処理
                                        for(var i = 0; i < retArray[1].length; i++){
                                                //mainManager.debugOut("Network:refreshObject:ObjectID=" + retArray[1][i] + "\n");
                                                var anArray = retArray[1][i];
-                                               var anObject = mainManager.runningStage.getGlobalStageObject(anArray[0]);
+                                               var anObject = s.getGlobalStageObject(anArray[0]);
                                                if(anObject){
                                                        anObject.origin.x = anArray[1];
                                                        anObject.origin.y = anArray[2];
@@ -94,7 +125,7 @@ NetworkManager.prototype = {
                                        for(var i = 0; i < retArray[2].length; i++){
                                                var anArray = retArray[2][i];
                                                var args = eval(anArray[7]);
-                                               var anObject = eval("new " + anArray[5] + "(mainManager.runningStage, args);");
+                                               var anObject = eval("new " + anArray[5] + "(s, args, true);");
                                                if(anObject){
                                                        console.log("Network:addObject:ObjectID=" + anArray[0] + "\n");
                                                        anObject.objectID = anArray[0];
@@ -105,7 +136,7 @@ NetworkManager.prototype = {
                                                        anObject.movingSpeed.y = anArray[4];
                                                        anObject.attribute = eval(anArray[6]); 
                                                        anObject.updateAttribute();
-                                                       mainManager.runningStage.addStageObject(anObject, true);
+                                                       s.addStageObject(anObject, true, true);
                                                }
                                        }
                                        //ユーザーリスト
@@ -118,18 +149,15 @@ NetworkManager.prototype = {
                }
        },
        joinStage: function(stage){
-                       //サーバーに追加オブジェクトの情報をアップロード
+               //サーバーに追加オブジェクトの情報をアップロード
                if(mainManager.userID != 0){
-                       request = this.CreateRequestObject();
+                       var request = this.CreateRequestObject();
                        //同期モード
                        request.open('POST', URL_PCD_Root + "update.php?uid=" + mainManager.userID + "&action=add", false);
                        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-                       //送信データを準備
-                       aData = new RequestData();
-                       stage.appendInitialSyncDataTo(aData);
-                       //送信
                        this.RequestObjectDisableCache(request);
-                       request.send(aData.data);
+                       request.send(null);
+                       
                        //レスポンス確認
                        if(request.status == 0){
                                alert("ネットワークにアクセスできません。" + this.status + ":" + this.statusText);
@@ -138,15 +166,10 @@ NetworkManager.prototype = {
                                if(isValidResponseText(res)){
                                        var retArray = eval(res);
                                        this.timeStamp = retArray[0];
-                                       //割り当てられたobjectIDを設定する
-                                       for(var i = 0; i < stage.globalStageObjectList.length; i++){
-                                               stage.globalStageObjectList[i].objectID = retArray[1][i];
-                                       }
-                                       //すでにステージ上にある他のユーザーのオブジェクトを追加する
                                        for(var i = 0; i < retArray[2].length; i++){
                                                var anArray = retArray[2][i];
                                                var args = eval(anArray[7]);
-                                               var anObject = eval("new " + anArray[5] + "(stage, args);");
+                                               var anObject = eval("new " + anArray[5] + "(stage, args, true);");
                                                if(anObject){
                                                        mainManager.debugOut("Network:addObject:ObjectID=" + anArray[0] + "\n");
                                                        anObject.objectID = anArray[0];
@@ -156,7 +179,7 @@ NetworkManager.prototype = {
                                                        anObject.movingSpeed.x = anArray[3];
                                                        anObject.movingSpeed.y = anArray[4];
                                                        anObject.attribute = eval(anArray[6]);
-                                                       stage.addStageObject(anObject, true);
+                                                       stage.addStageObject(anObject, true, true);
                                                }
                                        }
                                }
@@ -283,7 +306,7 @@ function UserManager(mManager){
 }
 UserManager.prototype = {
        loginAs: function(userNameStr){
-               request = mainManager.networkManager.CreateRequestObject();
+               var request = mainManager.networkManager.CreateRequestObject();
                
                var i = userNameStr.indexOf("@");
                if(i != -1){
@@ -370,10 +393,12 @@ OffsetBox.prototype = {
 function RequestData(){
        //FormDataがIEで動かないので代替
        this.data = "";
+       this.length = 0;
 }
 RequestData.prototype = {
        append: function(name, data){
                this.data += this.getURLEncodedString(name) + "=" + this.getURLEncodedString(data) + "&";
+               this.length++;
        },
        getURLEncodedString: function(str){
                return encodeURIComponent(str).replace(/%20/g, '+');