![](https://shpirat.net/wp-content/uploads/2018/07/2018-07-08_13-55-40-863x198.png)
Во времена службы в армии, был это 2013 год, начал я чатик тогда делать. Не помню, для чего и почему, но помню, что было интересно и увлекательно его делать. Оно и понятно! Когда сидишь и никуда не можешь уйти, когда свобода ограничена, мозг начинает из того, что есть, придумывать себе задания, чтоб не скучать. А задание это было, кстати, довольно крутым 🙂
Даже позже, когда уже закончилась служба в армии, часто вспоминал то время, как продуктивно получалось тогда что-то делать, потому что не было никаких отвлекающих факторов (ну, почти. Были ещё основные задания тоже, конечно же), и деться никуда не можешь, и люди не отвлекают. Плюс режим и распорядок дня тоже делали своё хорошее дело 🙂
Даже мысли потом бывали, что было бы круто сделать армию чисто для программистов, где есть и распорядок дня, и физическая подготовка (это тоже важно для мозгов), и в остальное время сидишь и пилишь код! Это было бы круто!
Но что-то я немножко от темы отступил, слишком длинное предисловие получилось…
Так вот! Чатик ещё не доделан до конца до сих пор, но пользоваться им уже можно, потому что основной функционал уже присутствует и работает, а именно:
- выбор ника и его регистрация паролем (чтоб другие не могли его использовать)
- общение в комнатах (как каналы в IRC)
- пароль на комнату (вход будет только по этому паролю, а кто комнату создал, тот и владелец, он сможет пароль сменить)
- комнаты размещаются во вкладках, которые, в свою очередь, являются дочерними окнами главного окна и располагаются внутри него
- возможность общаться приватно (с указанием причины или без, но другой пользователь должен позволить или отказать в запросе на приват)
- возможность менять фон главного окна (градиент, текстура, рисунок). Не знаю, зачем это, но да ладно 😀
- статусы! Да, есть там статусы, типа «на месте», «занят», «отошёл» и возможность текст статуса установить. Статусы отображаются в списке пользователей комнаты
- можно вписать информацию о себе (только если ник зареган), которую могут посмотреть другие пользователи. Там базовая инфа: ФИО, email, город (вроде), плюс просто поле для ввода любой другой информации о себе
- трей-иконка! (а куда ж без неё). При входящих сообщениях значок меняется на конвертик. Если окно чата не свёрнуто в трей, но при этом не в фокусе, то кнопка на панели задач мигает при событиях или сообщениях
- оповещения о наборе текста тоже есть. Отображаются в списке пользователей, прям как в старых ICQ-клиентов для телефонов с J2Me ))
- поддержка некоторых BB-кодов. Можно немножко отформатировать текст (жирный, курсив, чёркнутый, имя шрифта и размер сменить и цвет)
- поддержка консольных команд и горячих клавиш. Например, можно нажать на кнопку на панельке или в меню, а можно нажать Ctrl+J и ввести имя комнаты, в которую надо зайти, либо набрать в поле ввода сообщений команду /join #room_name. И всё это для того, чтобы войти в комнату! Надо же! )
- есть что-то вроде файлового менеджера, но он вообще не доделан, но там есть виртуальные папки users и rooms, в которых можно посмотреть текущих подключенных к серверу пользователей и их IP адреса (ай-ай-ай!!!), а также посмотреть текущие активные комнаты и количество пользователей в них. Выглядит это вот так (нужно обратить внимание на «размер» комнат):
- возможность работы через разные типы прокси (http, socks4, socks5 с авторизацией или без)
- возможность работы по SSL, но эта штука работает коряво и я сам не понимаю и не помню, как тогда сделал, что на одном порту всё висит и есть возможность подключаться и по SSL, и без него… ) Какая-то магия или костыли ))
- возможность сохранять переписки из чатов в обычный текст или как RTF-файл (с сохранением форматирования текста)
- небольшая консолька (не доделано ещё) для ввода команд отдельно, без окна чата
- возможность от клиента к клиенту пробрасывать порты (работает через сервер, поэтому NAT не страшен). Это вообще дикая штука! Работает оно так: слушается локальный порт у одного пользователя, и все обращения к этому порту прозрачно через чат, через сервер пробрасываются до другого клиента, до хоста и порта, который указан в настройках подключения моста. Это значит, что можно, например, от одного клиента подключиться напрямую (прозрачно, через чат и сервер) к сервису другого клиента чата, например, к удалённому рабочему столу, либо к VNC, либо к роутеру (чтоб, например, помочь что-то настроить), или ещё к чему угодно! И это круто! И это всё тоже может работать через прокси, который настроен в настройках чата.
- возможность при подключении к серверу заходить в определённые комнаты (задаётся в настройках). По умолчанию клиенты заходят в комнату #main.
- как уже, думаю, стало понятно, чат имеет клиент-серверную архитектуру. Где-нибудь нужно запустить сервер, указать ему порт (в файле конфигов), открыть этот порт наружу или.. ну, в общем, позаботиться о том, чтобы к этому серверу могли извне подключаться. А клиентам нужно будет уже в настройках задать тот самый адрес и порт, и всё будет работать 🙂 Можно, конечно, и в локалке использовать без проблем, никто этому не мешает, работать тоже будет!
Ну, если кратко, то вот это и был основной список возможностей данного чата.
Вот немного скриншотов его работы:
Автодополнение пока что работает только в консольке, которая отдельно. А сама консолька ничего не выводит — не доделано это. Но автодополнения нет в поле для ввода текста. Но это всё ещё впереди! Зато в текстовом поле для ввода сообщение можно нажимать Ctrl+Стрелка_Вверх или Ctrl+Стрелка_Вниз, чтобы прокручивать историю сообщений.
В консольке можно команды вводить просто, а в поле для ввода сообщений команды нужно начинать со слеша (/).
Поддерживаются следующие команды:
- info <message>, [title] — просто отобразить информационное окошко сообщения с текстом message и заголовком title
- exit, quit — завершить чат, но с запросом подтверждения
- exit!, quit! — завершить чат без запроса
- join <#room_name> — войти в комнату с названием #room_name
- part [#room_name] — выйти из текущей комнаты, но если указано имя комнаты, то выйти из той, указанной комнаты
- connect — подключиться к серверу
- disconnect — отключиться от сервера
- nick <nickname> — установить себе новый ник nickname
- registernick, register <пароль> <email> — зарегистрировать текущий ник, задать указанный пароль и email
- chpass, changepass <old_password> <new_password> — поменять пароль текущего пользователя (ника). Нужно указать старый пароль и новый
- regroom, roomregister [#room_name] <password> — зарегистрировать комнату, задать ей пароль. Сработает тогда, когда регистрировать её будет пользователь, который её создал. Если не указать #room_name, то будет произведена попытка зарегистрировать текущую активную комнату, из которой эта команда была набрана
- chroompass, changeroompass [#room_name] <old_password> <new_password> — сменить пароль комнаты. Это разрешено только владельцу комнаты. Если не указать #room_name, то будет использоваться текущая активная комната.
- query <nickname> [reason] — позвать указанного пользователя в приват. Можно указать причину, тогда она отобразится у того пользователя при запросе на приват
- msg <nickname> <message> — послать указанному пользователю приватное сообщение (из любой комнаты). Сработает только тогда, когда до этого был открыт приват с этим пользователем, но изначально оно работало и без запроса. Возможно, есть смысл вернуть это )
- clear — очистить текущее окошко переписки
- clear_history — очистить историю введённых сообщений и команд для текущего окошка
- close — закрыть текущую вкладку комнаты или привата
- echo <любой текст> — вывести в окошко переписки введённый текст
Вы, конечно, можете сказать: «Камон! Какой нафиг чат?! Сейчас 2018 год на дворе, соц-сети существуют, куча разных мессенджеров, зачем ещё что-то?!». А я вам скажу, что это было интересно делать, да и иметь свой собственный чат, в котором ты ни от кого не зависишь и можешь делать всё так, как нравится — это в любом случае круто! Да и всё же, с приходом разных этих мессенджеров и соц-сетей с кучей эмоджи и стикеров, а также голосовых сообщений и всего такого, мне кажется, немного потерялся этот особый дух текстовых сообщений (не знаю, как его правильно назвать). И конечно, я не агитирую за переход на этот чат, просто нашёл свой старый проект, снова его запустил, и даже используем тут с некоторыми людьми, но это не означает, что я против соц-сетей и других мессенджеров )
Просто это как-то помогает немного вернуть ту атмосферу, и нам это нравится 😉
Если кому интересно, то сейчас у меня запущен чатный сервер, вот настройки для подключения, кто хочет опробовать:
Адрес: pc.karamush.ru
Порт: 25366
На текущий момент (на 08.07.018) пока всё ещё запущено и работает, в ближайшее время отключать не собираюсь.
[UPD 29.03.019]: из-за происков провайдера теперь нет возможности держать у себя сервер, т.к. не всегда выдаётся белый IP-адрес, так что скачивайте и пробуйте, всё прекрасно работает (из того, что уже сделано 🙂 ).
Единственный минус — всё это только под винду, написано на Delphi 7 с использованием некоторых дополнительных визуальных компонентов (всё будет в архиве). А сетевая часть использует библиотечку Synapse.
Кстати-кстати! Пока я этот чат писал тогда, в армии, я вёл текстовый документ с логом разработки develog.txt. Туда я записывал свои мысли, эксперименты, текущий прогресс, результаты. В общем, когда сейчас вспомнил про этот чатик, решил всчитнуть этот девелог, и там так интересно было! Очень прикольное ощущение, когда читаешь то, что я там хотел сделать, а теперь оно всё есть и работает! А некоторые решения были не очень хорошими, поэтому об этом там тоже написано, и это убрано и не используется. В общем, довольно интересное чтиво. Криминальное 🙂
А вот и исходнички и отдельно бинарники!
Вот архив с клиентом и сервером, а также необходимыми для работы SSL библиотеками, которые нужно поместить в папку программы или в системную папку:
ichat_binaries.zip
А вот тут архив со всеми исходниками, develog-ом, а также необходимыми компонентами и либами (надеюсь, всё, что нужно, поместил):
ichat_sources.zip
А вот тут чисто клиентское приложение:
http://cdn.shpirat.net/exe/iChat.exe
[UPD 29.03.019]: по просьбе одного из пользователей сделал небольшую доработку, так что теперь можно просматривать список комнат не только в файловом менеджере, но из главного окошка, из меню «Комнаты->Список комнат». Так что теперь отдельное окошко со списком комнат, с отображением некоторой информации о них, с возможностью обновить этот список и войти в любую выбранную комнату )
Выглядит это вот так:
![](https://shpirat.net/wp-content/uploads/2019/03/k5iYynAdcnI.jpg)
Скачать это обновление можно тут:
http://cdn.shpirat.net/zip/ichat_29.03.019_rooms_list.zip
Там просто обновлённые бинарники сервера и клиента, причём, сжатые UPX-ом зачем-то, для меньшего размера, хотя, в наше время быстрого интернета… Ну да ладно )
Надеюсь, было полезно и интересно! Если что, можете в комментариях писать, либо в ВК (если найдёте, хехе), если что-то вдруг будет не так или надо будет что-то добавить или исправить. )
Приятного использования! И не забывайте: сервер чата пока что запущен, так что можно опробовать 🙂
Скажите как программу сервер запусить на сайте хостинге или на удаленном компе. и как найти тот адрес что бы с клиента подключится к нему.
я протестил пока ток 127.0.0.1 все работает. а вот как не на своем компе держать сервак не понимаю
Для этого нужно либо порты открыть в своём роутере или что у вас там (при условии, что у вас есть белый IP, пусть и динамический).
Ну либо взять в аренду VPS сервер на Windows и там запустить сервер чата. Тогда будет работать 🙂
Увы, программа старая, и сервер можно запустить только на Windows системе. Хотя… может, через Wine получится и на линукс-сервере запустить…
Доброе время суток. Последние две ссылки в 2024 году не работают.