Обсуждение статьи "Связь ICQ и эксперта в MQL5"

 

Опубликована статья Связь ICQ и эксперта в MQL5:

В статье рассматривается способ двустороннего обмена текстовыми сообщениями между клиентами ICQ, используя средства программирования языка MQL5. Материал заинтересует тех, кто хочет получать торговую информацию из работающего торгового терминала удаленно, например, через ICQ клиента в своем мобильном телефоне или КПК.

Автор: Андрей

 

Спасибо за статью. Интересно получилось.

Хотя ModIcq прекрасно используется и без доработки, с доработанным вариантом работать проще :)

 
GarF1eld писал(а)  :

 ModIcq прекрасно используется и без доработки

IcqMod.dll использовать напрямую в MT5 не получится, т.к. она работает с Ansi строками, а в MT5 строки в Unicode формате. Поэтому, проект пришлось переделать под работу с сообщениями в Unicode(для этого в протоколе используется не бинарный а HTML формат). Теперь, отправляйте и получайте сообщения на любом языке мира! Надеюсь, проект будет востребованным, что позволит его улучшать согласно Вашим пожеланиям.

 
avoitenko:

IcqMod.dll использовать напрямую в MT5 не получится, т.к. она работает с Ansi строками, а в MT5 строки в Unicode формате.

Не совсем так. Есть возможность конвертнуть с помощью StringToCharArray. Например, у меня такой код работает

struct ICQ_CLIENT
{
        uchar status;
        ushort sequence;
        ulong sock;
};

#import "IcqMod.dll"
   ulong ICQConnect(ICQ_CLIENT& client, uchar& host[], ushort port, uchar& login[], uchar& pass[], int proxy);
   void  ICQClose(ICQ_CLIENT& client);
   ulong ICQSendMsg(ICQ_CLIENT& client, uchar& uin[], uchar& message[]);
   ulong ICQReadMsg(ICQ_CLIENT& client, uchar& uin[], uchar& msg[], int& msglen);
#import

void OnStart()
{
   // переводим строки в массив символов для передачи в dll
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // подключаемся
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // проверяем на входящие сообщения
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // UIN отправителя
            msgStr = CharArrayToString(msgR);     // сообщение
            
         uchar msgS[];
         // добавляем перед сообщением Получено: и отсылаем обратно
         StringToCharArray("Получено: " + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

Но конвертировать постоянно неудобно, поэтому Ваша библиотека намного юзабельней в этом смысле. 

Еще думал по поводу прокси. Возможно есть какие-то настройки, которые будут адекватно работать для локальной машины? То есть если мы не используем прокси, то в прокси выставляются какие-то настройки по умолчанию и все работает. Как вариант сделать в библиотеке 2 функции Connect - для варианта с прокси и без

 
GarF1eld писал(а)  :

Есть возможность конвертнуть с помощью StringToCharArray.

  Изменения, внесенные в библиотеку коснулись не только типа передаваемого значения для строк (был char* а стал wchar_t*). Это было бы слишком просто. Изменился формат передаваемого сообщения (смотри функцию BuildQuery_SendMsg_Unicode в исходном коде dll) который стал универсальным (HTML) в отличие от родного (бинарного). То, что передаваемые русские литеры через IcqMod принимаются правильно, это заслуга родной программы ICQ на которой вы это тестируете. Попробуйте протестировать на приём русских сообщений на сайте http://wap.ebuddy.com/ или альтернативном ICQ менеджере, и вместо кириллицы вы увидите каракули. Мной было перепробовано с десяток ICQ менеджеров, на которых мой проект корректно работает не только с кириллицей, но и с любым другим языком мира. Извините, конечно, за рекламу.

GarF1eld писал(а)  :

Еще думал по поводу прокси...

На счёт прокси. Тестировал, но не локальные а удаленные SOCK4/SOCK5. Что-то у меня не получалось с ними работать. Поэтому, в проекте решил вообще отказаться от них. Если нужно, попробую сделать.

 

Спасибо! Доходчиво объяснили.

 

Так, ветка давно не посещалась. У меня icq_power.mqh не компилируется, ругается *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initializing the compiler*.

Что бы это могло значить? 

 
sv_design:

Так, ветка давно не посещалась. У меня icq_power.mqh не компилируется, ругается *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initializing the compiler*.

Что бы это могло значить? 

это значит, что

MS Visual Studio compiler is not installed in the system

или

failed initializing the compiler

 
sv_design:

Что бы это могло значить? 

Или обновиться, или запустить МЕ под админом, или в сервисдеск.
 
avoitenko:

Попробуйте протестировать на приём русских сообщений на сайте http://wap.ebuddy.com/ или альтернативном ICQ менеджере, и вместо кириллицы вы увидите каракули. Мной было перепробовано с десяток ICQ менеджеров, на которых мой проект корректно работает не только с кириллицей, но и с любым другим языком мира. Извините, конечно, за рекламу.

Да кириллица не так и нужна, а вот теги html в сообщениях напрягают (и в квипе, и в родном ICQ последней версии). Уж лучше бы было сугубо на английском, но без тегов...
 

2 вопроса:

1) Ещё работает на x32 системах?  (возможности проверить у меня нет). 

2) Никто не переделывал под x64?  (под x64 не работает) .

Буду очень благодарен за ответ. Переделывать пробовал - не получилось - при работе ругается

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS: Нужно именно ICQ...
Причина обращения: