Страница 31 из 42
Re: Технология создания плагинов и программ-дополнений
Добавлено: 14:56, 30.01.2010
HukpoFuJl
О, отлично, доходчиво объяснил, спасиб огромное

Кстать,
Потом сам текст (длина + текст)
12 - длина текста - 18 байт
Далее 18 байт этого текста 28 30 5F EE 29 20 E3 E0 EC E0 F1 FF F7 E5 F1 F2 E2 EE (это (0_о) гамасячество)
Это не сам текст. а название канала
Сам текст (Длина + текст)
03 - длина текста - 3 байта
Далее 3 байта этого текста 31 32 33 (это 123)
Ещё раз спасибо, не ожидал так быстро добиться добиться подробного объяснения
ЗЫ: как я понял промежутки в виде 00 00 00 - это пропуски =)
Re: Технология создания плагинов и программ-дополнений
Добавлено: 16:20, 30.01.2010
~Alien~
ZigZagkms наверное нельзя найти через функцию FindWindowEx окно именно того канала, который вам нужен. Так как оно не имеет названия. Видимо
-=SJ=- просто проверяет с помощью спец. функции CommFortGetData активный на данный момент канал.
ЗЫ: как я понял промежутки в виде 00 00 00 - это пропуски =)
Нет. Просто длина текста должна быть представлена 4 байтами. Например, 05 00 00 00 (длина текста). Вот из-за этого и появляются эти нолики.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 03:45, 31.01.2010
HukpoFuJl
~Alien~ писал(а):Нет. Просто длина текста должна быть представлена 4 байтами. Например, 05 00 00 00 (длина текста). Вот из-за этого и появляются эти нолики.
Кхм, тоесть сумма
dec значений
hex последовательности 4 байт? т.е.
05 00 00 00 = 5 + 0 + 0 + 0 = 5
Я правильно понял?
Re: Технология создания плагинов и программ-дополнений
Добавлено: 11:44, 31.01.2010
ZigZagkms
HukpoFuJl писал(а):Кхм, тоесть сумма dec значений hex последовательности 4 байт? т.е.
05 00 00 00 = 5 + 0 + 0 + 0 = 5
Я правильно понял?
Не совсем так, для того чтобы перевести число 05 00 00 00 (представим в виде 0 5 0 0 0 0 0 0 и умножая каждое число на 10 в степени позиции числа с правой стороны) в десятичное:
(0 *10^8) + (5 *10^7) + (0 * 10^6) + (0 * 10^5) + (0 * 10^4) + (0 * 10^3) + (0 * 10^2) + (0 * 10^1) = 5
Используя ваш неверный способ максимальное число (FF FF FF FF) которое возможно передать (FF + FF + FF + FF = 1020)
На самом же деле максимальное 32 разрядное число - 4 294 967 295 (умещается в 4 байта)
upd: что то я тут напутал) вообщем неверно сказал =)
Re: Технология создания плагинов и программ-дополнений
Добавлено: 07:50, 02.02.2010
-=SJ=-
В дополнение к своему предыдущему посту (о том как встроить окно плагина в чат) выкладываю исходник с комментариями на Delphi.
В этом примере создается простая форма, которая привязывается к определенному каналу (канал sticky) и просто кнопка, которая размещается на главной форме чата.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 21:20, 04.02.2010
HukpoFuJl
Так, с получением сообщений от коммфорта разгрёбся... Назрел новый вопрос: Как их отсылать коммфорту?
Попробовал по обратному принципу, от принципа получения сообщения:
Например: ID: 100 (публикация в Events) Блок данных: число(стиль)+число(время)+число(тип протоколирования)+текст(текст публикации)
Код: Выделить всё
кол-во символов в тексте v
0х(64 00 00 00) (00) (00) (01) (03) (2B 2B 2B)
ID события^ стиль^время^ ^протоколир. ^текст
Вроде всё правильно, отправляю строку 0х64000000000001032B2B2B и ничего не происходит
Где я ошибся?
UPD: Заметил, что отсылаемый ботом код бот сам и принимает

Может я не туда его просто шлю??
Re: Технология создания плагинов и программ-дополнений
Добавлено: 22:45, 06.02.2010
-=SJ=-
HukpoFuJl писал(а):Так, с получением сообщений от коммфорта разгрёбся... Назрел новый вопрос: Как их отсылать коммфорту?
Попробовал по обратному принципу, от принципа получения сообщения:
Например: ID: 100 (публикация в Events) Блок данных: число(стиль)+число(время)+число(тип протоколирования)+текст(текст публикации)
Код: Выделить всё
кол-во символов в тексте v
0х(64 00 00 00) (00) (00) (01) (03) (2B 2B 2B)
ID события^ стиль^время^ ^протоколир. ^текст
Вроде всё правильно, отправляю строку 0х64000000000001032B2B2B и ничего не происходит
Где я ошибся?
UPD: Заметил, что отсылаемый ботом код бот сам и принимает

