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):
op_connect_request(53):op | type(=1, async) | db_handle | partner(=0). A resposta (op_response) traz nop_resp_dataumsockaddr_inde 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).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)]….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.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§
- Event
Listener - Escuta de eventos: o canal auxiliar mais o estado de registro. Criada por
Connection::listen_events.