mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-04 06:53:12 +00:00
* Upgrade lpt to new config methods * Make choice of legacy and v3 lightpush configurable on cli * Adjust runner script to allow easy lightpush version selection * Prepare selectable lightpush for infra env runs * Fix misused result vs return * Fixes and more explanatory comments added * Fix ~pure virtual~ notice to =discard
30 lines
1021 B
Nim
30 lines
1021 B
Nim
import results, options, chronos
|
|
import waku/[waku_node, waku_core, waku_lightpush]
|
|
import publisher_base
|
|
|
|
type V3Publisher* = ref object of PublisherBase
|
|
|
|
proc new*(T: type V3Publisher, wakuNode: WakuNode): T =
|
|
if isNil(wakuNode.wakuLightpushClient):
|
|
wakuNode.mountLightPushClient()
|
|
|
|
return V3Publisher(wakuNode: wakuNode)
|
|
|
|
method send*(
|
|
self: V3Publisher,
|
|
topic: PubsubTopic,
|
|
message: WakuMessage,
|
|
servicePeer: RemotePeerInfo,
|
|
): Future[Result[void, string]] {.async.} =
|
|
# when error it must return original error desc due the text is used for distinction between error types in metrics.
|
|
discard (
|
|
await self.wakuNode.lightpushPublish(some(topic), message, some(servicePeer))
|
|
).valueOr:
|
|
if error.code == NO_PEERS_TO_RELAY and
|
|
error.desc != some("No peers for topic, skipping publish"):
|
|
# TODO: We need better separation of errors happening on the client side or the server side.-
|
|
return err("dial_failure")
|
|
else:
|
|
return err($error.code)
|
|
return ok()
|