Может я не туда его просто шлю??
Нет не правильно
любое числовое значение в отправляемом сообщении должно быть 4х байтным
Код: Выделить всё
кол-во символов в тексте v
0х(64 00 00 00) (00 00 00 00) (00 00 00 00) (01 00 00 00) (03 00 00 00) (2B 2B 2B)
ID события^ стиль^ время^ ^протоколир. ^текст
Re: Технология создания плагинов и программ-дополнений
Добавлено: 12:47, 07.02.2010
HukpoFuJl
Да, я это заметил почти сразуже, ток в посте исправить не успел...
Всё равно одна и таже хрень, отправляю коммфорту строку 0x64000000000000000000000001000000030000002B2B2B. А ему как горохом в стену... Бот принимает свойже пакет, а коммфорт нет... Попробовал открыть на коммфорте ещё один порт отдельно, по которому мой бот не принимает сообщения... Отправляю строку на этот порт - результат тотже =(( никакого эффекта...
Re: Технология создания плагинов и программ-дополнений
Добавлено: 16:56, 07.02.2010
-=SJ=-
HukpoFuJl писал(а):Да, я это заметил почти сразуже, ток в посте исправить не успел...
Всё равно одна и таже хрень, отправляю коммфорту строку 0x64000000000000000000000001000000030000002B2B2B. А ему как горохом в стену... Бот принимает свойже пакет, а коммфорт нет... Попробовал открыть на коммфорте ещё один порт отдельно, по которому мой бот не принимает сообщения... Отправляю строку на этот порт - результат тотже =(( никакого эффекта...
Во первых порт бота на который бот принимает пакеты и с которого отправляет должен быть одним и тем же.
Во вторых слать сообщение надо на тот порт коммфорта с которого было принято сообщение от него. т.е. этот порт не задан фиксированно и от подключения к подключению может меняться, поэтому его надо определять программно.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 04:16, 08.02.2010
HukpoFuJl
Блин, суть я понял, спасибо

То-то я тоже думал, как могут приложения вдвоём на одном порту работать нормально

))
Но всё равно меня тупит по ужасу...
Пишу на
AutoIT, эт скриптовый язык, по сути до ужоса упрощённый
С...
В общем функции обработки UDP там такие:
======================================
UDPBind
Создать UDP сокет, связанный со входящим подключением.
Синтаксис: UDPBind ( $IPAddr, $port )
Параметры:
$IPAddr - Адрес протокола интернет (Internet Protocol -IpV4) в виде "192.162.1.1".
$port - номер порта, соответствующего открываемому сокету.
Возвращаемое значение:
Идентификатор главного сокета. В случае ошибки возвращается -1, а значение @error устанавливается равным номеру ошибки согласно Windows API функции WSAGetLasterror.
======================================
UDPOpen
Открыть сокет, соответствующий подключению к имеющемуся серверу.
Синтаксис: UDPOpen ( $IPAddr, $port )
Параметры такиеже как и в UDPBind
Возвращаемое значение:
Массив array, в котором $array[1] равен реальному сокету, $array[2] - указанный IP адрес, а $array[3] - порт. Эта информация требуется в последующих вызовах UDPSend(). В случае ошибки массив array, в котором $array[1] равен -1, а значение @error устанавливается равным номеру ошибки согласно Windows API функции WSAGetLasterror.
Замечания:
Используется обмена данными приложения-клиента с сервером.
======================================
UDPRecv
Получить данные, используя открытый ранее сокет
Синтаксис: UDPRecv ( $socket, $maxlen )
Параметры:
$socket - Главный идентификатор сокета (SocketID), возвращаемый функцией UDPBind.
$maxlen - Максимальное число получаемых символов
Возвращаемое значение:
Строка данных, переданных через сокет. В случае ошибки возвращается пустая строка "", а значение @error устанавливается равным номеру ошибки согласно Windows API функции WSAGetLasterror.
======================================
UDPSend
Выслать данные, используя открытый ранее сокет
Синтаксис: UDPSend ( $socket, $data )
Параметры:
$socket - Главный идентификатор сокета (SocketID), возвращаемый функцией UDPOpen.
$data - Содержание строки передаваемого текста или бинарной строки в сокет подключения
Возвращаемое значение:
Количество переданных через сокет данных. В случае ошибки возвращается 0, а значение @error устанавливается равным номеру ошибки согласно Windows API функции WSAGetLasterror.
======================================
Ну это в кратце нужные функции...
В общем делаю(в кратце):
$bindport = UDPBind (127.0.0.1, 16770) ;открываю порт для приёма данных.
$openport = UDPOpen (127.0.0.1, 16770) ;получаю массив из:
$openport[1] = порт по которому коммфорт отправляет данные,
$openport[2] = !Р адрес,
$openport[3] = порт по которому я отсылаю данные(16770)
$datarecive = UDPRecv ($bindport, 100000) ;запрос на получение данных (у меня он в цикле)
;
$datarecive = строка отправляемая коммфортом...
; далее бла-бла-бла, тело программы...
; и потом выполнение отсылки готового кода $datasend
UDPSend ($openport[1], $datasend)
;в результате 0 эффекта,
$datasend имеет правильный формат, всё по госту короче

Но коммфорт молчит, хотьбы ошибку выдал чтоли...
Спасите заблудшую душу

Re: Технология создания плагинов и программ-дополнений
Добавлено: 08:06, 08.02.2010
Maxim Mirgorodsky
При подключении к серверу CommFort client отправляет всем программам-дополнениям первый пакет по которому можно узнать адрес (порт), по которому необходимо слать сообщения CommFort'у. При этом отправлять сообщения необходимо строго с того адреса (и порта), который указан в UDPAddons.ini.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 22:56, 13.02.2010
DeBugger
Я просмотрел всю тему, но что то не нашел ни одного примера не дельфе, который реализовывал бы простейшего UPD бота. Ткните носом пожалуйста, если я пропустил
Добавлено:
Какбэ мне бы только саму работу с UDP а то не компилится не один пример. Среда Delphi 2009
Re: Технология создания плагинов и программ-дополнений
Добавлено: 23:42, 13.02.2010
~Alien~
Re: Технология создания плагинов и программ-дополнений
Добавлено: 23:52, 13.02.2010
DeBugger
Re: Технология создания плагинов и программ-дополнений
Добавлено: 06:19, 14.02.2010
dv
[Сообщение yдалено]