Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
sonic
Сообщения: 43 Зарегистрирован: 01:14, 05.12.2007
Сообщение
sonic » 16:31, 17.09.2008
Ув. разработчики.
Помоему описание команды
Код: Выделить всё
Подключение к каналу бота 62 Текст(канал)+текст(тема)+текст(приветствие)
не соответствует действительности:
Код: Выделить всё
04 00 00 00 6d 61 69 6e 1c 00 00 00 04 f2 e5 ec ....main.....тем
e0 10 31 37 2e 30 39 2e 32 30 30 38 20 31 36 3a а.17.09.2008 16:
32 38 05 4d 69 74 65 6b 00 00 00 00 0d 0a 28.Mitek......
Maxim Mirgorodsky
Администратор
Сообщения: 6886 Зарегистрирован: 09:56, 27.06.2005
Сообщение
Maxim Mirgorodsky » 10:37, 18.09.2008
действительно.
правильное описание:
Текст(канал)+текст(текст1(тема)+текст1(дата и время последнего изменения темы)+текст1(логин пользователя изменившего тему последний раз))+текст(приветствие)
где текст1() = 1байт unsigned(длина строки)+текст
Chief
Сообщения: 17 Зарегистрирован: 22:10, 26.07.2007
Откуда: OpenProject
Сообщение
Chief » 20:22, 25.09.2008
Серверная часть вызывает
PluginInit и на этом все (далее вызовов PluginProcess нет!). В логах сервера ошибок нет...
Компилятор:
VC++ 9.0 (Visual Studio 2008)
Код: Выделить всё
#include <windows.h>
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
#pragma pack(push)
#pragma pack(1)
#define __export __declspec(dllexport)
bool APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
struct sPluginInfo
{
char strPluginName[255];
char strPluginDescription[255];
char strPluginVersion[255];
};
struct sBotUserInfo
{
char strBotName[255];
char strBotPassword[255];
bool bIsFemale;
};
DWORD dwPluginID;
typedef BYTE (__stdcall * typeCommFortProcess)(DWORD dwPluginID, DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength);
typeCommFortProcess CommFortProcess;
__export BYTE __cdecl PluginInit(DWORD dwThisPluginID, sPluginInfo * plInfo, sBotUserInfo * botInfo, typeCommFortProcess func1)
{
dwPluginID = dwThisPluginID;
strcpy_s((* plInfo).strPluginName, "Null");
strcpy_s((* plInfo).strPluginDescription, "Null");
strcpy_s((* plInfo).strPluginVersion, "4.02");
strcpy_s((* botInfo).strBotName, "bot");
strcpy_s((* botInfo).strBotPassword, "password");
(* botInfo).bIsFemale = false;
CommFortProcess = func1;
return 0;
}
__export BYTE __cdecl PluginTerminate(void)
{
return 0;
}
__export BYTE __cdecl PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength)
{
return 0;
}
__export BYTE __cdecl Premoderation(DWORD dwMessageID, BYTE * bMessage, DWORD * dwMessageLength)
{
return false;
}
#ifdef __cplusplus
}
#endif
Исходник:
http://rapidshare.com/files/148321352/C ... s.zip.html
Собраный:
http://rapidshare.com/files/148321730/A ... k.zip.html
Maxim Mirgorodsky
Администратор
Сообщения: 6886 Зарегистрирован: 09:56, 27.06.2005
Сообщение
Maxim Mirgorodsky » 03:29, 26.09.2008
Используется соглашение не __cdecl, а __stdcall.
__export BYTE __cdecl Premoderation
Правильно: __export BOOL
Chief
Сообщения: 17 Зарегистрирован: 22:10, 26.07.2007
Откуда: OpenProject
Сообщение
Chief » 10:29, 26.09.2008
2
Maxim Mirgorodsky
Вызовы при __cdecl (export C):
Код: Выделить всё
PluginInit PluginProcess PluginTerminate Premoderation
Вызовы при __stdcall (export C):
Код: Выделить всё
_PluginInit@16 _PluginProcess@12 _PluginTerminate@0 _Premoderation@12
P. S. CommFort_server вызывает функцию PluginInit, но после возврата ничего не происходит, т.е. бот регистрацию не проходит (вот о чем шла речь).
Maxim Mirgorodsky
Администратор
Сообщения: 6886 Зарегистрирован: 09:56, 27.06.2005
Сообщение
Maxim Mirgorodsky » 12:10, 26.09.2008
Декорирование имен экспортируемых функций необходимо отключить.
Виртуальный пользователь может не пройти авторизацию в случае использования запрещенных символов в имени пользователя, либо в случае неверного пароля.
Chief
Сообщения: 17 Зарегистрирован: 22:10, 26.07.2007
Откуда: OpenProject
Сообщение
Chief » 22:18, 27.09.2008
На будущее:
Для MSVC
1. В командную строку линковщика добавляете
/DEF:<filename.def> ;
2. В <filename.def>:
Код: Выделить всё
LIBRARY <filename.def>
EXPORTS
PluginInit
PluginTerminate
PluginProcess
Premoderation
Проблема связана с различием в в именовании экспортируемых функций соглашением
__stdcall в BCB и MSVC.
Maxim Mirgorodsky
Администратор
Сообщения: 6886 Зарегистрирован: 09:56, 27.06.2005
Сообщение
Maxim Mirgorodsky » 04:23, 29.09.2008
Chief
Это называется декорированием имен функций. В плагинах для CommFort оно не используется как раз для совместимости с разными средами программирования. В различных средах отключение декорирования делается по-разному. В MSVC один из способов - тот что Вы описали.
dv
Сообщения: 1845 Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар
Сообщение
dv » 05:30, 29.09.2008
[Cообщeние yдалено]
Последний раз редактировалось
dv 18:18, 29.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru
.
Maxim Mirgorodsky
Администратор
Сообщения: 6886 Зарегистрирован: 09:56, 27.06.2005
Сообщение
Maxim Mirgorodsky » 09:20, 29.09.2008
Попробуйте не сразу выходить. Команда публикации сообщения в приват отправляет запрос серверу, сервер возвращает клиенту информацию о доставке сообщения и в этот момент сообщение публикуется, то есть, если приват был закрыт, он откроется заново.
dv
Сообщения: 1845 Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар
Сообщение
dv » 09:56, 29.09.2008
[Cообщeние yдалено]
Последний раз редактировалось
dv 18:16, 29.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru
.
Maxim Mirgorodsky
Администратор
Сообщения: 6886 Зарегистрирован: 09:56, 27.06.2005
Сообщение
Maxim Mirgorodsky » 12:09, 29.09.2008
В данном случае более корректным будет не устанавливать паузу, а перехватывать событие публикации в приватный канал. И именно с этим событием связать закрытие канала. Потому что среда бывает разной, в некоторых сетях ответ от сервера может задержаться на несколько секунд.
NexxGen
Сообщения: 704 Зарегистрирован: 16:43, 03.04.2008
Откуда: Печора
Сообщение
NexxGen » 08:21, 30.09.2008
Возможность преключения плагина в "скрытый" режим, т.е. плагин работает, но в чате ввиде отдельного пользователя не отображается.
Z182712747589 и R377043131694 — для поддержки энтузиазма на добровольных началах))
NexxGen
Сообщения: 704 Зарегистрирован: 16:43, 03.04.2008
Откуда: Печора
Сообщение
NexxGen » 15:20, 12.10.2008
Клиент Commfort 4.02, при изменении состояния, НЕ отправляет пакеты на порт бота!
Z182712747589 и R377043131694 — для поддержки энтузиазма на добровольных началах))