ТЗ по управлению через параметры командной строки

Материал из Tkabber Wiki

Перейти к: навигация, поиск

В этой статье изложены общие, а местами и детальные, описания функции удалённого управления клиентом через командную строку, которую я хотел сделать, да все времени не хватало... а может, и не хватит никогда. А так хоть мысли не потеряются :) --20:20, 21 сентября 2007 (MSD)

Содержание

Зачем это нужно

Для двух вещей:

  • Выполнение XMPP-URI нужно, чтобы в браузеры можно было вписать tkabber -uri xmpp:<uri-команда> и все ссылки вида xmpp:tkabber@conference.jabber.ru?join заработали бы.
  • Управление PEP состояниями нужно, чтобы можно было указывать в плеерах что-то типа tkabber -pep "tune:artist=%a,album=%A" и было бы автоматическое счастье для любителей сообщать, что они слушают, и нелюбителей смотреть на этот спам. Реализовано в этом патче.

Межпроцессное взаимодействие

Для работы такой функции естественно нужно межпроцессное взаимодействие (IPC). Тикль предоставляет такую функцию: команда send. С помощью этой функции можно вызвать любую tcl-функцию в другом tcl-процессе и получить результат.

В файле xmppmime.tcl уже реализована похожая функциональность. Это реализация обработки xmpp-mime файлов.

Суть такого IPC в следующем. Есть принимающая и передающая сторона. Стандартно-запущенный Ткаббер — принимающая сторона. Когда Ткаббер запускается с параметром -mime, активизируется передающая функция, которая пытается найти запущенный Ткаббер и вызвать в нем обработку файла с помощью send. Если удается, то передающий процесс завершается. В случае ошибок или отсутствия принимающего процесса, выполняется обычный запуск Ткаббера и обработка mime-файла.

Несколько соединений, несколько клиентов

Трудность заключается в том, что если запущенно несколько ткабберов и в каждом несколько соединений, то неизвестно от чьего имени выполнять команду.

Предлагаю следующее решение: Перед выполнением команды передающая сторона собирает со всех запущенных экземпляров Ткаббера списки установленных соединений (JID-ы) и потом на основе правил, изложенных ниже, самостоятельно определяет, какое соединение надо использовать, и вызывает обработку только там, где надо. То есть, эта логика на передающей стороне.

Алгоритмы

Алгоритмы выполнения команд и установки PEP-состояний, как я их представляю, очень отличаются и поэтому они будут освещены в разных разделах. Для каждой из этих двух частей будут затронуты вопросы кодировок, обработки и экранирования параметров командной строки, что делать если запущенно несколько Ткабберов и в каждом — по нескольку соединений.

Выполнение XMPP-URI команд

Примеры URI:

  • xmpp:romeo@montague.net?message;subject=Test%20Message;body=Here%27s%20a%20test%20message -- отправить сообщение
  • xmpp:tkabber@conference.jabber.ru?join -- присоединиться к конференции
  • xmpp:romeo@montague.net?roster;name=Romeo%20Montague;group=Friends — диалог добавления пользователя в ростер

Полный список: http://www.xmpp.org/registrar/querytypes.html

Отличительные особенности алгоритма:

  • команда должна быть выполнена только с одного соединения, если их несколько
  • так как команда скорее всего будет инициирована самим пользователем, то возможны интерактивные диалоги с вопросами, например, с выбором JID-а

Экранирование

Экранирование в URI уже есть. Так как экранируются и пробелы, то URI скорее всего будет в одном параметре командной строки. Точнее, должен быть. Если пробелы не экранировались, то это проблемы на вызывающей стороне — пусть берут в кавычки.

Кодировки

Заэкранированный текст (например поле subject=....) может содержать текст в любой кодировке и зависит это, получается, от сайта, на котором была размещена ссылка. Это проблема, которую пока не знаю как решить. Возможно, браузер может автоматом все перекодировать в utf-8? (!) Сделать: проверить

Несколько соединений

Так как команда должна быть выполнена только с одного соединения, то предлагаю следующие варианты:

  • Выбор соединения. Передающая сторона собирает список соединений со всех экземпляров Ткаббера, затем предлагает пользователю выбрать.
  • Список приоритетности. В параметрах командной строки пользователь указывает список JID-ов в порядке убывания приоритетности. Команда выполняется от имени первого JID-а из списка, который будет найден. Если не найден, то или выход с ошибкой или первый вариант с диалогом. Скорее всего выход с ошибкой, так как, если пользователь решил использовать список приоритетности, он явно не хотел никаких диалогов.
  • По-умолчанию — первый вариант с диалогом.

Управление PEP-статусами

Отличительные особенности:

  • несколько исполнителей — поменять PEP-статус могут несколько соединений сразу
  • так как изменение PEP-статуса будет происходить автоматически, то важно отсутствие вопросов, диалогов и вообще какой либо деятельности, требующей внимания пользователя.

Экранирование

Кодировки

Несколько соединений

См. также

Личные инструменты