示例#1
0
文件: command.php 项目: nahakyuu/dts
                $___TEMP_CONN_PORT = $chosen;
            } else {
                __SOCKET_ERRORLOG__('无法打开gamedata/tmp/server目录。');
            }
            __SOCKET_SEND_TO_SERVER__();
            __SOCKET_DEBUGLOG__('Client执行完成。');
            die;
        } else {
            //否则是由server自行引用的command.php,开始执行
            $pagestartime = microtime(true);
        }
    }
} else {
    $pagestartime = microtime(true);
    require GAME_ROOT . './include/common.inc.php';
    $timecost2 = get_script_runtime($pagestartime);
}
////////////////////////////////////////////////////////////////////////////
//////////////////////////游戏前玩家信息检查///////////////////////////////////
////////////////////////////////////////////////////////////////////////////
if (!$cuser || !$cpass) {
    gexit($_ERROR['no_login'], __FILE__, __LINE__);
    return;
}
$result = $db->query("SELECT * FROM {$tablepre}players WHERE name = '{$cuser}' AND type = 0");
if (!$db->num_rows($result)) {
    $gamedata['url'] = 'valid.php';
    ob_clean();
    $jgamedata = base64_encode(gzencode(compatible_json_encode($gamedata)));
    echo $jgamedata;
    return;
示例#2
0
function __SOCKET_SEND_TO_SERVER__()
{
    global $___MOD_CONN_W_DB;
    global $___TEMP_tablepre, $___TEMP_db;
    //准备用户输入数据
    $___TEMP_data = array();
    $_COOKIE = gstrfilter($_COOKIE);
    foreach ($_COOKIE as $key => $value) {
        $___TEMP_data[$key] = $value;
    }
    $_POST = gstrfilter($_POST);
    foreach ($_POST as $key => $value) {
        $___TEMP_data[$key] = $value;
    }
    global $cli_pagestartime;
    $___TEMP_data['___PAGE_STARTTIME_VALUE'] = $cli_pagestartime;
    if (isset($___TEMP_data['game_roomid'])) {
        $game_roomid = $___TEMP_data['game_roomid'];
    } else {
        $game_roomid = '';
    }
    $___TEMP_data['___GAME_ROOMID'] = $game_roomid;
    //防止注入,去掉不合法变量名,去掉可能的global名称
    $___TEMP_data_keys = array_keys($___TEMP_data);
    foreach ($___TEMP_data_keys as $keyc) {
        if (!($keyc != '' && ('a' <= $keyc[0] && $keyc[0] <= 'z' || 'A' <= $keyc[0] && $keyc[0] <= 'Z' || $keyc[0] == '_') && check_alnumudline($keyc))) {
            unset($___TEMP_data[$keyc]);
        }
    }
    if (isset($___TEMP_data['_COOKIE'])) {
        unset($___TEMP_data['_COOKIE']);
    }
    if (isset($___TEMP_data['_POST'])) {
        unset($___TEMP_data['_POST']);
    }
    if (isset($___TEMP_data['_REQUEST'])) {
        unset($___TEMP_data['_REQUEST']);
    }
    if (isset($___TEMP_data['_GLOBALS'])) {
        unset($___TEMP_data['_GLOBALS']);
    }
    if (isset($___TEMP_data['GLOBALS'])) {
        unset($___TEMP_data['GLOBALS']);
    }
    //存储用户输入数据
    $___TEMP_uid = uniqid('', true);
    //获取唯一ID
    ob_clean();
    var_export($___TEMP_data);
    $___TEMP_data = ob_get_contents();
    ob_clean();
    if ($___MOD_CONN_W_DB) {
        $___TEMP_db->query("INSERT INTO {$___TEMP_tablepre}temp (sid,value) VALUES ('{$___TEMP_uid}','" . base64_encode($___TEMP_data) . "')");
    } else {
        global $___MOD_TMP_FILE_DIRECTORY;
        if (!file_exists($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_')) {
            create_dir($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_');
        } else {
            if (!is_dir($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_')) {
                unlink($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_');
                create_dir($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_');
            }
        }
        writeover($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_/' . $___TEMP_uid, $___TEMP_data);
    }
    //连接server
    global $___TEMP_CONN_PORT;
    $___TEMP_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($___TEMP_socket === false) {
        __SOCKET_ERRORLOG__("socket_create失败。");
    }
    $___TEMP_connected = socket_connect($___TEMP_socket, '127.0.0.1', $___TEMP_CONN_PORT);
    if (!$___TEMP_connected) {
        __SOCKET_ERRORLOG__("socket_connect失败。");
    }
    /*
    //允许3秒等待
    if (!__SOCKET_CHECK_WITH_TIMEOUT__($___TEMP_socket, 'w', 3, 0)) __SOCKET_ERRORLOG__("socket_write等待时间过长。"); 
    */
    //发送消息给server
    global $___MOD_CONN_PASSWD;
    if (!socket_write($___TEMP_socket, $___MOD_CONN_PASSWD . $game_roomid . '_/' . $___TEMP_uid . "\n")) {
        __SOCKET_ERRORLOG__("socket_write失败");
    }
    __SOCKET_DEBUGLOG__("消息已发送,等待回应。");
    /*
    //允许3秒等待
    if (!__SOCKET_CHECK_WITH_TIMEOUT__($___TEMP_socket, 'r', 3, 0)) __SOCKET_ERRORLOG__("socket_read等待时间过长。"); 
    */
    $___TEMP_ret = socket_read($___TEMP_socket, 1024, PHP_NORMAL_READ);
    if ($___TEMP_ret === false) {
        socket_shutdown($___TEMP_socket);
        __SOCKET_ERRORLOG__("socket_read失败。关闭连接。");
    } else {
        __SOCKET_DEBUGLOG__("回应已读取,关闭连接。");
        socket_shutdown($___TEMP_socket);
    }
    $___TEMP_ret = substr($___TEMP_ret, 0, -1);
    //去掉换行
    if ($___TEMP_ret != $___MOD_CONN_PASSWD . '_ok') {
        __SOCKET_ERRORLOG__("未知返回信息 " . $___TEMP_ret . ' 。');
    }
    if ($___MOD_CONN_W_DB) {
        $result = $___TEMP_db->query("SELECT value FROM {$___TEMP_tablepre}temp WHERE sid='{$___TEMP_uid}'");
        if (!$___TEMP_db->num_rows($result)) {
            __SOCKET_ERRORLOG__("数据库中没有记录名为 {$___TEMP_uid} 的记录。");
        }
        $___TEMP_res = $___TEMP_db->fetch_array($result);
        $___TEMP_res = $___TEMP_res['value'];
        $___TEMP_res = base64_decode($___TEMP_res);
        $___TEMP_db->query("DELETE FROM {$___TEMP_tablepre}temp WHERE sid='{$___TEMP_uid}'");
    } else {
        global $___MOD_TMP_FILE_DIRECTORY;
        $___TEMP_res = file_get_contents($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_/' . $___TEMP_uid);
        if (!defined('MOD_REPLAY')) {
            //如果录像模式开启,最后删缓存的工作由录像模块进行
            unlink($___MOD_TMP_FILE_DIRECTORY . $room_prefix . '_/' . $___TEMP_uid);
        }
    }
    __SOCKET_DEBUGLOG__("已载入回应文件。");
    global $cli_pagestartime;
    $timecost = get_script_runtime($cli_pagestartime);
    if ($timecost > 0.15) {
        __SOCKET_WARNLOG__("警告:本次操作耗时较长,耗时为 " . $timecost . " 秒。");
    }
    /*
    $___TEMP_res = str_replace('_____PAGE_RUNNING_TIME_____',(string)$timecost,$___TEMP_res);
    */
    ob_clean();
    echo $___TEMP_res;
    ob_end_flush();
}