• Juick @vt надо в com.juick.xmpp перетаскивать XmppServer и убирать оттуда привязку к сокетам? Или пусть ServerStream будет дёргать listener?

Replies (27)

  • @ma1uta, Не надо, именно в нем как раз и сокеты
  • @vt, значит правильно делаю. На этой неделе постараюсь сделать merge-request. И дальше начну писать комментарии и тесты.
  • @ma1uta, ещё читаю спецификацию xmpp, без неё тяжело. :)
  • @ma1uta, Так задавай вопросы
  • @vt, в качестве ServerStream взял ConnectionIn и заменяю привязку к XmppServer на ConnectionListener.
  • @ma1uta, Ну да. Там вроде как оторвать ssl оставалось
  • @vt, там ещё есть вызов ServerDialBack, я его пока не трогал
  • @ma1uta, Ну да, его тоже надо оторвать, чтоб connectionlistener их создавал по событиям
  • @ma1uta, ещё у меня java главного мозга, хочется везде заменить все на геттеры/сеттеры :)
  • @vt, в итоге предполагается, что ClientStream — это client-server, ServerStream — server-server, ServerDialBack — это я так понял xep для авторизации. Для чего ServerComponentStream и ComponentStream?
  • @ma1uta, это транспорты же :) XEP-114
  • @ma1uta, Вообще, эта либа по сути не нужна, нужно по-хорошему переносить сервер и компонент-сервер в либу babbler, она гораздо более грамотнее написана, там наследуешь XmppSession и вперед
  • @vt, com.juick.xmpp это так сказать временное решение и я так где можно пользую бабблер
  • @vt, но если хочется поупражняться, то да, проще наверное на com.juick.xmpp тренироваться :) А может и нет, погляди babbler, вдруг это будет тебе быстрее
  • @vt, babbler выглядит более аккуратно и продуманно на первый взгляд.
  • @ma1uta, Ну естественно, его грамотный человек писал, а com.juick.xmpp писал угнич в детстве :)
  • @vt, ну, тогда попробую заменить com.juick.xmpp на babbler в juick-xmpp. Буду разлекаться. :)
  • @ma1uta, Ну и первый вопрос: зачем было сделано разделение на XmppServer, XmppConnection и JuickBot? Насколько я вижу XmppConnection по факту устанавливает соединение и перенаправляет все команды в бот. XmppServer служит для связи бота и com.juick.xmpp.
  • @ma1uta, Тут надо расписывать все сначала.
    Угнич начинал жуйк как простого жаббер-бота на перле, который как обычный бот, подключался клиентом к серверу с джидом juick@juick.com и обрабатывал сообщения.
    Потом понадобилась вебморда, и вот тут он начал лепить велосипед с квадратными колесами :) Ведь бот должен как-то узнавать, что кто-то запостил сообщение через веб, чтоб разослать уведомления. Вместо какой-то готовой шины сообщений он решил использовать все тот же жаббер (эта история покажет до чего доводит жаббер головного мозга). Теперь бот и вебморда стали подключаться к жаббер-серверу как компоненты с джидами bot.juick.com и web.juick.com, когда кто-то шлет сообщение через веб, то веб, после записи сообщения в базу, шлет копию этого сообщения на bot.juick.com.
    Далее, понадобилось рассылать так же пм-сообщения и соответственно сообщения снаружи на ma1uta@juick.com надо обработать как pm и уведомить об этом бота и веб. Т.к. угнич не осилил дописать в какой-то из существующих жаббер-серверов такую навороченную маршрутизацию сообщений, он решил встроить самодельный жаббер-сервер, который уже сам принимает s2s-соединения, обрабатывает и сообщения к juick@juick.com и к ma1uta@juick.com и ко всем остальным внешним пользователям и разруливает их между внутренними компонентами.
    Это дело он уже начал писать на джаве, как раз вот на этой com.juick.xmpp (на которой он когда-то пытался делать жаббер-клиентов на j2me и android). Т.к. он куда-то спешил, то сервер он накорябал чуть отдельно — если StreamClient не зависел от сокетов, ибо в j2me и остальной джаве сокеты создавались по-разному, то для сервера он быстро-быстро наговнякал ConnectionIn и ConnectionOut(тот что щас называется StreamDialback) с прибитыми гвоздями сокетами, только частично используя код из старой com.juick.xmpp.
    Параллельно продолжал работать старый бот на перле, а в JuickBot на джаве команды он успел перенести только частично, те команды, что JuickBot не знает — до сих пор пересылаются перл-боту (репа juick-legacy, лежит рядом с основной).
    То есть то, что ты сейчас видишь — XmppServer — обрабатывает s2s-соединения, отсюда влетают команды пользователей. XMPPConnection — это соединение джава-жаббер-бота с перл-жаббер-ботом, имеющее внутренний компонентный джид s2s.juick.com. Если JuickBot знает команду, он обрабатывает ее сам, и сам обратно шлет через XmppServer ответ. Если он не знает команду, то он ее через XMPPConnection шлет перл-боту, который в свою очередь после обработки команд шлет ответ через свой внутренний компонентный джид bot.juick.com на s2s.juick.com, которое если нужно шлется обратно пользователю :) Вроде ничего почти не забыл :D
    Это я написал упрощенно, на самом деле ботов с разными джидами было несколько, например был бот рассылающий почтовые уведомления, бот, принимающий файл-трансфер, апи-бот, вебсокет-бот, и т.д. и все они снаружи выглядели как один juick@juick.com, но разруливали незаметно сообщения внутри между собой. Я почти все уже переписал на джаву, но основного бота, обрабатывающего команды все еще не осилил допереписать, один он остался :) После переписывания же, можно значительно упростить этот пиздец и выбросить внутренний жаббер нахер вообще, оставив только отдельный компонент для принятия команд и рассылки уведомлений.
  • @vt, на самом деле ботов с разными джидами было несколько
    микросервисы!
  • @lurker, Угнич писал микросервисы до того как это стало мейнстримом, ага
  • @lurker, Лайк
  • @vt, это пиздец :) Тут надо не переезжать на babbler, а выкидывать к чертям потроха джаббер бота, оставив ему только функциональность принимать и отправлять сообщения в xmpp. Команды должны выполняться в неком ядре, а результат отдаваться обратно в "транспорты" (xmpp, telegram, twitter, facebook, websocket, vk, ...). В качестве шины можно взять какой-нибудь mq или вообще пока не заморачиваться этим, других задач полно.
  • @ma1uta, А в качестве s2s-сервера что использовать?
  • @vt, я думал, что babbler умеет в s2s. Что-то ещё брать не хочется (например, openfire), можно на базе babbler-а сделать. Надо подумать, нехватка знаний в xmpp сказывается.
  • @ma1uta, Вот connectionin и serverdialback его умеют, и если их причесать/перенести на бабблер, то будет что надо
  • @vt, как вариант, наверное да.