материалы :: чат, чтобы не молчать
 
-------------------------
>DHTML лаборатория
-------------------------
>Новости
Архив (8.5.2003)
Архив (18.4.2003)
Архив (4.4.2003)
Архив (24.3.2003)
Архив (7.3.2003)
Архив (18.2.2003)
Архив (4.2.2003)
Архив (21.1.2003)
Архив (6.1.2003)
Архив (23.12.2002)
-------------------------
>Лаборатория
Лабиринт
Scorch
Машинка
Пуповина
Соты
Мост
Кривые
С Новым Годом!
Снежок
Рыбки вернулись
Рыбки
Аркада
Микромашинка
-------------------------
>Материалы
Прелоадинг. Часть 1.
Физмат. Часть 1.
Календарь
Чат, чтоб не молчать
-------------------------
>Ссылки
VM Studio
Флэш Потрошитель
Flasher.ru
Ivan Dembicki
actionscript.org
junioronline
bit-101
flashcomponents
...
-------------------------

-------------------------
>Контакты
>Загрузить Flash
>Translate

>Поиск на сайте


-------------------------
Хостинг от UkrHosting
 
Как водится, первая публикация на "ВПР" о создании простого чата. Кажется, любой ресурс может похвастаться подобной статейкой.
Давайте по теме, чат на 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-скриптах точно укажите пути к соответствующим файлам.

Пример: Вертичат
Желаю удачи.

Скачать исходник: chat.zip

Материал подготовил: syoPic