function drupalchat_poll() { global $user; $initial_time = time(); if($_POST['drupalchat_last_timestamp'] > 0) { $last_timestamp = check_plain($_POST['drupalchat_last_timestamp']); } else { $last_timestamp = $initial_time; } $buddylist = _drupalchat_buddylist($user->uid); $buddylist_online_old = _drupalchat_buddylist_online($buddylist); $polling_method = variable_get('drupalchat_polling_method', DRUPALCHAT_LONGPOLL); if ($polling_method == DRUPALCHAT_AJAX) { $messages = db_query('SELECT u.name, m.uid1, m.uid2, m.message, m.timestamp FROM {drupalchat_msg} m INNER JOIN {users} u ON m.uid1 = u.uid WHERE m.uid2 = %d AND m.timestamp > %d ORDER BY m.timestamp ASC', $user->uid, $last_timestamp); _drupalchat_touch_user($user->uid); module_invoke_all('drupalchat_ajaxpoll'); // AJAX poll hook } elseif ($polling_method == DRUPALCHAT_LONGPOLL) { do { sleep(3); $checkUnlog="SELECT timestamp FROM sessions WHERE sid='$user->sid' AND uid =0"; $result=db_query($checkUnlog); $filas = db_affected_rows($result); if($filas!=0){ $user->uid=0; exit(1); } $buddylist_online = _drupalchat_buddylist_online($buddylist); $message_count = db_result(db_query('SELECT COUNT(*) FROM {drupalchat_msg} m INNER JOIN {users} u ON m.uid1 = u.uid WHERE m.uid2 = %d AND m.timestamp > %d', $user->uid, $last_timestamp)); _drupalchat_touch_user($user->uid); module_invoke_all('drupalchat_longpoll'); // Long poll hook } while(((time() - $initial_time) < (ini_get('max_execution_time') - 5)) && ($message_count == 0) && (_drupalchat_buddylist_diff($buddylist_online_old, $buddylist_online))); } $json['messages'] = array(); if ($message_count > 0) { $messages = db_query('SELECT u.name, m.uid1, m.uid2, m.message, m.timestamp FROM {drupalchat_msg} m INNER JOIN {users} u ON m.uid1 = u.uid WHERE m.uid2 = %d AND m.timestamp > %d ORDER BY m.timestamp ASC', $user->uid, $last_timestamp); while ($message = db_fetch_object($messages)) { $json['messages'][] = array('message' => $message->message, 'timestamp' => date("H:i", $message->timestamp), 'uid1' => $message->uid1, 'name' => $message->name); if($message->timestamp > $last_timestamp) { $last_timestamp = $message->timestamp; } } } $json['total_messages'] = $message_count; $json['last_timestamp'] = $last_timestamp; $json['buddylist'] = $buddylist_online ? $buddylist_online : $buddylist_online_old; drupal_json($json); }