The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Тематический каталог: Написание плагина для IRC-клиента X-Ch..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Тематический каталог: Написание плагина для IRC-клиента X-Ch..."  
Сообщение от auto_topic (??) on 13-Июн-05, 16:28 
Обсуждение статьи тематического каталога: Написание плагина для IRC-клиента X-Chat (plugin gcc)

Ссылка на текст статьи: https://www.opennet.ru/base/dev/xchat_write_plugin.txt.html

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от NeTxXx email(??) on 13-Июн-05, 16:28 
Еще хотелось бы добавить пару слов о принципе реализации списка пользователей.
Все делается очень просто.
Объявляем массив указателей на приведенную выше структуру:
static UDATA **u_list;
Также определяем переменную-счетчик пользователей
static uint u_count;

Далее пишем функцию инициализации списка:
void ulist_init(void) {
    u_count = 0; // обнуляем счетчик
    // выделяем память под один элемент типа UDATA*, т.е. указатель.
    // в большинстве случаев его размер равен 32-ум битам
    u_list = (PUDATA)malloc(sizeof(UDATA*)*1);
    memset(u_list,0,sizeof(UDATA*)*1); // заполняем память нулями
    return;
}

Соответственно, функция освобождения памяти (деинициализации):
void ulist_free(void) {
    uint i = 0;
    for (i=0;i<u_count;i++) { // поочередно освобождаем память
        if (u_list) free(u_list); // всех элементов списка (не забывая делать проверку на вшивость)
    }
    if (u_list) free(u_list); // освобождаем память самого списка
    return;
}

Новый элемент добавляется путем добавления в конец списка указателя на новый элемент.
Для этого нам необходимо увеличить размер самого списка ровно на sizeof(UDATA*):
void ulist_add(char *name, char *lastmsg, char *channel, uint r_count) {
    UDATA *pu = malloc(sizeof(UDATA)); // выделяем память под нового пользователя
    // далее заполняем все необходимые поля структуры
    strncpy(pu->u_name,name,sizeof(pu->u_name));
    strncpy(pu->u_lastmsg,lastmsg,sizeof(pu->u_lastmsg));
    strncpy(pu->u_channel,channel,sizeof(pu->u_channel));
    pu->u_rcounter = r_count;
    pu->u_thook = NULL;
    // присваиваем последнему элементу списка адрес структуры,
    // увеличивая после этого счетчик элементов
    u_list[u_count++] = pu;
    // увеличиваем размер списка. (new_size = sizeof(void*)*count)
    u_list = (PUDATA)realloc(u_list,sizeof(UDATA*)*u_count);
    return;
}

Еще нам понадобятся функции поиска и редактирования пользователя. Предлагаю написать их
самостоятельно, для того чтобы хоть чуточку поднапрячь ваш мозговой центр :)
Принцип этих функций довольно прост и очевиден.
Все же я поясню.. Для поиска пользователя по его имени просто пробегаем циклом по всем элементам
списка, сравнивая имя пользователя в текущем элементе с искомым именем. При совпадении, просто
возвращаем указатель на этот элемент.

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

и еще, в конец главного модуля неплохо бы было добавить функцию деинициализации и освободить память под массив пользователей

// deinitialization entry point
int xchat_plugin_deinit (xchat_plugin *plugin_handle)
{

    // releasing user list
    ulist_free();
    xchat_print (plugin_handle, "norepeat-plugin unloaded\n");

    return 1;
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от OM on 14-Июн-05, 22:46 
При всём моём уважении к XChat (я являюсь его пользователем и
есть плагин свой). У его системы есть один большой недостаток:
невозможно управлять GUI в полной мере
(скрывать/показывать/мигать - это не то о чём я).

Приходится прибегать к настолько обходным путям.....
Конкретно - использование GTK затруднено некоторым геммором,
связанным с запуском цикла обработки в другом цикле
(цикла плагина в цикле XChat).

К чему я клоню - проблема решаема в принципе, но недостаточно
проста для рядового плагинописателя (кои, в большинстве своём,
и являются массовыми архитекторами расширений и их кодерами).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от NeTxXx email(??) on 16-Июн-05, 16:26 
>При всём моём уважении к XChat (я являюсь его пользователем и
>есть плагин свой). У его системы есть один большой недостаток:
>невозможно управлять GUI в полной мере
>(скрывать/показывать/мигать - это не то о чём я).
>
>Приходится прибегать к настолько обходным путям.....
>Конкретно - использование GTK затруднено некоторым геммором,
>связанным с запуском цикла обработки в другом цикле
>(цикла плагина в цикле XChat).
>
>К чему я клоню - проблема решаема в принципе, но недостаточно
>проста для рядового плагинописателя (кои, в большинстве своём,
>и являются массовыми архитекторами расширений и их кодерами).


Согласен с вами, XChat'овскому plugin engine не хватает этой возможности.. Хотя в принципе гуи можно писать и отдельно, не используя XChat (создаешь виджеты из so'шника и строишь собственный гуи) а потом вызывать его через команды (можно создать менюшки с их алиасами).. но увы этого не всегда достаточно..
Однако в xchat уже есть заголовки двух функций для работы с гуи:
void *
xchat_plugingui_add (xchat_plugin *ph,
             const char *filename,
             const char *name,
             const char *desc,
             const char *version,
             char *reserved);

