IBM, que significa Interface Between Macros, define um padrão de comunicação entre macros. Essa interface foi concebida originalmente para realizar a integração dos módulos do framework Modular. Porém desde então a ideia vem sendo aperfeiçoada para atender a necessidades do grupo Macrosoft.
Este documento é dividido em duas partes:
Logo depois de toda requisição é necessário adicionar o código padrão para requisição
A requisição a um provider é feita alterando o conteúdo da variável &ibm_request_
da seguinte forma. Se nome do arquivo do provedor é meuprovedor.txt
, então para requisitar este arquivo basta alterar a variável para &ibm_request_="meuprovedor()";
Alternativamente é possível passar parâmetros da seguinte forma:
&ibm_request_="meuprovedor(parâmetro 1¬parâmetro 2¬hello world,7¬9)";
Nesta situação foram passados quatro parâmetros
parâmetro 1
parâmetro 2
hello world,7
9
¬
Após a requisição, aguarda-se que o provider execute o seu código. O provedor pode retornar algum valor. Este valor estará disponível na variável &ibm_response_
.
Após a requisição, a variável #ibm_success_
assume o valor 1
se a transação ocorreu com sucesso. Ou assume o valor 0
se a transação não ocorreu com sucesso, onde por exemplo a macro requisitada não existe.
Alternativamente é possível definir uma mensagem de sincronização SYN. Isso pode ser feito da seguinte forma.
&ibm_request_="meuprovedor:olá mundo(foo¬baz)";
Neste caso a mensagem de sincronização foi
olá mundo
Para que uma macro ser torne um provedor é necessário que trechos de código sejam inseridos início e no fim da sua macro. Isso já é feito automaticamente pelo criador de plugs IBM da Macrosoft®.
Os parâmetros recebidos pelo requester ficam disponíveis nos arrays &inputs_[]
e #inputs_[]
.
Para definir um retorno para o requester modifique o conteúdo da variável &ibm_return_
. Mas isso precisa ser feito antes do código do provedor inserido no fim da sua macro.
Para definir uma mensagem de reconhecimento ACK modifique o conteúdo da variável &pim_ack_message_
. Mas isso precisa ser feito antes do código do provedor inserido no início da sua macro.
O propósito deste protocolo é:
Em uma transação, a conexão será o primeiro passo realizado.
@&pim_0000000
)PIMSYN:alguma mensagem
. A mensagem é definida pelo conteúdo de &pim_syn_message_
EXEC
ou run
. O 10º parâmetro é o nome do socket.#api_request_timeout_
até receber a mensagem de reconhecimento ACK da macro B. Se a macro B demorar demais a responder, o processo é finalizado e o status de sucesso da transação #ibm_success_
é definido como False.&inputs_[]
e #inputs_[]
e acessa o socket cujo nome foi recebido no décimo parâmetroPIMACK:alguma mensagem
. A mensagem é definida pelo conteúdo de &pim_ack_message_
PIMEND:alguma mensagem
e finaliza a sua execução. A mensagem é definida pelo conteúdo de &ibm_return_
&ibm_response_
ou #ibm_response_
. O status de sucesso da transação #ibm_success_
é definido como True.Um plhgin IBM é um pacote de um ou mais serviços. Esses pacotes são construídos automaticamente pela aplicação de criação de plugs IBM da Macrosoft®.
Várias macros podem ser empacotadas em um único arquivo. Cada macro pode ser requisitada separadamente como um serviço. Basta requisitar o arquivo como um provider IBM e passar o nome do serviço através da mensagem de sincronização SYN.
O serviço comum entre todos os plugs IBM é o info
. Este serviço retorna uma string contendo o nome do criador do plug e os serviços contidos naquele plug, cada um destes elementos sepadados por ,
.
Os retornos comuns entre todos os plugs IBM são
empty
que indica que a mensagem de sincronização SYN foi passada como uma string vazianot_found
que indica que o serviço requisitado não existe naquele plug