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

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

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

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

Yaroslav писал(а):Из справочной файла:
Внимание! Один пользователь может одновременно находиться не более чем в 16 общих каналах.
Для чего такое ограничение в клиенте и почему оно распространяется и на плагины?
Ограничение для контроля над нагрузкой и объемами БД. Для программы виртуальный пользователь, созданный плагином не отличается от обычного пользователя.
Аватара пользователя
Yaroslav
Сообщения: 846
Зарегистрирован: 03:45, 15.12.2007
Контактная информация:

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

Сообщение Yaroslav »

Maxim Mirgorodsky писал(а):
Yaroslav писал(а):Из справочной файла:
Внимание! Один пользователь может одновременно находиться не более чем в 16 общих каналах.
Для чего такое ограничение в клиенте и почему оно распространяется и на плагины?
Ограничение для контроля над нагрузкой и объемами БД. Для программы виртуальный пользователь, созданный плагином не отличается от обычного пользователя.
А вдруг у меня на сервере стопицотядерный процессор и over9000 рамы и я хочу пользователям дать возможность сидеть в бесконечном количестве каналов?

Может всё таки нужно сделать опцию на этот лимит. Пускай по умолчанию стоит себе 16. Если так заботитесь о бестолковых администраторах, сделайте на все настройки такой режим как на настройки нагрузки. Общепринятая практика, кстати.
А ещё важно иметь настройку обхода этого ограничения отдельными пользователями (как та же защита от флуда). Потому, что есть масса случаев, где нужно более 16 каналов особенно для серверного плагина.

И ещё хотел спросить о какой БД речь? БД пользователей в каналах?

50 знаков ник х 2 байта символ = 100 байт.
50 знаков названия канала х 2 байта символ = 100 байт.
Пользователь в 50 каналах:
100 байт ник + (100 байт канал * 50) ~ 5 Кбайт
таких пользователей 1000:
1000 * 5 Кбайт = до 5 Мбайт.

5 мегабайт при самых сумашедших раскладах.

Чисто случайно у меня под руками оказалась БД ~500 000 записей. 240 Мбайт объём. Выборка c дискового(!) хранилища (mysql) по точному совпадению VARCHAR поля заняла 0.89 сек. (около 40 результатов в ответе) на голимом тестовом сервере c процессором 1.8 Mhz на которм около десятка проектов развёрнуто и сейчас идёт разработка и тестирование.
Web-интерфейс серверных логов ——> http://commfort.com/ru/forum/viewtopic.php?t=6618
Web-статистика посещаемости чата —> http://commfort.com/ru/forum/viewtopic.php?t=6546
Благодарности —> R753244967524 Z664725275810 U806184306803 ЯД:41001743355185
~Alien~
Сообщения: 39
Зарегистрирован: 19:47, 22.01.2010

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

Сообщение ~Alien~ »

Для преобразования строки в юникод-строку используйте функцию MultiByteToWideChar или для преобразования из юникода WideCharToMultiByte. Пример:

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

function func(var len : Integer) : PChar;
        var
          buff : array[0..40000] of Char;
          n : Integer;
          user_name, text_msg : String;
        begin
          user_name := 'TESTER';//впишите свой ник
          text_msg := 'Hello :)';
          
          len := 0;
          
          n := Length(user_name);
          CopyMemory(@buff[len], @n, 4);
          inc(len, 4);
          MultiByteToWideChar(CP_ACP, 0, PChar(user_name), -1, @buff[len], n*2);
          inc(len, n*2);

          n := 1;
          CopyMemory(@buff[len], @n, 4);
          inc(len, 4);

          n := Length(text_msg);
          CopyMemory(@buff[len], @n, 4);
          inc(len, 4);
          MultiByteToWideChar(CP_ACP, 0, PChar(text_msg), -1, @buff[len], n*2);
          inc(len, n*2);

          Result := buff;
        end;
........................
//Отправляем сообщение
                buff := func(len);
                CommFortProcess(plug_id, 70, buff, len);
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

~Alien~ писал(а):Для преобразования строки в юникод-строку используйте функцию MultiByteToWideChar или для преобразования из юникода WideCharToMultiByte.
*Примечание: в версиях Delphi 2009+ тип String=UnicodeString, т.е. по умолчанию строка имеет кодировку UTF-16 :)
~Alien~
Сообщения: 39
Зарегистрирован: 19:47, 22.01.2010

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

Сообщение ~Alien~ »

*Примечание: в версиях Delphi 2009+ тип String=UnicodeString, т.е. по умолчанию строка имеет кодировку UTF-16 :)
Ну и? Те кому нужно будут пользоваться WinAPI функциями.
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

