Архив: Технология создания плагинов

Здесь обсуждаются технические аспекты создания дополнений.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов

Сообщение Maxim Mirgorodsky »

ОреЛ писал(а):Вопрос к Максиму:
Будет ли внесены когда-либо (желательно в ближайших версиях) для серверных плагинов прием событий Публикация/Редактирование/Удаление объявления/комментария?
На данный момент возможно лишь получение данных о разделах ДО, обо всех объявлений раздела, но нет приема события Публикации или Редактирования или Удаления объявлений или комментария к нему.
P.S.: приношу извинения за повтор вопроса.
Невнимательно прочитал. Прием таких событий реализуем.
dark писал(а):Плагин делает все что надо, но ошибка остается.
Опишите пожалуйста подробнее что именно делает плагин успешно и где именно сохранилась ошибка.
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Технология создания плагинов

Сообщение ОреЛ »

может кто-нибудь мог бы показать пример плагина на c++ с использованием многопоточности?
я просто хочу понять, как это делается
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

Re: Технология создания плагинов

Сообщение @serg@ »

ОреЛ писал(а):может кто-нибудь мог бы показать пример плагина на c++ с использованием многопоточности?
я просто хочу понять, как это делается
+1
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

Re: Технология создания плагинов

Сообщение Cilvay »

Ув. Разработчики, может прокомментируете?
http://commfort.com/ru/forum/viewtopic. ... 768#p51768
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов

Сообщение Maxim Mirgorodsky »

Работа в одном потоке - это наиболее простой, понятный и стабильный для разработчика плагина вариант. Он позволяет без проблем синхронно обмениваться данными между плагином и программой. Для многопоточности необходимо защищать данные от параллельной работы с ними. Программа и плагины образуют собой единое приложение. Если нет понимания всех аспектов многопоточности - ни в коем случае нельзя с ней связываться. Ошибки будут неминуемо, причем труднодиагностируемые.
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

Re: Технология создания плагинов

Сообщение @serg@ »

Я лично, помучившись с разбиением на потоки, забил на данную идею. Основная часть ошибок у меня была в момент попытки инициировать событие в чате при помощи соответствующей функции. Мне пока не совсем ясны принципы, по которым работают DLL-плагины, и как грамотно разбить свою часть кода на потоки, но коль разработчики этого не предусмотрели, придётся как-то ухищряться, пока для себя решил вернуться к ботам, это самое простое. Получается работать будут 2 независимые (по процессорному времени) программы, обмениваться через ip-протокол и бог с ним.
Аватара пользователя
-=SJ=-
Сообщения: 246
Зарегистрирован: 02:21, 06.04.2007

Re: Технология создания плагинов

Сообщение -=SJ=- »

Как уже говорилось выше чтобы подружить плагин с потоками надо использовать функции typeCommFortProcess и typeCommFortGetData в основном потоке.
У объекта TThread есть метод Synchronize который позволяет запустить переданную процедуру в основном потоке.
Так как typeCommFortProcess не возвращает никаких данных то использование вместе с Synchronize не должно вызывать проблем.
Тяжелее с typeCommFortGetData, для получения результата надо:
1) вызвать функцию через Synchronize.
2) приостановить поток дождаться получения результата (уйти в бесконечный цикл пока не установится определенный флаг)
3) в основном потоке после получения результата от typeCommFortGetData обязательно скопировать буфер с результатом в свою память.
Во первых мы не знаем когда будет очищен этот буфер, во вторых для работы через критические секции лучше все же использовать свою память.
4) в потоке войти в критическую секцию и обработать результат.

Ну, а в идеале чат в следующих версиях сам должен определять в основном ли потоке вызываются typeCommFortProcess и typeCommFortGetData и действовать соответствующим образом.
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Технология создания плагинов

Сообщение ZigZagkms »

Такой вопрос: Вот допустим плагин подал запрос на активацию, когда активацию принимают какое нибудь событие происходит?
Чтобы плагин знал когда учетку активировали и действовал дальше. Знаю про способ подавать заявку каждые N секунд и смотреть ответ по ID ответа 1090. Но все же есть более красивое решение?
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов

Сообщение Maxim Mirgorodsky »

