Example #1
0
function handle_list_command($list_name, $cmd_name)
{
    switch ($cmd_name) {
        case 'list':
            $res = mmc_array_values($list_name);
            if (count($res) === 0) {
                update_sched_tasks($list_name);
                $res = mmc_array_values($list_name);
            }
            return jsonp($res);
        case 'create':
        case 'update':
            $key_name = @$_POST['name'];
            if ($key_name) {
                return result_ok(mmc_array_set($list_name, md5($key_name), $_POST));
            } else {
                return '{"res": false}';
            }
        case 'delete':
            mmc_array_del($list_name, md5($_POST['name']));
            if (mmc_array_length($list_name) === 0) {
                del_cached_file($list_name);
            }
            return result_ok(true);
        case 'flush':
            sched_changed();
            return '{"res": false}';
        case 'names':
            return jsonp(mmc_array_keys($list_name));
        case 'tags':
            $items = mmc_array_values($list_name);
            $output_tags = [];
            foreach ($items as $item) {
                $tags = @$item['tags'];
                if ($tags) {
                    $tag_list = explode(' ', $tags);
                    foreach ($tag_list as $tag) {
                        $output_tags[] = $tag;
                    }
                }
            }
            return jsonp($output_tags);
        default:
            die('{"res": false}');
    }
}
Example #2
0
function handle_bind_account($PARAMS)
{
    $device = @$PARAMS['device'];
    $platform = @$PARAMS['plat'];
    $caption = @$PARAMS['cap'];
    $username = check_input(@$PARAMS['user']);
    $nickname = check_input(@$PARAMS['nick']);
    $cap_view = make_capview($username, $nickname, $caption);
    /********************************
    	判断新收到的账户,是否应该被收录	
    	********************************/
    if (empty($username) && empty($nickname)) {
        omp_trace($PARAMS);
        return return_bind(array('status' => 'error'));
    }
    if (count($username) > 100 || count($nickname) > 100) {
        omp_trace('username or nickname too long');
        return return_bind(array('status' => 'error'));
    }
    $platform_list = mmc_array_keys(NS_BINDING_LIST);
    if (!in_array($platform, $platform_list)) {
        mmc_array_set(NS_BINDING_LIST, $platform, $caption);
    }
    $ns_bind_list = NS_BINDING_LIST . $platform;
    $bind_info = mmc_array_get($ns_bind_list, $device);
    omp_trace($bind_info);
    $changed = false;
    if ($bind_info) {
        if ($username) {
            if ($bind_info['username'] != $username) {
                $bind_info['username'] = $username;
                $changed = true;
            }
        }
        if ($nickname) {
            if ($bind_info['nickname'] != $nickname) {
                $bind_info['nickname'] = $nickname;
                $changed = true;
            }
        }
    } else {
        $bind_info = array();
        $bind_info['username'] = $username;
        $bind_info['nickname'] = $nickname;
        $changed = true;
    }
    $mem = api_open_mmc();
    if (!$changed) {
        omp_trace('not changed');
        //绑定信息没有改变的时候,确定绑定显示列表是正常输出的
        if ($binded_list = $mem->ns_get(NS_BINDED_CAPTION, $device)) {
            if (in_array($cap_view, $binded_list)) {
                omp_trace($cap_view . ' in binded_list');
                omp_trace($binded_list);
                return return_bind(array('status' => 'ok'));
            } else {
                omp_trace('but binbed capview missed');
            }
        } else {
            omp_trace('but binbed capview error');
        }
    }
    /********************************
    		记录绑定的账户
    	********************************/
    //1、收录绑定信息
    if (mmc_array_set($ns_bind_list, $device, $bind_info) > 0) {
        $caption && mmc_array_caption($ns_bind_list, $caption);
        omp_trace('update caption: ' . $caption);
    }
    //2、制作绑定账户的标识列表
    $new_key = md5($caption . '@' . $platform . '@' . $device);
    $new_val = md5($username . '(' . $nickname . ')@' . $device);
    $changed = false;
    if ($binded_list = $mem->ns_get(NS_BINDED_LIST, $device)) {
        if ($binded_list[$new_key] !== $new_val) {
            $binded_list[$new_key] = $new_val;
            $changed = true;
        }
    } else {
        $binded_list[$new_key] = $new_val;
        $changed = true;
    }
    //更新绑定账户标记列表
    if ($changed) {
        $mem->ns_set(NS_BINDED_LIST, $device, $binded_list);
        omp_trace('update bind md5 info: ' . json_encode($binded_list));
    }
    //3、制作绑定账户显示列表
    if ($bind_account = $mem->ns_get(NS_BINDED_CAPTION, $device)) {
        if (!in_array($cap_view, $bind_account)) {
            $bind_account[] = $cap_view;
            $mem->ns_set(NS_BINDED_CAPTION, $device, $bind_account);
            omp_trace('set account info ok: ' . json_encode($bind_account));
        }
    } else {
        $mem->ns_set(NS_BINDED_CAPTION, $device, array($cap_view));
        omp_trace('set 1st account info ok: ' . $cap_view);
    }
    /********************************
    	异步通知第三方代码
    	********************************/
    $bind_info['device'] = $device;
    $bind_info['platform'] = $platform;
    $bind_info['caption'] = $caption;
    counter(COUNT_ON_BINDING);
    call_async_php('/on_account_binding.php', $bind_info);
    return return_bind(array('status' => 'ok'));
}
Example #3
0
function mmc_array_all_cache($name)
{
    $list = mmc_array_all($name);
    //清理异常记录
    foreach ($list as $key => &$value) {
        if (@$value['name'] === '') {
            mmc_array_del($name, $key);
            loglocal('del ' . $key);
            loglocal($value);
            unset($list[$key]);
        }
        if (array_key_exists('finish_time', $value)) {
            $finish_time = trans_time($value['finish_time']);
            if (time() >= $finish_time) {
                $value['status'] = 'timeout';
                mmc_array_set($name, $key, $value);
            }
        }
    }
    $file_name = get_cached_filename($name);
    if (count($list) === 0) {
        if (file_exists($file_name)) {
            $list = unserialize(file_get_contents($file_name));
            if (empty($list)) {
                return array();
            }
        } else {
            return array();
        }
        mmc_array_clear($name);
        foreach ($list as $key => $value) {
            $res = mmc_array_set($name, $key, $value);
        }
    } else {
        file_put_contents($file_name, serialize($list));
    }
    return $list;
}