~Alien~ писал(а): Ну и? Те кому нужно будут пользоваться WinAPI функциями.
Естественно, просто указал, что код необходим для Delphi ниже 2009.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Yaroslav писал(а):А вдруг у меня на сервере стопицотядерный процессор и over9000 рамы и я хочу пользователям дать возможность сидеть в бесконечном количестве каналов?
Пошел офтопик. При разработке каждой новой версии протокола берутся типичные условия и под них считается нагрузка. Если просчитать нагрузку под "стопицотядерный процессор и over9000 рамы" мы получим банальные перегрузки и зависания на слабом железе. Ограничение на количество каналов относится к базовым, используется во многих блоках программы и очень чувствительно к нагрузке. Напоминаем, список открытых общих каналов сохраняется при выходе пользователя из чата. Именно на сервере, чтобы получить возможность создания каналов с доступом только по приглашению.
Yaroslav писал(а):таких пользователей 1000:
В 5.00 максимум зарегистрированных пользователей - 40000. И не забывайте что кроме каналов есть и другие данные.

И еще раз просьба офтопик прекратить. Здесь обсуждается технология создания плагинов.

Если есть необходимость присутствия плагина в 50 общих каналах - можно создать несколько виртуальных пользователей.
Аватара пользователя
Yaroslav
Сообщения: 846
Зарегистрирован: 03:45, 15.12.2007
Контактная информация:

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

Сообщение Yaroslav »

Maxim Mirgorodsky писал(а): Если есть необходимость присутствия плагина в 50 общих каналах - можно создать несколько виртуальных пользователей.
Ок, прекратил. Об этом решении не подумал как-то...
Web-интерфейс серверных логов ——> http://commfort.com/ru/forum/viewtopic.php?t=6618
Web-статистика посещаемости чата —> http://commfort.com/ru/forum/viewtopic.php?t=6546
Благодарности —> R753244967524 Z664725275810 U806184306803 ЯД:41001743355185
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

Интереснейшая штука получается, подключил CodeGuard при запуске NULL плагина и обнаружил что при закрытии серверной части через иконку в трее и пункт "Закрыть" вылетают сообщения об утечке памяти (притом что плагин даже не запущен):

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

Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A8B8) was never deleted
  The object (0x0616A8B8) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D579DC
    0x05D4AD0A
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A8A0) was never deleted
  The object (0x0616A8A0) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D56F10
    0x05D4AD0A
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A888) was never deleted
  The object (0x0616A888) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D564CD
    0x05D4AD0A
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A870) was never deleted
  The object (0x0616A870) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D55BFB
    0x05D4AD0A
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A810) was never deleted
  The object (0x0616A810) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D4D2F4
    0x05D4ACFC
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A7F8) was never deleted
  The object (0x0616A7F8) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D4C838
    0x05D4ACFC
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A7C8) was never deleted
  The object (0x0616A7C8) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D4BCA4
    0x05D4ACFC
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x616A7B0) was never deleted
  The object (0x0616A7B0) [size: 16 bytes] was created with new
    0x05D4AA3F
    0x05D4B3DF
    0x05D4ACFC
    0x05D654A1
    0x05D6560F
    0x05C915EC
Resource leak in process: CommFort_server.exe(5168) 
  The memory block (0x6146790) was never freed
  The memory block (0x06146790) [size: 200 bytes] was allocated with SysGetMem
    0x05D5BB8F
    0x05D5BA69
    0x05D5F94C
    0x05D5E64D
    0x0CD0B297
    0x05C9284F
Resource leak in process: CommFort_server.exe(5168) 
  The object (0x6163450) was never deleted
  The object (0x06163450) [size: 64 bytes] was created with new
    0x05D5110B
    0x05D51033
    0x05D4B183
    0x05D4ACFC
    0x05D654A1
    0x05D6560F
Это или проделки упаковщика Themida или явные проблемы с освобождением памяти.
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

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

Сообщение ZigZagkms »

Всем привет, есть несколько вопросов к Администраторам.. Нигде не нашел такой информации, может плохо искал..

1) Какая максимальная длина пароля для виртуального пользователя? Или не ограничена т.к. все равно получается 32 символа из хеша?
2) Какая максимальная длина приветствия?
3) Какая максимальная длина текста в состоянии пользователя?
4) Какая максимальная длина текста в причине при отклонении активации?
5) Какая максимальная длина текста в объекте при наложении ограничения?
6) Какая максимальная длина текста в причине при наложении ограничения?
7) Какая максимальная длина теста в причине при снятии ограничения?
8) Какая максимальная длина заголовка объявления?
9) Какая максимальная длина текста объявления?
10) Какая максимальная длина комментария в объявлениях?
11) Изменились ли параметры сжатия картинок прежними? (Маленькие не более 15000 пикселов. Средние не более 50000 пикселов. Большие не более 100000 пикселов. Очень большие не более 200000 пикселов. Максимальная ширина - 550 пикселов) и когда появится возможность отсылать картинки плагином к серверу? И появится ли возможность получать принятые картинки?

