function handle_heartbeat_cmd($PARAMS) { /****************************************** 例外处理,一次心跳完成账户绑定,关键字搜集等 ******************************************/ //支持微信等不支持cookies的客户端,一次请求完成心跳和账户绑定 if (isset($PARAMS['plat'])) { handle_bind_account($PARAMS); } if (count($cmd_que = msg_queue())) { foreach ($cmd_que as $cmd_item) { if (empty($cmd_item)) { continue; } switch ($cmd_item['cmd']) { case 'bind': handle_bind_account($cmd_item); break; case 'kword': handle_bind_keyword($cmd_item); break; default: omp_trace('error cookie cmd: ' . json_encode($cmd_item)); } } } /****************************************** 组织一个更新的心跳包 ******************************************/ $url_obj = parse_url(@$_SERVER['HTTP_REFERER']); omp_trace('heartbeat: ' . @$url_obj['host'] . @$url_obj['path']); //omp_trace('ua: '.@$_SERVER['HTTP_USER_AGENT']); list($is_new, $device, $device_saved) = get_cookie_saved(); $device_param = @$PARAMS['device']; if ($device_param) { if ($device_param !== $device) { $device = $device_param; } } $result = array('device' => $device); omp_trace('device: ' . $device); $browser_save = array(); $browser_save['device'] = $device; $browser_save['ip_addr'] = $_SERVER['REMOTE_ADDR']; $browser_save['new_user'] = $is_new; $browser_save['ismobiledevice'] = $device_saved[0]; $browser_save['browser'] = $device_saved[1]; $browser_save['platform'] = $device_saved[2]; $browser_save['device_name'] = $device_saved[3]; $browser_save['region'] = get_region_city(); $browser_save['language'] = get_accept_language(); $browser_save['Visiting'] = @$_SERVER['HTTP_REFERER']; $browser_save['UserAgent'] = @$_SERVER['HTTP_USER_AGENT']; $browser_save['XRequestWith'] = @$_SERVER['HTTP_X_REQUESTED_WITH']; /****************************************** 检查看看该账户有没有绑定信息 客户端凭此判断是否提交bind账户操作 ******************************************/ $mem = api_open_mmc(); $browser_save['binded'] = false; if ($binded_list = $mem->ns_get(NS_BINDED_LIST, $device)) { $browser_save['binded'] = true; //获取保存的账户信息 if ($bind_account = $mem->ns_get(NS_BINDED_CAPTION, $device)) { $browser_save['bind_account'] = implode(';', $bind_account); $result['binded'] = $binded_list; } } omp_trace('get account: ' . @$browser_save['bind_account']); /****************************************** 更新心跳,维护在线列表 ******************************************/ $list_stat = mmc_array_set(NS_DEVICE_LIST, $device, $browser_save, CACHE_EXPIRE_SECONDS); if ($list_stat > 0) { if ($list_stat === 1) { require_once 'sched_list.php'; update_sched_tasks(); } $browser_save['new_visitor'] = true; } else { $browser_save['new_visitor'] = false; } omp_trace('update heartbeat'); /****************************************** 如果不需要返回消息,就此打住 ******************************************/ $bypass_msg = isset($PARAMS['nomsg']) ? $PARAMS['nomsg'] === 'true' : false; if ($bypass_msg) { if ($is_debug = is_debug_client()) { $result['trace'] = omp_trace(null); } $events = array(); $events['debug'] = $is_debug; $events['first_session'] = $browser_save['new_user']; $events['first_visit'] = $browser_save['new_visitor']; $result['events'] = $events; return jsonp($result); } /****************************************** 获取计划任务消息 ******************************************/ if ($items_result = get_popup_messages($browser_save, $session_pv, $global_pv)) { $result['sched_msg'] = $items_result; $browser_save['sched_msg'] = base64_encode(json_encode($items_result)); } omp_trace('sched messages'); /****************************************** 获取替换任务消息 ******************************************/ if ($replace_items = get_replace_messages($browser_save, $PARAMS)) { $result['replace_msg'] = $replace_items; $browser_save['replace_msg'] = base64_encode(json_encode($replace_items)); } omp_trace('replace messages'); /************************************* 获取异步消息 *************************************/ if ($cmdbox_list = $mem->ns_get(NS_HEARTBEAT_MESSAGE, $device)) { $cmdbox = array_shift($cmdbox_list); $result['async_msg'] = $cmdbox; $browser_save['async_msg'] = base64_encode(json_encode($cmdbox)); if (count($cmdbox_list) == 0) { $mem->ns_delete(NS_HEARTBEAT_MESSAGE, $device); } else { $mem->ns_set(NS_HEARTBEAT_MESSAGE, $device, $cmdbox_list, CACHE_EXPIRE_SECONDS); } } omp_trace('async messages'); /************************************* 输出结果 *************************************/ call_notifier($browser_save); omp_trace('call notifier'); if ($is_debug = is_debug_client()) { $result['trace'] = omp_trace(null); } $events = array(); $events['debug'] = $is_debug; $events['first_session'] = $browser_save['new_user']; $events['first_visit'] = $browser_save['new_visitor']; $events['gw_bind_time'] = time(); $events['gw_kword_time'] = time(); $events['session_pv'] = $session_pv; $events['global_pv'] = $global_pv; $result['events'] = $events; return jsonp($result); }
function handle_heartbeat_cmd() { global $CONFIGS, $DEVSAV, $PARAMS; /****************************************** 例外处理,一次心跳完成账户绑定,关键字搜集等 ******************************************/ proxied_cmd($PARAMS); /****************************************** 获取设备信息块 ******************************************/ omp_trace('---- update device params ----'); $result = []; $DEVSAV = update_device_saved($DEVSAV); push_keyword('kword_title'); if (!is_nomsg()) { /****************************************** 获取计划任务消息 ******************************************/ omp_trace('---- start popup messages ----'); if (@$CONFIGS['system']['is_popup_enabled'] === 'true') { if ($items_result = get_popup_messages()) { $result['sched_msg'] = $items_result; } } else { omp_trace('popup messages disabled'); } /****************************************** 获取替换任务消息 ******************************************/ omp_trace('---- start replace messages ----'); if (@$CONFIGS['system']['is_replace_enabled'] === 'true') { if ($replace_items = get_replace_messages()) { $result['replace_msg'] = $replace_items; } } else { omp_trace('replace messages disabled'); } /************************************* 获取异步消息 *************************************/ omp_trace('---- start async messages ----'); if (@$CONFIGS['system']['is_asyncmsg_enabled'] === 'true') { if ($cmdbox = shift_async_message($DEVSAV['device'])) { $result['async_msg'] = $cmdbox; } } else { omp_trace('async messages disabled'); } } /****************************************** 输出结果:返回该账户绑定情况 ******************************************/ omp_trace('get account: ' . implode(',', $DEVSAV['kword_account'])); $result['device'] = $DEVSAV['device']; $result['binded'] = array_key_exists('kword_account_md5', $DEVSAV) ? $DEVSAV['kword_account_md5'] : []; $result['events'] = gen_events($DEVSAV); $result['trace'] = omp_trace(null); return $result; }