Skip to main content

Module events

Module events 

Source
Expand description

Eventos do banco (POST_EVENT / isc_que_events).

Uma conexão registra interesse em eventos nomeados; quando outra conexão faz POST_EVENT 'nome' e commita, o servidor notifica por um canal auxiliar (um segundo socket TCP). O fluxo de wire (decodificado de um cliente C com isc_wait_for_event, sob strace):

  1. op_connect_request (53): op | type(=1, async) | db_handle | partner(=0). A resposta (op_response) traz no p_resp_data um sockaddr_in de 16 bytes — família(2) | porta(2 BE) | ip(4) | zeros(8) — com a porta do canal auxiliar. O cliente abre um novo socket TCP para (ip do servidor, porta).
  2. op_que_events (48): op | db_handle | epb(cstring) | ast(4=0) | arg(4=0) | event_id(4). O EPB é versão(1) | [namelen(1) | nome | count(4 LE)]….
  3. op_event (52) chega pelo canal auxiliar quando um evento é postado: op | db_handle | epb(cstring com os counts atualizados) | ast(4) | event_id(4). Comparando os counts com os anteriores sabemos o que disparou.
  4. op_cancel_events (49): op | db_handle | event_id.

Os eventos são one-shot: após cada notificação é preciso registrar de novo (o que EventListener::wait faz automaticamente).

Structs§

EventListener
Escuta de eventos: o canal auxiliar mais o estado de registro. Criada por Connection::listen_events.