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

Здесь обсуждаются технические аспекты создания дополнений.
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

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

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

Вопрос ко всем, ибо вы намного умнее и опытнее меня:
почему в С++ можно считывать таким образом:

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

int len;
memcpy(&len, bInBuffer, 4);
bInBuffer += 4;
UnicodeString User;
User.SetLenght(len);
memcpy(&User.c_str(), bInBuffer, len * 2);
bInBuffer += len * 2;
.........
но нельзя записать так же:
memcpy(bOutBuffer, &len, 4);
bOutBuffer += 4;
memcpy(bOutBuffer, User.c_str(), len * 2);
bOutBuffer += len * 2;
.........
?
Пришлось в цитату заносить второй код, ибо в тегах Code игнорируется цвет(
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

ОреЛ писал(а):почему в С++ можно считывать таким образом:

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

int len;
memcpy(&len, bInBuffer, 4);
bInBuffer += 4;
UnicodeString User;
User.SetLenght(len);
memcpy(&User.c_str(), bInBuffer, len * 2);
bInBuffer += len * 2;
.........
но нельзя записать так же:
memcpy(bOutBuffer, &len, 4);
bOutBuffer += 4;
memcpy(bOutBuffer, User.c_str(), len * 2);
bOutBuffer += len * 2;
.........
?
Указатель останется на последнем добавленном элементе буфера, а не в начале этого буфера, и, поэтому, неправильно передаётся серверу/клиенту чата для обработки:

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

Данные???????
    ^
    |
 bOutBuffer
Сервер/клиент при этом получают:

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

ые????
^
|
bOutBuffer
Изменение bInBuffer ни на что не влияет, потому что передавать его клиенту/серверу не нужно. Думаю, можно использовать дополнительный указатель, объявленный внутри функции, чтобы не изменять bOutBuffer.
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

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

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

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

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

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

cilvay писал(а):Уважаемые разработчики, нельзя ли сделать чтобы код, выполняющийся в функции PluginProcess был независим от чата и комфорт не ждал пока он выполниться. Если я туда запихну sleep(20000) то чат будет 20 секунд висеть. А как реализовать это без использования многопоточности?
Нельзя, так как это уже и будет многопоточность и защитить ее не представляется возможности (плагин синхронно запрашивает данные у программы).
@serg@ писал(а):Нашел ошибку в системе сообщений серверных плагинов. Инициирование событий:
Создать общий канал или подключиться к уже существующему
ID: 1026
Изменить иконку
ID: 1026
Да, в этой теме уже о ней сообщали. Исправим в следующей версии.
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

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

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

Maxim Mirgorodsky писал(а):Да, в этой теме уже о ней сообщали. Исправим в следующей версии.
Значит я забыл, что о таковом писали...Прошу прощения за повторение.
yaotzin
Сообщения: 105
Зарегистрирован: 01:38, 21.07.2008
Контактная информация:

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

Сообщение yaotzin »

Maxim Mirgorodsky здравствуйте =) у вас нет случайно примера на C# плагина клиентского ? =)
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

На C# нет.
Аватара пользователя
Zka
Сообщения: 29
Зарегистрирован: 18:34, 27.12.2010
Откуда: Гомель, Беларусь. Сеть Гарант

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

Сообщение Zka »

Здравствуйте! Я сам ещё ни одного плагина не написал...Понятия не имею, как их писать. :mrgreen:. Можно мне как-то объяснить: как можно скомпилировать проект в Delphi 2007 в *.cflpug если компилирует только в *.exe?
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

Как я уже говорил, нужно посмотреть пример плагина на Delphi, это поможет. А насчёт разработки DLL - смотрите тут. Но лучше разберитесь в плагине, многое сразу станет ясно :)
Аватара пользователя
Zka
Сообщения: 29
Зарегистрирован: 18:34, 27.12.2010
Откуда: Гомель, Беларусь. Сеть Гарант

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

Сообщение Zka »

Спасибо. Скачал плагин (пример плагина (Repeater Plugin). В Delphi прокрутил. Разобрался.

А теперь у меня новый вопрос: а как вставить изображение в пункт "О программе"? Как я не корчал код своими фантазиями ничего нового не было. Можно рассказать как вставить изображение в данной части кодировки (описание раздела "О программе" )
minlexx
Сообщения: 9
Зарегистрирован: 14:35, 29.12.2010

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

Сообщение minlexx »

..... Сервер при этом пишет в логах:
E25 [29.12.2010 2:58:05.358] (10.38.7.84): подозрение на атаку (тип 2248)
... Рано пытаюсь что-то слать в чат ещё до авторизации?) (поиском что-то нашел) но все жё если есть инфа что значит именно этот номер ошибки....
:lol: сам понял
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

Действительно, ув. разработчики чата, сделайте пожалуйста какую нить табличку со значениями кодов этих. А то появляются непонятные сообщения типа "подозрения на атаку (тип ххх)" или "Modul 1(xx) is activated" и т.д.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

На самом деле это проблема системы плагинов, что она позволяет плагину недопустимые с точки зрения протокола действия. Будет исправлено.
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

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

Сообщение SV »

Пытаюсь забанить пользователя,но не чего не получается

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

		
aDataToSend := fTextToAnsiString('Repeater')+  //имя виртуального пользователя
fIntegerToAnsiString(0)+  //тип идентификации
fTextToAnsiString(uSenderLogin)+ //объект идентификации
fIntegerToAnsiString(2)+ //тип ограничения
fTextToAnsiString(uChannel)+ //канал ограничения
fIntegerToAnsiString(1)+ //срок
fTextToAnsiString('123')+//Причина
fIntegerToAnsiString(1);//тип анонимности
CommFortProcess(dwPluginID, 1040, PAnsiChar(aDataToSend), Length(aDataToSend))
Что не так?
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

anonim писал(а): aDataToSend := fTextToAnsiString('Repeater')+ //имя виртуального пользователя
fIntegerToAnsiString(0)+ //тип идентификации
fTextToAnsiString(uSenderLogin)+ //объект идентификации
fIntegerToAnsiString(2)+ //тип ограничения
fTextToAnsiString(uChannel)+ //канал ограничения
fIntegerToAnsiString(1)+ //срок
fTextToAnsiString('123')+//Причина
fIntegerToAnsiString(1);//тип анонимности
CommFortProcess(dwPluginID, 1040, PAnsiChar(aDataToSend), Length(aDataToSend))
Срок - тип Double, а не целое число. Было тут
Закрыто