mirror of https://github.com/waku-org/nwaku.git
44 lines
1.5 KiB
Nim
44 lines
1.5 KiB
Nim
## This module helps to ensure the correct transmission and reception of messages
|
|
|
|
import results
|
|
import chronos
|
|
import
|
|
./recv_monitor,
|
|
./send_monitor,
|
|
./delivery_callback,
|
|
../../waku_core,
|
|
../../waku_store/client,
|
|
../../waku_relay/protocol,
|
|
../../waku_lightpush/client,
|
|
../../waku_filter_v2/client
|
|
|
|
type DeliveryMonitor* = ref object
|
|
sendMonitor: SendMonitor
|
|
recvMonitor: RecvMonitor
|
|
|
|
proc new*(
|
|
T: type DeliveryMonitor,
|
|
storeClient: WakuStoreClient,
|
|
wakuRelay: protocol.WakuRelay,
|
|
wakuLightpushClient: WakuLightPushClient,
|
|
wakuFilterClient: WakuFilterClient,
|
|
): Result[T, string] =
|
|
## storeClient is needed to give store visitility to DeliveryMonitor
|
|
## wakuRelay and wakuLightpushClient are needed to give a mechanism to SendMonitor to re-publish
|
|
let sendMonitor = ?SendMonitor.new(storeClient, wakuRelay, wakuLightpushClient)
|
|
let recvMonitor = RecvMonitor.new(storeClient, wakuFilterClient)
|
|
return ok(DeliveryMonitor(sendMonitor: sendMonitor, recvMonitor: recvMonitor))
|
|
|
|
proc startDeliveryMonitor*(self: DeliveryMonitor) =
|
|
self.sendMonitor.startSendMonitor()
|
|
self.recvMonitor.startRecvMonitor()
|
|
|
|
proc stopDeliveryMonitor*(self: DeliveryMonitor) {.async.} =
|
|
self.sendMonitor.stopSendMonitor()
|
|
await self.recvMonitor.stopRecvMonitor()
|
|
|
|
proc setDeliveryCallback*(self: DeliveryMonitor, deliveryCb: DeliveryFeedbackCallback) =
|
|
## The deliveryCb is a proc defined by the api client so that it can get delivery feedback
|
|
self.sendMonitor.setDeliveryCallback(deliveryCb)
|
|
self.recvMonitor.setDeliveryCallback(deliveryCb)
|