Как водится, первая публикация на "ВПР" о создании простого чата.
Кажется, любой ресурс может похвастаться подобной статейкой.
Давайте по теме, чат на Flash - это очень просто.
Для начала определимся с местом для тестирования наших PHP-скриптов. Если
у вас на машине стоит Аппач - проблем не возникает; если вы имеете хостинг
и доступ по FTP к нему - проблемм тоже нет никаких(PHP-кода всего - ничего...);
если у вас нет ни того ни другого, - можно попользоваться моими скриптами (до
поры, до времени...).
Что ж, приступим...
Схема работы чата такова: пользователь грузит чат. Загружаются последние
... ну пусть 50 сообщений, вводит имя, пишет сообщение, отсылает. Серверный
скрипт получает данные, дописывает в файл. Каждые ... 3 сек., например,
Flash теребит еще один скрипт на сервере, который считывает файл, и возвращает
в понятном для Flash формате последних 50 сообщений.
Теперь более предметно.
Создаем мув.., ну пусть 250х350. Вставляем TextFields(3 шт.), 2 из которых
- Input text, а последний - Dinamic text. Скомпонуем, как показано на рисунке.
Верхнее поле служит для ввода ника (в поле Instance name для него введем:
user),
среднее - для сообщения (в поле Instance name для него введем: message,
в поле Vars: mes).
Добавим еще рядом кнопочку "послать".
Нижнее поле - для вывода, причем самое последнее сообщение выводится вверху,
вытесняя предидущие (для него включим опцию "selectible" и в поле
Instance name введем: chat_text , в поле Vars: _root.chat).
Теперь Action Script для первого кадра:
//создаем объект, чтоб грузить потом контент var c = new LoadVars(); /*каждые 3 сек вызываем функцию LoadMessage (обратите внимание: имя ф-ции без скобок). Задайте периодичность обновления в милисек.*/ setInterval(LoadMessage, 3000);
/*функция передает текст в поле вывода
сообщений из глобальной пременной _root.chat*/
function showValues() { _root.chat="";//обнуляем _root.chat = this.chat_from;//добавляем } /*функция теребит серверный скрипт, чтоб он ей передал данные*/
function LoadMessage() {
//сдесь укажите полный путь к скриптам
c.load("http://localhost/from.php"); c.onLoad = showValues;
}
Надеюсь - все ясно?
Интервал обновлений - по вашему усмотрению. Если желаете чтобы при появлении
нового сообщения раздавался звуковой сигнал, предварительно залинковав какой-либо
звук в библиотеке символов под именем "beep", перепешите
код так:
//создаем
объект, чтоб грузить потом контент
var c = new LoadVars();
new_mes = new Sound();
new_mes.attachSound("beep");
/*каждые 3 сек вызываем функцию LoadMessage
(обратите внимание: имя ф-ции без скобок).
Задайте периодичность обновления в милисек.*/
setInterval(LoadMessage, 3000);
/*функция передает текст в поле вывода
сообщений из глобальной пременной _root.chat*/
function showValues() {
//если что-то изменилось - пищим!
if (_root.chat<>this.chat_from) {
new_mes.start();
}
_root.chat = "";//обнуляем
_root.chat = this.chat_from;//добавляем
}
/*функция теребит серверный скрипт, чтоб
он ей передал данные*/
function LoadMessage() {
//сдесь укажите полный путь к скриптам
c.load("http://localhost/from.php");
c.onLoad = showValues;
}
Во Flash-части осталось разобраться только с кнопкой. Итак, скрипт для кнопки
"послать":
//если
кликаем или топим Ентер
on (press, keyPress "<Enter>") {
//если поля для ввода не пусты
if (_root.user.text<>"" and message.text<>"")
{
//складываем строку <<ник>>:
сообщение
_root.message_bottom="<<"+_root.user.text+">>:"+message.text;
//обнуляем поле ввода сообщения, дабы
предотвратить дубль
message.text = "";
//отсылаем значение переменной _root.message_bottom
loadVariablesNum("http://localhost/to.php", 0, "POST");
}
}
URL в листинге предусматривает, что РНР-скрипты находятся в корне локального
веб-сервера.
Теперь разберемся со скриптами серверными.
Создайте текстовый файл пд именем chat.dat, - в нем будут храниться
наши сообщения в построчном виде. Создайте еще один: from.php и скопируйте
этот код:
<?php
//файловая переменная
$arrText=file("chat.dat");
$chat="";
//цикл. в переменную $chat_from впихиваем
50 сообщений
for ($i=count($arrText); $i>count($arrText)-50; $i--) {
$arrText[$i]=trim($arrText[$i]);
$chat_from=$chat_from.$arrText[$i]."\n";
}
//в виде "переменная"="значение"
отсылаем во Флаш всю эту
//канитель посредством глобальной переменной chat_from
echo "chat_from=".$chat_from;
?>
Теперь еще один, который будет принимать данные - to.php. Вставьте
в него следующее:
<?
//открываем файл на запись
$fp = fopen("chat.dat", "a");
//message_bottom - переменная из Флаш
if ($message_bottom<>"") {
//обрезаем ненужные символы(перевод строки,
палочки всякие)
$message_bottom=trim($message_bottom);
//добавляем в конец системное время
$message_bottom=$message_bottom." (".date("H
: i").")\n";
//пишем в файл
fwrite($fp, "$message_bottom"); }
fclose($fp);
?>
Сохраните эти три файла в одной директории вашего веб-сервера.Если такой
возможности нет, - вот пути к обеим РНР-скриптам для тестирования: http://users.g.com.ua/~set/chat/script/from.php
http://users.g.com.ua/~set/chat/script/to.php
Во Flash-скриптах точно укажите пути к соответствующим файлам.