OWC/1 --------------------------------------------------------------------- 1. ПОДКЛЮЧЕНИЕ сервер: chat.old-web.com, порт: 4225 2. ФОРМАТ СТРОК Одна команда это одна строка текста. Строка заканчивается символом \n (клиент отправляет только \n, принимает и \n, и \r\n). Кодировка на проводе: UTF-8. Внутри клиент работает в cp1251, поэтому символы, которых нет в cp1251, и эмодзи превращаются в знак "?". Вид строки: КОМАНДА поле0поле1поле2 ... Команда отделяется от полей первым пробелом, сами поля друг от друга символом табуляции. Клиент читает не больше 8 полей, недостающие считает пустыми. Названия команд пишутся заглавными буквами. Лимиты клиента: буфер приема: 65535 байт (если за это время не пришел \n, буфер сбрасывается) длина принятой строки: до 4095 символов длина текста сообщения: до 1000 символов ники при сравнении (игнор-лист) регистр не учитывают 3. ВХОД В ЧАТ Порядок: клиент: HELLO OldWebChat1.0 клиент: LOGIN никпарольцвет сервер: HELLO имя_сервераверсия сервер: WELCOME никрольназвание_чатаmotd Цвет это строка вида #RRGGBB, по умолчанию #000080. Если сервер не прислал WELCOME в течение 15 секунд, клиент пишет, что сервер говорит не по протоколу OWC/1, и сохраняет все полученные данные в файл. Гость: ник guest, пароль пустой. Вход гостей включается настройкой guest_allowed. Логин и пароль общие с почтой email.old-web.com (адрес вида логин@old-web.com). Восстановление пароля: http://email.old-web.com/forgot.php После входа клиент отправляет JOIN Главная, USERS и ROOMS. 4. РЕГИСТРАЦИЯ клиент: REG логинпарольсекретный_вопросответ сервер: OK REG сервер: ERR кодтекст Проверки на стороне клиента: логин 3-20 символов: латиница, цифры, точка, дефис, подчеркивание пароль не короче 6 символов секретный вопрос и ответ обязательны Варианты секретного вопроса в клиенте: любимая книга, девичья фамилия матери, кличка первого питомца, любимый фильм, город детства, свой вопрос. Коды ошибок, которые различает клиент: 401, 409, 423, 503. 401 неверный логин или пароль, 409 логин или ник занят, 423 чат закрыт или доступ заблокирован, 503 сервис недоступен. 5. КОМАНДЫ КЛИЕНТА (клиент -> сервер) MSG текст обычное сообщение в комнату ME текст действие, команда /me PM никтекст приватное сообщение, команда /pm ник текст JOIN комната войти в комнату, команда /join CREATE комнатапараметр создать комнату, команда /create. Назначение второго поля неизвестно, клиент отправляет его пустым. STATUS текст сменить статус, команда /status TOPIC текст сменить тему комнаты, команда /topic KICK никпричина выгнать из чата (модератор или администратор) BAN никминутыпричина забанить на указанное число минут UNBAN ник снять бан MOD ник UNMOD ник назначить или снять модератора комнаты ROOMDEL комната удалить комнату, все ее участники переводятся в Главную ROOMS запросить список комнат USERS запросить список людей в комнате COLOR #RRGGBB сменить цвет ника PING число проверка связи, в число клиент кладет GetTickCount(). Сервер должен вернуть то же число в PONG. QUIT причина выйти из чата SETCFG ключзначение изменить настройку чата (администратор), ключи в разделе 7 BANNERS запросить список баннеров BANNERADD urlпараметрвес добавить баннер. Назначение второго поля неизвестно. BANNERDEL номер удалить баннер BANNERTOGGLE номер0 или 1 выключить или включить баннер Только на стороне клиента (на сервер не отправляются): /ignore ник добавить ник в игнор или убрать из него /clear очистить окно /help справка по командам Список команд, который клиент показывает пользователю: /pm ник текст, /me текст, /join комната, /create комната, /status текст, /topic текст, /ignore ник, /kick ник причина, /ban ник минуты, /unban ник, /rooms, /clear 6. СООБЩЕНИЯ СЕРВЕРА (сервер -> клиент) HELLO имя_сервераверсия ответ на приветствие, клиент пишет "Сервер: имя (версия)" WELCOME никрольназваниеmotd вход выполнен. Роли: admin, модератор комнаты, обычный пользователь, guest. MSG времяникцветтекст сообщение в комнате. Время в формате ЧЧ:ММ:СС. Сообщения от ников из игнор-листа клиент не показывает. PM времяот_когоцветтекст входящее приватное сообщение, показывается как [приват от ник] PMSENT времякомутекст подтверждение отправленного привата, показывается как [приват для ник] SYS времятекст системное сообщение USERLIST комната USER никцветстатусроль USEREND список людей: начало, по одной строке USER на человека, конец JOIN ник PART ник человек вошел в комнату или вышел из нее STATUS никстатустекст смена статуса. Статусы: online, away, busy, sleep, а также "кушаю" и "не беспокоить". TOPIC ктотекст новая тема, клиент пишет "Топик изменил кто: текст" ROOMLIST ROOM названиечисло_людей... ROOMEND список комнат: начало, по строке ROOM на комнату, конец CFG ключзначение CFGEND настройки чата, ключи в разделе 7 BANNER url BANNERLIST BANNERITEM номерurlвесвключен BANNEREND текущий баннер и список баннеров для панели администратора PONG число ответ на PING с тем же числом, лаг считается как разница с текущим временем OK команда подтверждение. Команды: REG, SETCFG, BANNERADD, BANNERDEL, BANNERTOGGLE ERR кодтекст ошибка, клиент пишет "Ошибка код: текст" KICKED причина клиента выгнали, соединение закрывается BANNED до_какого_временипричина клиент забанен, соединение закрывается NOTICE текст объявление для всех, клиент пишет "ОБЪЯВЛЕНИЕ: текст" Любая другая команда: клиент пишет "неизвестная команда сервера". 7. НАСТРОЙКИ ЧАТА (SETCFG и CFG) chat_title название чата motd приветствие при входе color_bg цвет фона окна чата color_text цвет обычного текста color_sys цвет системных сообщений color_pm цвет приватных сообщений color_panel цвет панели banner_rotate_sec как часто менять баннер, секунды room_ttl_days через сколько дней удаляются пустые комнаты max_msg_len максимальная длина сообщения flood_sec антифлуд, секунды между сообщениями guest_allowed пускать гостей chat_closed чат закрыт Цвета по умолчанию: фон #FFFFFF, текст #000000, системные #008000, приват #800080, панель #9999CC. Панель администратора открывается для администраторов и модераторов комнаты. Модератору доступна только модерация. 8. БАННЕРЫ Картинку баннера клиент скачивает отдельным запросом: GET путь HTTP/1.0 Host: хост User-Agent: OldWebChat/1.0 Connection: close Требования к ссылке: только http:// (https не поддерживается) редиректы 301 и 302 не обрабатываются, нужна прямая ссылка на файл форматы: GIF, JPG, PNG, BMP размер баннера в окне: 472 на 61