mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-05 07:23:12 +00:00
* Change folder structure to {v1,v2,common}/...
Addresses https://github.com/status-im/nim-waku/issues/261
* Update waku.nimble paths
* Flatten paths
* Fix import paths
* Pull out utils folder for nat
* Pull out waku_types to top level for v2
* Fix test import paths
* Remove old READMEs and replace with one liner
* Update README and split v1 and v2
* Skeleton READMEs
* Update README.md
Co-authored-by: Kim De Mey <kim.demey@gmail.com>
* Update README.md
Co-authored-by: Kim De Mey <kim.demey@gmail.com>
Co-authored-by: Kim De Mey <kim.demey@gmail.com>
38 lines
1.2 KiB
Nim
38 lines
1.2 KiB
Nim
import
|
|
std/tables,
|
|
chronos,
|
|
../waku_types
|
|
|
|
# The Message Notification system is a method to notify various protocols
|
|
# running on a node when a new message was received.
|
|
#
|
|
# Protocols can subscribe to messages of specific topics, then when one is received
|
|
# The notification handler function will be called.
|
|
proc subscribe*(subscriptions: MessageNotificationSubscriptions, name: string, subscription: MessageNotificationSubscription) =
|
|
subscriptions.add(name, subscription)
|
|
|
|
proc init*(T: type MessageNotificationSubscription, topics: seq[string], handler: MessageNotificationHandler): T =
|
|
result = T(
|
|
topics: topics,
|
|
handler: handler
|
|
)
|
|
|
|
proc containsMatch(lhs: seq[string], rhs: seq[string]): bool =
|
|
for leftItem in lhs:
|
|
if leftItem in rhs:
|
|
return true
|
|
|
|
return false
|
|
|
|
proc notify*(subscriptions: MessageNotificationSubscriptions, topic: string, msg: WakuMessage) {.async, gcsafe.} =
|
|
var futures = newSeq[Future[void]]()
|
|
|
|
for subscription in subscriptions.mvalues:
|
|
# @TODO WILL NEED TO CHECK SUBTOPICS IN FUTURE FOR WAKU TOPICS NOT LIBP2P ONES
|
|
if subscription.topics.len > 0 and topic notin subscription.topics:
|
|
continue
|
|
|
|
futures.add(subscription.handler(topic, msg))
|
|
|
|
await allFutures(futures)
|