Проблема с синхронизацией будет. в FTP команды download/upload, и
большинство (все) текстовые редакторы не либо вообще не проверяют,
изменился ли файл на сервере, либо не позволяют слить изменения - либо
твои, либо чужие.
Поэтому правильный путь - это что-то вроде:
send_message($chat_message)
{
echo $chat_message >> /tmp/file
ncfpput $chat_message ftp://server/path/msg-`date`
}
refresh_chat_window()
{
for each (file, filetime) in `ncftpls ftp://server/path/` ; do
ncftpget ftp://server/path/$file
echo $file >> chat_window;
# Delete messages older than minute. Hopefully all clients have seen them
if ($filetime older than 1 minute) ; then
ncftprm $file
fi
done;
}
(синтаксис конечно неправильный, и соптимизировать можно, но идея думаю ясна)
Да ладно, не такой уж и бред.
одно сообщение -- один файл.
Самописанный клиент подкл. по фтп-протоколу, отслеживает добавление новых файлов на сервере и отображает их содержимое в одном окне ввиде дискуссии.
качество/удобство такого чата отдельный вопрос, но видимо админ у них там злой, все позакрывал и общедоступен только фтп-сервер.
Короче: пишите клиента -- это может быть даже простой шел-скрипт + lftp (mirror)
>не вижу причин не отслеживать изменения в отдельном файле...
по одному файлу на участника чата?
причины слишком очевидны: придется скачивать все измененные файлы (а они будут только расти в процессе дискуссии) и выдирать из них новые сообщения.
Вместо этого, достаточно скачать добавленные мелкие файлы (lftp /mirror), отсортировать по дате и выдать содержимое на экран.
да очень просто, перед началом записи просто проверять не успел ли кто модифицировать файл. Если успел - обновляем и дописуем в конец, не успел - пишем сразу.
> да очень просто, перед началом записи просто проверять не успел ли кто модифицировать файл. Если успел - обновляем и дописуем в конец, не успел - пишем сразу.
FTP протокол AFAK не имеет программы "дописания в конец". То есть придется скачать а потом залить обратно. Пока скачивал-заливал файл могут изменить и ты эти изменения потрешь
>но видимо админ у них там злой, все позакрывал и общедоступен только фтп-сервер.
Вот, человек сразу всё понял.
>Можно ещё чат через пинги сделать Пинги заблокированы.
>Короче: пишите клиента Ну так написать то можно, но этож время нужно. Можно попробовать сделать что-то типа irc-over-ftp. (чтобы в надцатый раз не реализовывать функциональность чата). Т.е. локальный irc сервер, который проставляется у каждого юзера, и транслирует irc протокол в ftp операции.
Чат через фтп это канешно жесть :) Но по-моему тебе проще будет без всяких irc-over-ftp взять любой чат и перенастроить его на 21-й порт, почти любой чат позволяет это делать.