CODER
Новичок
Проблема в IRC Клиенте для web. (SmartIRC)
Здравствуйте. Я пишу IRC клиент с web интерфейсом используя класс SmartIRC и библиотеку Sajax. Весь чат находится на одной странице и по мере поступления данных от сервера выводит их на экран. (тект сообщений) Должен выводить точнее, но на практике пустота.
Вот код:
В файле main.php находится класс chat метод которого вызывает getText и передаёт полученое содержимое через JavaScript на страницу (исп. Sajax).
Когда я в offline и функция listen() класса SmartIRC не срабатывает (не вводит сценарий в цикл обработки команд сервера IRC) то содержимое переменой класса chat выводится нормально. Когда подключение есть, то страница находится в постояной загрузке (этого следовало ожидать), все html и JavaScript содержимое выведена путем использования flush функций (иначе бы я вообще ничего не увидел), но тот JavaScript код который должен брать и выводить данные, полученные от функции php - getText() не работает. Переменая из класса chat которую нужно выводить посредством $chat->getdata(); не пустует - проверял, записывая её содержимое в файл во время работы сценария. Как видно, я пробовал уже и отсылать заголовки на запрет кеширования, но не помогло. Возможно, проблема в том что JavaScript полноценно не запустится пока не загрузится полностью страница, что в данном случае совершится аж при разъединении с сервером IRC.
Здравствуйте. Я пишу IRC клиент с web интерфейсом используя класс SmartIRC и библиотеку Sajax. Весь чат находится на одной странице и по мере поступления данных от сервера выводит их на экран. (тект сообщений) Должен выводить точнее, но на практике пустота.
Вот код:
PHP:
<?php
// Отправленике заголовка против кеширования
if (preg_match("/Mozilla\/\d.+Compatible; MSIE/i", $HTTP_SERVER_VARS['HTTP_USER_AGENT']) && !preg_match("/Opera/i", $HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else {
header('Expires: 0');
header('Pragma: no-cache');
}
header('Content-type: text/html');
// ----------------------------------------
session_start();
require_once("bin/Sajax.php");
require_once("bin/SmartIRC.php");
require_once("bin/main.php");
$chat = &new chat();
$irc = &new Net_SmartIRC();
function getText()
{
global $chat;
$arr = $chat->getdata();
for($i=0; $i < count($arr); $i++) $text .= $arr[$i]."<br>";
$text = iconv("windows-1251", "UTF-8", $text);
if($text === false) $text = "Command not convert. Convert failed<br>";
return $text;
}
$sajax_request_type = "POST";
//Инициализируем Sajax
sajax_init();
//Экспортируем в JavaScript следующие PHP-функции
// $sajax_debug_mode = 1;
sajax_export("getText");
sajax_handle_client_request();
ob_start();
?>
<html>
<head>
<title>IRC Чат</title>
<script language="JavaScript" type="text/JavaScript">
<?php
sajax_show_javascript();
?>
<!--
//-->
</script>
<link href="media/first.css" rel="stylesheet" type="text/css">
</head>
<body onLoad="refresh();">
<!-- тело чата включающее в себя DIV в который через JavaScript выводятся сообщения -->
</body>
</html>
<?php
ob_flush();
flush();
//ob_end_flush();
$irc->setDebug(SMARTIRC_DEBUG_NONE);
$irc->setUseSockets(TRUE);
$irc->setChannelSyncing(TRUE);
// Привязка к событиям
$irc->registerActionhandler(SMARTIRC_TYPE_ALL, '.*', $chat, 'logall');
$irc->connect(......);
$irc->login(.........);
$irc->join(......);
$irc->listen();
$irc->disconnect();
ob_end_flush();
?>
Когда я в offline и функция listen() класса SmartIRC не срабатывает (не вводит сценарий в цикл обработки команд сервера IRC) то содержимое переменой класса chat выводится нормально. Когда подключение есть, то страница находится в постояной загрузке (этого следовало ожидать), все html и JavaScript содержимое выведена путем использования flush функций (иначе бы я вообще ничего не увидел), но тот JavaScript код который должен брать и выводить данные, полученные от функции php - getText() не работает. Переменая из класса chat которую нужно выводить посредством $chat->getdata(); не пустует - проверял, записывая её содержимое в файл во время работы сценария. Как видно, я пробовал уже и отсылать заголовки на запрет кеширования, но не помогло. Возможно, проблема в том что JavaScript полноценно не запустится пока не загрузится полностью страница, что в данном случае совершится аж при разъединении с сервером IRC.