* 1-10 все это для плагина к серверу. Необходимо поставить проверку самому и не подавать серверу некорректные данные.

И если не сложно дайте пожалуйста кусочек кода например как получить данные от сервера с ID = 1060. В примере идет с нулевым входящим значением, а где и что не совсем там понятно.
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

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

Сообщение ZigZagkms »

Что то у меня сервер никак не реагирует на событие 1024 (изменить приветствие). Посылаю ему вроде правильную команду а приветствие не меняется.. =( Поправьте пожалуйста

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

   00(  0)  04(  0)  00(  0)  00(  0)
   ^ dwID (1024)
   
   0b( 11)  00(  0)  00(  0)  00(  0)
   ^ Длина виртуального пользователя (11)
   
   4d( 77)  00(  0)  79(121)  00(  0)  46( 70)  00(  0)  69(105)  00(  0)  72(114)  00(  0)  73(115)  00(  0)  74(116)  00(  0)  55( 85)  00(  0)  73(115)  00(  0)  65(101)  00(  0)  72(114)  00(  0)
   ^ Виртуальный пользователь
   
   04(  0)  00(  0)  00(  0)  00(  0)
   ^ Длина канала (4)
   
   6d(109)  00(  0)  61( 97)  00(  0)  69(105)  00(  0)  6e(110)  00(  0)
   ^ Название канала
   
   
   0a( 10)  00(  0)  00(  0)  00(  0)
   ^ Длина приветствия (10)
   
   74(116)  00(  0)  65(101)  00(  0)  73(115)  00(  0)  74(116)  00(  0)  20( 32)  00(  0)  68(104)  00(  0)  65(101)  00(  0)  6c(108)  00(  0)  6c(108)  00(  0)  6f(111)  00(  0)  
   ^ Приветствие
p.s. тестирую на триале
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
ZigZagkms
Сообщения: 109
Зарегистрирован: 08:23, 11.12.2008
Откуда: Комсомольск-на-Амуре
Контактная информация:

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

Сообщение ZigZagkms »

Серверный плагин. Инициирование событий.
Почему то у событий "Создать общий канал или подключиться к уже существующему" и "Изменить иконку" одинаковое ID... 1026..
Попробовал сменить иконку а сервер мне в ответ событие с id 1091 "Подключение к каналу виртуального пользователя невозможно".
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

Проблема с приёмом события 1090 "Авторизация виртуального пользователя невозможна"
Блок данных: текст(имя виртуального пользователя) + число(код причины)

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

int id = FileCreate("C:\\debug.txt");
\\dwInBufferSize == 4!!!
FileWrite(id, bInBuffer, dwInBufferSize);
FileClose(id);
Содержимое файла debug.txt:

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

08 00 00 00
То есть в ответ нам пришёл только код причины... А где имя виртуального пользователя???
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

$teelR@t писал(а):Интереснейшая штука получается, подключил CodeGuard при запуске NULL плагина и обнаружил что при закрытии серверной части через иконку в трее и пункт "Закрыть" вылетают сообщения об утечке памяти (притом что плагин даже не запущен):

Это или проделки упаковщика Themida или явные проблемы с освобождением памяти.
Проверим, если будет необходимость исправим.

ZigZagkms

1) Какая максимальная длина пароля для виртуального пользователя? Или не ограничена т.к. все равно получается 32 символа из хеша?

Все равно, в сетевом протоколе используется только хэш.

2) Какая максимальная длина приветствия?

15000

3) Какая максимальная длина текста в состоянии пользователя?

64

4) Какая максимальная длина текста в причине при отклонении активации?

255

5) Какая максимальная длина текста в объекте при наложении ограничения?

программа сама корректирует (учетная запись например автоматически приводится в соответствие с требованиями)

6) Какая максимальная длина текста в причине при наложении ограничения?

255

7) Какая максимальная длина теста в причине при снятии ограничения?

255

8) Какая максимальная длина заголовка объявления?

255

9) Какая максимальная длина текста объявления?

7000

10) Какая максимальная длина комментария в объявлениях?

7000

Все ограничения указаны в символах. В случае их превышения, программа производит автоматическое сжатие, то есть ошибки не будет если данные большего объема послать.

