Технология создания плагинов и программ-дополнений

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

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

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

На данный момент нет.
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

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

Хочу выяснить присутствуют ли для плагина к серверу такие функции как:
1. Получение списка и количества пользователей в определённом канале
2. Считывание сообщений из опредённого канала (включая имя отправившего, время...)
Не важно как долго ты будеш подниматься, упасть ты можеш в мгновенье ока.
Макс Пейн.
SunnySan
Сообщения: 357
Зарегистрирован: 22:34, 24.05.2008
Контактная информация:

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

Сообщение SunnySan »

$teelR@t писал(а):Хочу выяснить присутствуют ли для плагина к серверу такие функции как:
1. Получение списка и количества пользователей в определённом канале
2. Считывание сообщений из опредённого канала (включая имя отправившего, время...)
На все эти вопросы можно найти ответ тут.
1. Да и да.
2. Да (но без времени)
Зло - это невежество
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

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

Сообщение Modesty »

Перевёл пример Null плагина к клиенту на Delphi.
Получилось отобразить название активного канала.
А вот отправка сообщения зациклевается. После введеного слова плагин постоянно отправляет в чат одну и туже строку.
Не могу понять в чем дело. Help!

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

 function PluginProcess(dwMessageID : DWORD; bMessage : PString; dwMessageLength : DWORD) : BYTE;
var aMessageToSend : AnsiString;
    aChannel : AnsiString;
    iLen : Integer;
 
begin
 if dwMessageID = 5 then
  begin
   aMessageToSend:=MsgToChannel('main','text');
   CommFortProcess(dwPluginID, 50, Pchar(aMessageToSend), Length(aMessageToSend));
  //Пример получения и отображения названия активного канала:
	{	iLen := CommFortGetData(11, nil, 0);
		SetLength(aChannel, iLen);
		CommFortGetData(11, Pchar(aChannel), iLen);
		ShowMessage(aChannel);}
 end;

 Result := 0;
end;
итог в чате:
.....
[16:54:09] Modesty: text
[16:54:09] Modesty: text
[16:54:09] Modesty: text
[16:54:09] Modesty: text
и т.д. до победного.
........
Аватара пользователя
dv
Сообщения: 1845
Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар

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

Сообщение dv »

[Cooбщение удаленo]
Последний раз редактировалось dv 03:34, 26.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru




.
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

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

Сообщение Modesty »

dv писал(а): всё верно:
Сообственно как от этого избавиться??
На сколько я понимаю Result:=0 должен решать эту проблему.
Аватара пользователя
dv
Сообщения: 1845
Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар

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

Сообщение dv »

[Cooбщение удаленo]
Последний раз редактировалось dv 03:34, 26.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru




.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Добрый день. Не могли бы Вы подсказать как правильно из плагина для клиента отсылать сообщения в чат. Вот мой код:

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

function MsgToChannel(сhannel, text : String): TStringStream;
var 
    i : Longint;
begin
   Result:=TStringStream.Create('');
   Result.Position:=0;
   i:=0;
   Result.Write(I,4);
   i:=length(channel);
   Result.Write(I,4);
   Result.WriteString(channel);
   i := length(text);
   Result.Write(I,4);
   Result.WriteString(text);
 end;
........................
var
aMessageToSend:TStringStream;
begin
aMessageToSend:=MsgToChannel('main','TEST');
CommFortProcess(dwPluginID,50,PChar(aMessageToSend.DataString),Length(aMessageToSend.DataString));
........................
Не могу понять почему оно не работает, может я ошибся с кодом 50? Или не правильно организована функция MsgToChannel (если не сложно подправьте её)?
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

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

Сообщение Modesty »

VIRUS писал(а): Не могу понять почему оно не работает, может я ошибся с кодом 50? Или не правильно организована функция MsgToChannel (если не сложно подправьте её)?

код 50 верен. Функция организована правельно, но не совсем. Почитай руководство по плагинам.

Без функции (процедуры) я сформировал строчку для отправки так:

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

aMessageToSend:=chr(Length(Channel))+#0#0#0+Channel+chr(Length(Text))+#0#0#0+Text; {AnsiString}
CommFortProcess(dwPluginID, 50, Pchar(aMessageToSend), Length(aMessageToSend));
Channel - название канал
Text - отправляемы текст

удачи.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Modesty спасибо тебе большое, все получилось.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
-=SJ=-
Сообщения: 246
Зарегистрирован: 02:21, 06.04.2007

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

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

Modesty писал(а):

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

aMessageToSend:=chr(Length(Channel))+#0#0#0+Channel+chr(Length(Text))+#0#0#0+Text; {AnsiString}
CommFortProcess(dwPluginID, 50, Pchar(aMessageToSend), Length(aMessageToSend));
А если текст длиннее 255 символов? :D

P.S. Вместо

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

Length(aMessageToSend.DataString)
использую свойство стрингстрима Size

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

aMessageToSend.Size
P.P.S. Вот твоя проблема. Зачем ты заполняешь нулями первые четыре байта стрима?
Убери эти две строки из кода

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

i:=0;
Result.Write(I,4);
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

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

Сообщение Modesty »

-=SJ=- писал(а):А если текст длиннее 255 символов?
Это верно.
Для начала я дал рабочий пример.
А дальше, обратить внимание стоит на второй байт текста

aMessageToSend:=chr(Length(Channel))+#0#0#0+Channel+chr(Length(Text))+#0#0#0+Text;

Если он будет не нулем, а например единицей к длине текста добавляется + 255 символов. А если 2 будет? :wink:
Конечно текст и длину текста нужно сочитать.

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

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

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

dv писал(а):
-=SJ=- писал(а):Delphi Null плагин для клиента чата CommFort версии 4.20+
кажыся нерабочий.
эммм дико извиняюсь :roll: но только сечас (да, да через полтора месяца :() прочел этот пост...
Если еще актуально то что именно не рабатает?
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

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

Сообщение Modesty »

-=SJ=- писал(а): эммм дико извиняюсь :roll: но только сечас (да, да через полтора месяца :() прочел этот пост...
Если еще актуально то что именно не рабатает?

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

{$E 'cfcplug'}
опечатка в букавах. :)
Аватара пользователя
-=SJ=-
Сообщения: 246
Зарегистрирован: 02:21, 06.04.2007

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

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

Modesty писал(а):
-=SJ=- писал(а): эммм дико извиняюсь :roll: но только сечас (да, да через полтора месяца :() прочел этот пост...
Если еще актуально то что именно не рабатает?

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

{$E 'cfcplug'}
опечатка в букавах. :)
И в чем опечатка?
Помоему все правильно cfcplug CommFortClientPLUGin
Закрыто