vessi
идиоты xmpp4r phail разобрался, почему у xmpp4r проблемы с русским языком.
все оказалось до обидного просто. для парса используется REXML, которая по умолчанию кодировку использует ASCII.
REXML — библиотека системная, и патчить ее — ну фу-фу-фу.
сижу, ковыряю xmpp4r — меняю все REXML::Something.new(somebuffer) на REXML::Something.new(somebuffer, 'utf-8')
может, ошибся где?
vessi
Ruby Jabber xmpp4r котаны, а какие есть альтернативы xmpp4r? @beard, ты вроде как разбирался, можешь подсказать?
а то xmpp4r мне не очень по нраву — отваливается по непонятным причинам
beard
Ruby programming bot xmpp4r rumpy В продолжение #1478904 — на практике получено подтверждение умозрительных предположений. message_callback обрабатывается одним тредом. Подписки-отписки запускаются каждый раз новым тредом. При этом, вставшие в очередь мессаджи, блокируют обработку подписок.
beard
Ruby programming bot xmpp4r rumpy Победил activerecord. Соединения разблокируются и возвращаются в пул. С первым оказалось просто. Со вторым возникли новые вопросы. Выводы.. Недостаточное понимание логики message_callback. Создаётся впечатление, что они обрабатываются последовательно, в цикле, одним тредом. Подписки-отписки обрабатываются каждая новым тредом. Надо глубже ковырять xmpp4r.
Теперь ждать, когда вернутся авторы rumpy.
beard
Ruby programming bot xmpp4r rumpy Странное поведение activerecord. В процессе работы создаётся пять соединений с базой. Первое при запуске бота и синхронизации ростера и базы, далее главный поток останавливается и через него больше ничего не передаётся. Через второе обрабатываются сообщения (message_callback). Оставшиеся три формируют роунд-робин пул, который обрабатывает подписки-отписки. Как-то это непонятно и неправильно. Как разблокировать и вернуть в пул первые два? Чтобы использовались все равномерно.
beard
software Ruby bot xmpp4r В существующем виде, длительная операция обработки сообщения блокирует message_callback, новые сообщения принимаются (??) и обрабатываются. Ответы возвращаются пачкой, сразу после освобождения.
Нужно разделить процессы приёма, обработки и возврата ответов по разным потокам. Обработчики можно (нужно) запускать параллельно.
message_callback принимает и складывает во входную очередь, выбираем из входной очереди и запускаем обработчик, ответ класть в выходную очередь или сразу возвращать??
Наблюдаются пробелы в понимании областей видимости объектов.
beard
software Ruby bot xmpp4r Полнейший тупняк. Совершенно ничего полезное не нагугливается. Как из обработчика входящих сообщений посмотреть в ростер, чтобы узнать подписан ли юзверь??
beard
software Ruby Jabber bot xmpp4r Запилил нового бота... ну почти.. даже чуть-чуть работает. Умеет висеть в ростере. :) И даже знает несколько слов. После того, как нашёл документацию от библиотеки, дело пошло слегка легче. Всё равно нифига не понятно.
beard
Pidgin bot баги conference xmpp4r Наткнулся на странность. Пиджин, в конференциях, в которых запрещено видеть джид собеседников, отправляет приват на ресурс конфы (confa@server/nick). Здесь, вроде, всё логично и правильно. В конференциях, в которых джид видно или имеешь статус администратора, пиджин отправляет приват сразу на джид. Это кажется странным. Не могу понять, что это такое: бага или фича. Склоняюсь к тому, что это именно бага, потому что персональное сообщение конференс-боту не попадает в метод MUC::SimpleMUCClient.on_private_message (xmpp4r)