11) Изменились ли параметры сжатия картинок прежними? (Маленькие не более 15000 пикселов. Средние не более 50000 пикселов. Большие не более 100000 пикселов. Очень большие не более 200000 пикселов. Максимальная ширина - 550 пикселов) и когда появится возможность отсылать картинки плагином к серверу? И появится ли возможность получать принятые картинки?

Новые ограничения по картинкам:

const int MAX_PICTURE_LITTLE_PIXELS = 30000;
const int MAX_PICTURE_LITTLE_BYTES = 18000;
const int MAX_PICTURE_MEDIUM_PIXELS = 60000;
const int MAX_PICTURE_MEDIUM_BYTES = 30000;
const int MAX_PICTURE_LARGE_PIXELS = 125000;
const int MAX_PICTURE_LARGE_BYTES = 50000;
const int MAX_PICTURE_VERYLARGE_PIXELS = 250000;
const int MAX_PICTURE_VERYLARGE_BYTES = 90000;

Максимальная ширина - 600.

В случае если соответствие по пикселам соблюдается, а по байтам нет - происходит автоматическое пережатие в JPEG с более низким уровнем качества.

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

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

Сообщение ZigZagkms »

Maxim Mirgorodsky писал(а):
$teelR@t писал(а):Интереснейшая штука получается, подключил CodeGuard при запуске NULL плагина и обнаружил что при закрытии серверной части через иконку в трее и пункт "Закрыть" вылетают сообщения об утечке памяти (притом что плагин даже не запущен):

Это или проделки упаковщика Themida или явные проблемы с освобождением памяти.
Проверим, если будет необходимость исправим.

ZigZagkms

1) Какая максимальная длина пароля для виртуального пользователя? Или не ограничена т.к. все равно получается 32 символа из хеша?

Все равно, в сетевом протоколе используется только хэш.

2) Какая максимальная длина приветствия?

15000

3) Какая максимальная длина текста в состоянии пользователя?

64

4) Какая максимальная длина текста в причине при отклонении активации?

255

5) Какая максимальная длина текста в объекте при наложении ограничения?

программа сама корректирует (учетная запись например автоматически приводится в соответствие с требованиями)

6) Какая максимальная длина текста в причине при наложении ограничения?

255

7) Какая максимальная длина теста в причине при снятии ограничения?

255

8) Какая максимальная длина заголовка объявления?

255

9) Какая максимальная длина текста объявления?

7000

10) Какая максимальная длина комментария в объявлениях?

7000

Все ограничения указаны в символах. В случае их превышения, программа производит автоматическое сжатие, то есть ошибки не будет если данные большего объема послать.

11) Изменились ли параметры сжатия картинок прежними? (Маленькие не более 15000 пикселов. Средние не более 50000 пикселов. Большие не более 100000 пикселов. Очень большие не более 200000 пикселов. Максимальная ширина - 550 пикселов) и когда появится возможность отсылать картинки плагином к серверу? И появится ли возможность получать принятые картинки?

Новые ограничения по картинкам:

const int MAX_PICTURE_LITTLE_PIXELS = 30000;
const int MAX_PICTURE_LITTLE_BYTES = 18000;
const int MAX_PICTURE_MEDIUM_PIXELS = 60000;
const int MAX_PICTURE_MEDIUM_BYTES = 30000;
const int MAX_PICTURE_LARGE_PIXELS = 125000;
const int MAX_PICTURE_LARGE_BYTES = 50000;
const int MAX_PICTURE_VERYLARGE_PIXELS = 250000;
const int MAX_PICTURE_VERYLARGE_BYTES = 90000;

Максимальная ширина - 600.

В случае если соответствие по пикселам соблюдается, а по байтам нет - происходит автоматическое пережатие в JPEG с более низким уровнем качества.

Возможность получения картинок плагинами можем реализовать, если есть необходимость. По публикации картинок еще будем решать, скорее всего сделаем, но нужно быть очень осторожным с точки зрения производительности.
Большое спасибо за информацию.
Получать картинки через плагин сервера очень желательно (например есть желание сделать банилку по черному листу картинок по их хешу, или прямая трансляция чата по веб протоколу в браузер...) но публикация картинок через плагин сервера критично необходимо. Начали перевод своих ботов с 4ой линейки и не хотелось бы держать запущенным клиент лишь ради отправки картинок. у нас викторина работает с генерацией и публиковкой в чат картинок.
Насчет вопроса о производительности это у нас это на первом плане при разработке
Забросил, всем спасибо, исходники раздаю кому надо https://github.com/ZigZagkms
Закрыто