},
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);
//削除処理
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];
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];
anObject.movingSpeed.y = anArray[4];
anObject.attribute = eval(anArray[6]);
anObject.updateAttribute();
- mainManager.runningStage.addStageObject(anObject, true);
+ s.addStageObject(anObject, true, true);
}
}
//ユーザーリスト
}
},
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);
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];
anObject.movingSpeed.x = anArray[3];
anObject.movingSpeed.y = anArray[4];
anObject.attribute = eval(anArray[6]);
- stage.addStageObject(anObject, true);
+ stage.addStageObject(anObject, true, true);
}
}
}
}
UserManager.prototype = {
loginAs: function(userNameStr){
- request = mainManager.networkManager.CreateRequestObject();
+ var request = mainManager.networkManager.CreateRequestObject();
var i = userNameStr.indexOf("@");
if(i != -1){
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, '+');