void
xchat_plugingui_remove (xchat_plugin *ph,
            void *handle)
но, к сожалению, они пока не документированы.
исходя из этого, можно предположить что в следующих версиях они всеже улучшат свой plugin-engine.. возможно появится что-то и для работы с гуи..
ждем обновлений :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от Exan email on 06-Июл-05, 20:52 
Просьба.
На http://digdilem.org/code/xchat/xchat.php есть плагин Flash-Annoyances, это perl скрипт позволяющий убрать сообщения о Join и Quit.
Они просто раздражают. Perl инсталировать можно, но лишьнии проблеммы.
Кто нибудь знает где можно найти .dll с такими же функциями ? Или может кто-то может написать такой .dll ?
И ещё одни вопрос: У меня есть BorlandC++Builder 6, можно или скомпилировать приведённый исходник в BCB ?
SXN
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от Nerian email on 21-Июн-05, 18:31 
А как насчёт обработки нажатия клавишь? Вот допустим я хотел написать плагин чтобы по нажатию F8 (например) к тому что было введено в строку ввода сообщения прибавлялась какая нибудь надпись, или что нибудь с этой стракой становилось, например выполось бы сохранения где нибудь в логах на будующее. Но я чего то так и не нашёл как обрабатывать нажатия клавишь и как получить доступ к строке ввода.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от NeTxXx email(??) on 02-Авг-05, 01:43 
>А как насчёт обработки нажатия клавишь? Вот допустим я хотел написать плагин
>чтобы по нажатию F8 (например) к тому что было введено в
>строку ввода сообщения прибавлялась какая нибудь надпись, или что нибудь с
>этой стракой становилось, например выполось бы сохранения где нибудь в логах
>на будующее. Но я чего то так и не нашёл как
>обрабатывать нажатия клавишь и как получить доступ к строке ввода.


действия на нажатия клавиш можно забиндить прямо из xchat'a (xchat keyboard shortcuts), а вот по поводу строки ввода сложнее.. получить данные из нее можно через функцию xchat_get_info(ph,"inputbox"). а вот сделать обратное.. походу пока никак (если только gtk не поддерживает сообщения. иначе можно сделать как в винде. найти хендл, и типа SetDlgItemInt(..) :)..
вообще то в исходниках xchat'ового plugin-engine оч много функций-заглушек.. те же xchat_plugingui_add() xchat_plugingui_remove().. они типа делают то что просто подгружают плугин и помечают как dummy :) интересный подход однако.. также были и заглушки для этого inputbox..

в итоге нам ничего не остается делать кроме как ждать новых версий :) м.б. они поступят как создатели anjuta - создадут новую unstable-ветку со всеми фишками и новым plugin-engine..
ну или под конец самим править код :) (я все чаще начинаю об этом задумываться, btw =))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от Exan email on 10-Июл-05, 17:24 
Ничего писать не надо. Всё есть в Xchat - e
/set irc_conf_mode on
и Join и Quit - мегасы не выводятся на экран.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от ventolin email on 02-Авг-05, 00:06 
any of u guys know how to create a dll to write the x-chat plugin in C# ???
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от NeTxXx email(??) on 02-Авг-05, 01:48 
>any of u guys know how to create a dll to write
>the x-chat plugin in C# ???

hmm.. generally no idea, but m.b. you should create basic c# .dll, define all imports, write necessary code and then simply compile it in native code?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Написание плагина для IRC-клиента X-Chat (plugin gcc)"  
Сообщение от ReliX email on 18-Июн-06, 22:22 
Очень необходим плагин под Х чат, для хэлпера, смысл такой, рекция на определённые фразы на канале (каналах), ответ автоматически берётся из файла, набор фраз тоже файл (проще всего текстовые), это как нибудь можно реализовать? из приведенного описания плагина я всё понял, сам не напишу, если кто нибудь задавался такой интересной проблемой, помогите...
всё (желательно проверенное) отсылайте на почту или ответьте тут. E-mail: titarenko5@mail.ru
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру