Esempio n. 1
0
                 $funcname();
                 unset($funcname);
             }
         }
         unset($i);
         //system('sync && echo 3 > /proc/sys/vm/drop_caches');
         $___TEMP_tiused = get_script_runtime($___TEMP_EXEC_START_TIME);
         __SOCKET_DEBUGLOG__("执行完成。核心占用时间 " . $___TEMP_tiused . " 秒。");
     }
 }
 //现在待处理队列为空
 $___TEMP_runned_time = time() - $___TEMP_server_start_time;
 if ($___TEMP_runned_time + $___MOD_SRV_WAKETIME + 5 > $___TEMP_max_time) {
     //没有下一次唤醒了,主动退出
     __SOCKET_LOG__("已经运行了 " . $___TEMP_runned_time . "秒。主动退出。");
     __SERVER_QUIT__();
 } else {
     if ($___TEMP_runned_time + $___MOD_SRV_WAKETIME * 2 + 5 > $___TEMP_max_time && !$___TEMP_newsrv_flag) {
         //老server即将在下一次唤醒时主动退出,发信息给脚本启动一台新server。
         if ($___TEMP_runned_time - $___TEMP_last_cmd <= $___MOD_VANISH_TIME || $___TEMP_is_root) {
             __SOCKET_LOG__("已经运行了 " . $___TEMP_runned_time . "秒,稍后将退出,已请求脚本启动新服务器。");
             $___TEMP_newsrv_flag = 1;
             if ($___TEMP_is_root) {
                 touch(GAME_ROOT . './gamedata/tmp/server/request_new_root_server');
             } else {
                 touch(GAME_ROOT . './gamedata/tmp/server/request_new_server');
             }
         }
     }
 }
 //进入闲置状态
Esempio n. 2
0
function __SOCKET_LOAD_DATA__(&$___TEMP_connection)
{
    // 从客户端取得信息
    if (!__SOCKET_CHECK_WITH_TIMEOUT__($___TEMP_connection, 'r', 0, 200000)) {
        __SOCKET_WARNLOG__("警告:socket_read等待时间过长。结束流程。");
        return false;
    }
    $___TEMP_socket_data = @socket_read($___TEMP_connection, 1024, PHP_NORMAL_READ);
    __SOCKET_DEBUGLOG__("已读取信息。");
    $___TEMP_socket_data = substr($___TEMP_socket_data, 0, -1);
    //去掉换行
    global $___MOD_CONN_PASSWD;
    if (substr($___TEMP_socket_data, 0, strlen($___MOD_CONN_PASSWD)) != $___MOD_CONN_PASSWD) {
        __SOCKET_WARNLOG__("警告:连接密码错误。其提供的连接密码为 " . substr($___TEMP_socket_data, 0, strlen($___MOD_CONN_PASSWD)) . " 。结束流程。");
        return false;
    }
    $___TEMP_socket_data = substr($___TEMP_socket_data, strlen($___MOD_CONN_PASSWD));
    if ($___TEMP_socket_data == 'stop') {
        __SOCKET_LOG__("收到指令要求退出,紧急退出。");
        __SERVER_QUIT__();
    }
    if ($___TEMP_socket_data == 'touch') {
        __SOCKET_DEBUGLOG__("收到了测试命令。");
        global $___TEMP_is_root;
        if (!$___TEMP_is_root) {
            $x = 'Received';
        } else {
            $x = 'Received_root';
        }
        if (!__SOCKET_CHECK_WITH_TIMEOUT__($___TEMP_connection, 'w', 0, 200000)) {
            __SOCKET_WARNLOG__("警告:socket_write等待时间过长。结束流程。");
        } else {
            if (!socket_write($___TEMP_connection, $x . "\n")) {
                __SOCKET_WARNLOG__("警告:socket_write失败。结束流程。");
            }
        }
        return false;
    }
    global $___MOD_CONN_W_DB;
    global $___TEMP_tablepre, $___TEMP_db;
    $___TEMP_PLAYER_CMD = NULL;
    if ($___MOD_CONN_W_DB) {
        $result = $___TEMP_db->query("SELECT value FROM {$___TEMP_tablepre}temp WHERE sid='{$___TEMP_socket_data}'");
        if (!$___TEMP_db->num_rows($result)) {
            __SOCKET_WARNLOG__("警告:数据库中没有记录名为 {$___TEMP_socket_data} 的记录。结束流程。");
            return false;
        }
        $x = $___TEMP_db->fetch_array($result);
        $x = $x['value'];
        $x = base64_decode($x);
    } else {
        global $___MOD_TMP_FILE_DIRECTORY;
        if (!file_exists($___MOD_TMP_FILE_DIRECTORY . $___TEMP_socket_data)) {
            __SOCKET_WARNLOG__("警告:文件 {$___TEMP_socket_data} 不存在。结束流程。");
            return false;
        }
        $x = file_get_contents($___MOD_TMP_FILE_DIRECTORY . $___TEMP_socket_data);
    }
    __SOCKET_DEBUGLOG__("已读取信息文件。");
    eval('$___TEMP_PLAYER_CMD=' . $x . ';');
    __SOCKET_DEBUGLOG__("已载入信息文件。");
    global $___LOCAL_INPUT__VARS__INPUT_VAR_LIST;
    $___LOCAL_INPUT__VARS__INPUT_VAR_LIST = array();
    foreach ($___TEMP_PLAYER_CMD as $key => $value) {
        $___LOCAL_INPUT__VARS__INPUT_VAR_LIST[$key] = $value;
    }
    //其他模块都已经在上次执行完成后重新初始化过了,现在只需初始化一下SYS模块即可(这是因为SYS模块的信息是需要不断更新的)
    global $___TEMP_MOD_LIST_n, $___TEMP_MOD_NAME;
    for ($i = 1; $i <= $___TEMP_MOD_LIST_n; $i++) {
        if (strtoupper($___TEMP_MOD_NAME[$i]) == 'SYS') {
            $funcname = $___TEMP_MOD_NAME[$i] . '\\___pre_init';
            $funcname();
            $funcname = $___TEMP_MOD_NAME[$i] . '\\init';
            $funcname();
            $funcname = $___TEMP_MOD_NAME[$i] . '\\___post_init';
            $funcname();
        }
    }
    __SOCKET_DEBUGLOG__("初始化信息成功。开始执行。");
    return $___TEMP_socket_data;
}