OSDN Git Service

ステージ遷移時のデータベース更新を追加。
author西田 耀 <hikarupsp@users.sourceforge.jp>
Fri, 30 Aug 2013 02:03:42 +0000 (11:03 +0900)
committer西田 耀 <hikarupsp@users.sourceforge.jp>
Fri, 30 Aug 2013 02:03:42 +0000 (11:03 +0900)
documents/mysql.txt
www/auth.php
www/corelib/core.js
www/header.php

index 7ac5eaa..e90b2e5 100644 (file)
@@ -15,8 +15,8 @@ create table stageObjectTable (
        velocityY double,
        stageName char(64),
        className char(64),
-       objectAttribute char(255),
-       constructorArgs char(255),
+       objectAttribute text character set utf8,
+       constructorArgs text character set utf8,
        ownerUserID int,
        modifiedTimestamp bigint,
        addedTimestamp bigint,
@@ -30,7 +30,7 @@ create table userInventoryTable (
 );
 create table authUserTable (
        id int auto_increment,
-       name char(32),
+       name text character set utf8,
        lastResponseTimestamp bigint,
        userStageName char(64),
        index(id)
index 5c5d1a5..dec6a58 100644 (file)
@@ -26,118 +26,125 @@ if (mysqli_connect_error()) {
 // 文字化け防止
 $db->set_charset("utf8");
        
-if(isset($_GET['action']) && isset($_GET['name'])){
+if(isset($_GET['action'])){
        $action = $_GET['action'];
-       $name = urldecode($_GET['name']);
-       escapeMySQLArgumentString($name);
-       
-       if(strcmp($action, 'join') == 0){
-               //通常モード
-               $stmt = $db->prepare(QUERY_SELECT_USER_ID);
-               $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
-               $stmt->execute();
-               if($stmt->errno == 0){
-                       //クエリ成功
-                       $stmt->store_result();
-                       // 結果の個数を確認
-                       if($stmt->num_rows == 0){
-                               //ユーザー名はリストになかった=はじめてのひと
-                               $stmt = $db->prepare(QUERY_ADD_USER);
-                               $stgName = DEFAULT_START_STAGE;
-                               $stmt->bind_param(QUERY_ADD_USER_TYPES, $name, $stgName);
-                               $stmt->execute();
-                               if($stmt->errno == 0){
-                                       //クエリ成功
-                                       $stmt = $db->prepare(QUERY_SELECT_USER_ID);
-                                       $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
+       if(isset($_GET['name'])){
+               $name = urldecode($_GET['name']);
+               escapeMySQLArgumentString($name);
+               
+               if(strcmp($action, 'join') == 0){
+                       //通常モード
+                       $stmt = $db->prepare(QUERY_SELECT_USER_ID);
+                       $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
+                       $stmt->execute();
+                       if($stmt->errno == 0){
+                               //クエリ成功
+                               $stmt->store_result();
+                               // 結果の個数を確認
+                               if($stmt->num_rows == 0){
+                                       //ユーザー名はリストになかった=はじめてのひと
+                                       $stmt = $db->prepare(QUERY_ADD_USER);
+                                       $stgName = DEFAULT_START_STAGE;
+                                       $stmt->bind_param(QUERY_ADD_USER_TYPES, $name, $stgName);
                                        $stmt->execute();
                                        if($stmt->errno == 0){
                                                //クエリ成功
-                                               $stmt->store_result();
-                                               if($stmt->num_rows == 0){
-                                                       //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す
-                                                       responseError();
+                                               $stmt = $db->prepare(QUERY_SELECT_USER_ID);
+                                               $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
+                                               $stmt->execute();
+                                               if($stmt->errno == 0){
+                                                       //クエリ成功
+                                                       $stmt->store_result();
+                                                       if($stmt->num_rows == 0){
+                                                               //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す
+                                                               responseError();
+                                                       } else{
+                                                               //ユーザー名がリストにある=予想通り
+                                                               $stmt->bind_result($id);
+                                                               $stmt->fetch();
+                                                               responseNewUser($db, $id);
+                                                       }
                                                } else{
-                                                       //ユーザー名がリストにある=予想通り
-                                                       $stmt->bind_result($id);
-                                                       $stmt->fetch();
-                                                       responseNewUser($db, $id);
+                                                       //クエリ失敗
+                                                       responseError();
                                                }
                                        } else{
                                                //クエリ失敗
                                                responseError();
                                        }
                                } else{
-                                       //クエリ失敗
-                                       responseError();
+                                       //すでにユーザー名がリストにある=続きからプレイ
+                                       $stmt->bind_result($id);
+                                       $stmt->fetch();
+                                       $stgName = getUserStage($db, $id);
+                                       responseExistUser($db, $id, $stgName);
                                }
                        } else{
-                               //すでにユーザー名がリストにある=続きからプレイ
-                               $stmt->bind_result($id);
-                               $stmt->fetch();
-                               $stgName = getUserStage($db, $id);
-                               responseExistUser($db, $id, $stgName);
+                               //クエリ失敗
+                               responseError();
                        }
-               } else{
-                       //クエリ失敗
-                       responseError();
-               }
-       } else if(strcmp($action, 'devjoin') == 0){
-               //開発者モード
-               if(!isset($_GET['stage'])){
-                       responseError();
-               }
-               $stgName = urldecode($_GET['stage']);
-               $stmt = $db->prepare(QUERY_SELECT_USER_ID);
-               $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
-               $stmt->execute();
-               if($stmt->errno == 0){
-                       //クエリ成功
-                       $stmt->store_result();
-                       // 結果の個数を確認
-                       if($stmt->num_rows == 0){
-                               //ユーザー名はリストになかった=はじめてのひと
-                               $stmt = $db->prepare(QUERY_ADD_USER);
-                               //$stgName = DEFAULT_START_STAGE;
-                               $stmt->bind_param(QUERY_ADD_USER_TYPES, $name, $stgName);
-                               $stmt->execute();
-                               if($stmt->errno == 0){
-                                       //クエリ成功
-                                       $stmt = $db->prepare(QUERY_SELECT_USER_ID);
-                                       $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
+               } else if(strcmp($action, 'devjoin') == 0){
+                       //開発者モード
+                       if(!isset($_GET['stage'])){
+                               responseError();
+                       }
+                       $stgName = urldecode($_GET['stage']);
+                       $stmt = $db->prepare(QUERY_SELECT_USER_ID);
+                       $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
+                       $stmt->execute();
+                       if($stmt->errno == 0){
+                               //クエリ成功
+                               $stmt->store_result();
+                               // 結果の個数を確認
+                               if($stmt->num_rows == 0){
+                                       //ユーザー名はリストになかった=はじめてのひと
+                                       $stmt = $db->prepare(QUERY_ADD_USER);
+                                       //$stgName = DEFAULT_START_STAGE;
+                                       $stmt->bind_param(QUERY_ADD_USER_TYPES, $name, $stgName);
                                        $stmt->execute();
                                        if($stmt->errno == 0){
                                                //クエリ成功
-                                               $stmt->store_result();
-                                               if($stmt->num_rows == 0){
-                                                       //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す
-                                                       responseError();
+                                               $stmt = $db->prepare(QUERY_SELECT_USER_ID);
+                                               $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
+                                               $stmt->execute();
+                                               if($stmt->errno == 0){
+                                                       //クエリ成功
+                                                       $stmt->store_result();
+                                                       if($stmt->num_rows == 0){
+                                                               //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す
+                                                               responseError();
+                                                       } else{
+                                                               //ユーザー名がリストにある=予想通り
+                                                               $stmt->bind_result($id);
+                                                               $stmt->fetch();
+                                                               //responseNewUser($db, $id);
+                                                               responseExistUser($db, $id, getUserStage($db, $id));
+                                                       }
                                                } else{
-                                                       //ユーザー名がリストにある=予想通り
-                                                       $stmt->bind_result($id);
-                                                       $stmt->fetch();
-                                                       //responseNewUser($db, $id);
-                                                       responseExistUser($db, $id, getUserStage($db, $id));
+                                                       //クエリ失敗
+                                                       responseError();
                                                }
                                        } else{
                                                //クエリ失敗
                                                responseError();
                                        }
                                } else{
-                                       //クエリ失敗
-                                       responseError();
+                                       //すでにユーザー名がリストにある=続きからプレイ
+                                       $stmt->bind_result($id);
+                                       $stmt->fetch();
+                                       //未実装(本当はデータベースから続きのステージ名を取得するべき)
+                                       updateUserStage($db, $id, $stgName);
+                                       responseExistUser($db, $id, $stgName);
                                }
-                       } else{
-                               //すでにユーザー名がリストにある=続きからプレイ
-                               $stmt->bind_result($id);
-                               $stmt->fetch();
-                               //未実装(本当はデータベースから続きのステージ名を取得するべき)
-                               updateUserStage($db, $id, $stgName);
-                               responseExistUser($db, $id, $stgName);
                        }
-               } else{
-                       //クエリ失敗
-                       responseError();
+               } else if(strcmp($action, 'chstg') == 0){
+                               //ステージ移動
+                               if(!isset($_GET['id'])){
+                                       exit("eee");
+                               }
+                               $id = $_GET['id'];
+                               updateUserStage($db, $id, $name);
+                               exit("success");
                }
        }
 }
@@ -188,6 +195,10 @@ function updateUserStage($db, $userID, $stageName)
        $stmt->bind_param(QUERY_UPDATE_USER_STAGE_TYPES, $stageName, $userID);
        $stmt->execute();
        //エラーチェック省略
+       if($stmt->errno != 0){
+               exit("error573");
+       }
+       $stmt->close();
 }
 
 function getUserStage($db, $userID)
index a69b801..f29f251 100644 (file)
@@ -271,7 +271,7 @@ GameManager.prototype = {
        },
        loadStageFromNetwork: function(name){
                //URL_PCD_Stage/name.jsを利用してステージを作成する。
-               request = this.networkManager.CreateRequestObject();
+               var request = this.networkManager.CreateRequestObject();
                //同期モード
                request.open('GET', URL_PCD_Stage + name + ".js", false);
                this.networkManager.RequestObjectDisableCache(request);
@@ -280,6 +280,13 @@ GameManager.prototype = {
                if(request.status == 0){
                        alert("ネットワークにアクセスできません。" + request.status + ":" + request.statusText);
                }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
+                       if(this.userID != 0){
+                               var rq2 = this.networkManager.CreateRequestObject();
+                               //同期モード
+                               rq2.open('GET', URL_PCD_Auth + "?action=chstg&name=" + name + "&id=" + this.userID);
+                               this.networkManager.RequestObjectDisableCache(rq2);
+                               rq2.send(null);
+                       }
                        var stage = eval(request.responseText);
                        this.runStage(stage);
                        this.runningStageName = name;
index 79bf731..acb0624 100644 (file)
@@ -43,7 +43,7 @@ define("QUERY_SELECT_ALL_OTHER_USER_OBJECT_TYPES", "sii");
 define("QUERY_CHECK_AND_SET_DELETED_OBJECT", "UPDATE stageObjectTable SET objectAttribute='Deleted', modifiedTimestamp=? WHERE modifiedTimestamp<=? AND objectAttribute<>'Deleted'");
 define("QUERY_CHECK_AND_SET_DELETED_OBJECT_TYPES", "ii");
 //デフォルト開始ステージ名
-define("DEFAULT_START_STAGE", "main");
+define("DEFAULT_START_STAGE", "select");
 
 //ユーザー生存期間(ミリ秒)
 define("USER_ALIVE_TIME_MS", 2000);