Discussão do artigo "Conexão do Expert Advisor com ICQ no MQL5"

 

Novo artigo Conexão do Expert Advisor com ICQ no MQL5 foi publicado:

Este artigo descreve o método de troca de informação entre o Expert Advisor e os usuários do ICQ, são apresentados vários exemplos. O material fornecido será interessante para aqueles que queiram receber informações de negócio remotamente de um terminal de cliente através de um cliente ICQ em seus celulares ou PDA.

Figura 4. Design de cor do componente visual do ICQ

Autor: Andrey Voytenko

 

Obrigado pelo artigo. Foi interessante.

Embora o ModIcq seja perfeitamente utilizável sem modificações, é mais fácil trabalhar com a versão modificada :)

 
GarF1eld писал(а) :

O ModIcq é perfeitamente utilizável sem modificações

O IcqMod.dll não pode ser usado diretamente no MT5, porque funciona com cadeias de caracteres Ansi, e no MT5 as cadeias de caracteres estão no formato Unicode. Portanto, o projeto teve de ser redesenhado para funcionar com mensagens em Unicode (para isso, o protocolo não usa formato binário, mas HTML). Agora, envie e receba mensagens em qualquer idioma do mundo! Espero que o projeto tenha demanda, o que permitirá aprimorá-lo de acordo com seus desejos.

 
avoitenko:

O IcqMod.dll não pode ser usado diretamente no MT5, porque funciona com cadeias de caracteres Ansi, e no MT5 as cadeias de caracteres estão no formato Unicode.

Não exatamente. É possível converter usando StringToCharArray. Por exemplo, este código funciona para mim

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()
{
   // converter strings em uma matriz de caracteres a ser passada para a dll
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // conectar
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // verificar se há mensagens recebidas
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // UIN do remetente
            msgStr = CharArrayToString(msgR);     // mensagem
            
         uchar msgS[];
         // adicionar antes da mensagem Received: e enviá-la de volta
         StringToCharArray("Recebido: " + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

Mas é inconveniente converter o tempo todo, portanto, sua biblioteca é muito mais útil nesse sentido.

Também pensei em proxies. Talvez existam algumas configurações que funcionem adequadamente em um computador local? Ou seja, se não usarmos um proxy, algumas configurações padrão serão definidas no proxy e tudo funcionará. Como uma opção para criar 2 funções Connect na biblioteca - para a variante com e sem proxy

 
GarF1eld писал(а) :

É possível converter usando StringToCharArray.

As alterações feitas na biblioteca não afetaram apenas o tipo de valor passado para strings (era char* e passou a ser wchar_t*). Isso seria muito simples. O formato da mensagem transmitida foi alterado (consulte a função BuildQuery_SendMsg_Unicode no código-fonte da dll), que se tornou universal (HTML) em vez de nativo (binário). O fato de os literais russos transmitidos pelo IcqMod serem recebidos corretamente é mérito do programa ICQ nativo no qual você está testando. Tente testar a recepção de mensagens em russo no http://wap.ebuddy.com/ ou em um gerenciador de ICQ alternativo e você verá rabiscos em vez de cirílico. Experimentei uma dúzia de gerenciadores de ICQ nos quais meu projeto funciona corretamente, não apenas com cirílico, mas também com qualquer outro idioma do mundo. Desculpe-me, é claro, pela propaganda.

GarF1eld escreveu(a) :

Também estou pensando em proxies...

Sobre proxies. Eu testei, mas não localmente, mas remotamente SOCK4/SOCK5. Não consegui trabalhar com eles. Por isso, decidi não usá-los de forma alguma no projeto. Se necessário, tentarei fazer isso.

 

Obrigado! Isso ficou muito claro.

 

Faz muito tempo que não visito este tópico. Meu icq_power.mqh não compila, ele diz *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initialising the compiler*.

O que isso pode significar?

 
sv_design:

Faz muito tempo que não visito este tópico. Meu icq_power.mqh não compila, ele diz *2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initialising the compiler*.

O que isso pode significar?

Significa que

O compilador do MS Visual Studio não está instalado no sistema

ou

falha ao inicializar o compilador

 
sv_design:

O que isso significa?

Atualize ou execute o ME com o administrador ou o servicedesk.
 
avoitenko:

Tente testar a recepção de mensagens em russo no http://wap.ebuddy.com/ ou em um gerenciador de ICQ alternativo e você verá rabiscos em vez de cirílico. Experimentei uma dúzia de gerenciadores de ICQ, nos quais meu projeto funciona corretamente não apenas com cirílico, mas também com qualquer outro idioma do mundo. Desculpe-me, é claro, pela propaganda.

O cirílico não é tão necessário, mas as tags html nas mensagens são estressantes (tanto no Quip quanto no ICQ nativo da versão mais recente). Seria melhor se fosse estritamente em inglês, mas sem tags....
 

2 perguntas:

1) Ele ainda funciona em sistemas x32? (Não tenho a chance de verificar).

2) Ninguém redesenhou para o x64? (no x64 não funciona).

Ficarei muito grato pela resposta. Tentei refazê-lo - não funcionou - quando estou trabalhando, ele trava

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS: Preciso exatamente do ICQ...