Как обычный пользователь, так и виртуальный могут проверить состояние активации только попыткой авторизации. Предполагается, что ручная обработка заявки на активацию может занять значительное время и не стоит клиента все это время нервировать окном "Пожалуйста, подождите...". Более предпочтительный вариант - "Пожалуйста, зайдите позже". Плагин унаследовал этот принцип.
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Технология создания плагинов

Сообщение ZigZagkms »

Как получить пароль еще не авторизованного пользователя?

Код: Выделить всё

Запрос на активацию новой учетной записи  

ID: 1082
Блок данных: текст(имя) + текст(IP-адрес) + текст(сообщение модератору)
Вот с этим чтобы событием вместе узнать еще и пароль. Пробовал запросить данные у программы этим способом

Код: Выделить всё

Пароль учетной записи  

ID: 1060
Блок данных (исходящий): текст(имя пользователя)
Блок данных (входящий): текст(32 символьный MD5 хэш-код пароля)

Если пользователь не зарегистрирован, то вместо MD5 хэш-кода во входящий блок данных будет записана пустая строка.
не получается, т.к. еще не авторизован.
Так как же узнать пароль на стадии авторизации? Чтобы можно было отклонять авторизацию в зависимости от внешних совпадений логин\пароль
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

Re: Технология создания плагинов

Сообщение SV »

ZigZagkms писал(а):Как получить пароль еще не авторизованного пользователя?

Код: Выделить всё

Запрос на активацию новой учетной записи  

ID: 1082
Блок данных: текст(имя) + текст(IP-адрес) + текст(сообщение модератору)
Вот с этим чтобы событием вместе узнать еще и пароль. Пробовал запросить данные у программы этим способом

Код: Выделить всё

Пароль учетной записи  

ID: 1060
Блок данных (исходящий): текст(имя пользователя)
Блок данных (входящий): текст(32 символьный MD5 хэш-код пароля)

Если пользователь не зарегистрирован, то вместо MD5 хэш-кода во входящий блок данных будет записана пустая строка.
не получается, т.к. еще не авторизован.
Так как же узнать пароль на стадии авторизации? Чтобы можно было отклонять авторизацию в зависимости от внешних совпадений логин\пароль
Запрос на активацию новой учетной записи

ID: 1082
Блок данных: текст(имя) + текст(IP-адрес) + текст(сообщение модератору) + текст(32 символьный MD5 хэш-код пароля)

Смотри внимательнее. Вот юзай полную документацию по плагину под сервер Chudika
Вложения
CommFort_plugins.rar
(17.11 КБ) 391 скачивание
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Технология создания плагинов

Сообщение ZigZagkms »

В моей документации этого не было и мне не давали специализированную. Не знал, теперь знаю, спасибо.
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

Re: Технология создания плагинов

Сообщение SV »

ZigZagkms писал(а):В моей документации этого не было и мне не давали специализированную. Не знал, теперь знаю, спасибо.
Учти на форуме не кто про эту спецификацию не знает. У нас у троих только пропаченный сервер. Если только тебе Максим поможет советом.
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

Re: Технология создания плагинов

Сообщение @serg@ »

anonim писал(а):
ZigZagkms писал(а):В моей документации этого не было и мне не давали специализированную. Не знал, теперь знаю, спасибо.
Учти на форуме не кто про эту спецификацию не знает. У нас у троих только пропаченный сервер. Если только тебе Максим поможет советом.
Вот ту поподробней, нифика не понятно, в чём смысл пропатченного сервера? Выходит эта документация для него или просто в шапке топика не обновлённая?
Аватара пользователя
Chudik
Сообщения: 1071
Зарегистрирован: 18:37, 27.01.2007
Откуда: Украина, г. Херсон
Контактная информация:

Re: Технология создания плагинов

Сообщение Chudik »

@serg@ писал(а):
anonim писал(а):
ZigZagkms писал(а):В моей документации этого не было и мне не давали специализированную. Не знал, теперь знаю, спасибо.
Учти на форуме не кто про эту спецификацию не знает. У нас у троих только пропаченный сервер. Если только тебе Максим поможет советом.
Вот ту поподробней, нифика не понятно, в чём смысл пропатченного сервера? Выходит эта документация для него или просто в шапке топика не обновлённая?
Сервер немного изменён под запросы моей сети.
http://www.commfort.com/ru/forum/viewto ... 40&start=0
Закрыто