logos-delivery/library/events/message_events.nim
Ivan FB c64d156f2a
FFI: migrate liblogosdelivery root to nim-ffi v0.2.0-rc.3
Rewrite the FFI root over the new per-layer APIs using nim-ffi v0.2.0 typed
{.ffiCtor.}/{.ffiDtor.}/{.ffi.}/{.ffiEvent.} + CBOR, replacing the
hand-written cstring/JSON bridge. Events are fed by internal nim-broker
listeners (no AppCallbacks). Adds the messaging_api/channels_api groups and
the broker-listener event modules, and drops the v0.1 scaffolding
(declare_lib, node_api, node_lifecycle_api, logos_delivery_api/*, json_*).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 04:18:35 +02:00

50 lines
1.5 KiB
Nim

## Message events: send lifecycle (sent/error/propagated/received) plus raw
## inbound network messages. Each FFI event is fed by an internal broker event.
proc onMessageSent*(
requestId: string, messageHash: string
) {.ffiEvent: "on_message_sent".}
proc onMessageError*(
requestId: string, messageHash: string, error: string
) {.ffiEvent: "on_message_error".}
proc onMessagePropagated*(
requestId: string, messageHash: string
) {.ffiEvent: "on_message_propagated".}
proc onMessageReceived*(messageHash: string) {.ffiEvent: "on_message_received".}
proc onNetworkMessage*(
pubsubTopic: string, message: WakuMessage
) {.ffiEvent: "on_network_message".}
proc listenMessageEvents(self: LogosDelivery) =
let brokerCtx = self.waku.brokerCtx
discard MessageSentEvent.listen(
brokerCtx,
proc(e: MessageSentEvent) {.async: (raises: []).} =
onMessageSent($e.requestId, e.messageHash),
)
discard MessageErrorEvent.listen(
brokerCtx,
proc(e: MessageErrorEvent) {.async: (raises: []).} =
onMessageError($e.requestId, e.messageHash, e.error),
)
discard MessagePropagatedEvent.listen(
brokerCtx,
proc(e: MessagePropagatedEvent) {.async: (raises: []).} =
onMessagePropagated($e.requestId, e.messageHash),
)
discard MessageReceivedEvent.listen(
brokerCtx,
proc(e: MessageReceivedEvent) {.async: (raises: []).} =
onMessageReceived(e.messageHash),
)
discard MessageSeenEvent.listen(
brokerCtx,
proc(e: MessageSeenEvent) {.async: (raises: []).} =
onNetworkMessage(string(e.topic), e.message),
)