mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-07-10 18:29:30 +00:00
* Rename WakuMode to LogosDeliveryMode, add Fleet mode
* KernelConf (which starts only kernel) is now a distinct WakuNodeConf (starts messaging, for tests)
* Add LogosDelivery.new(kernelConf) (kernel-only)
* Add LogosDelivery.new(kernelConf, messagingOverrides, channelsOverrides) (full stack)
* LogosDeliveryConf.messagingOverrides/channelsOverrides are Option and mount each layer if present
* Add kernel-only LogosDeliveryConf.init(kernelConf)
* Parse {"mode": "fleet", "kernelConf": {...}} in parseLogosDeliveryConf
* Generalize parseOverrides to parse over caller-supplied defaults
* Add requireMessaging/requireChannels FFI guards and apply them
* Make start/stop skip layers that were not mounted (no config)
* Rename toKernelConf to toWakuNodeConf
* Add tests to test_conf.nim
* Misc additions/refactors
53 lines
1.6 KiB
Nim
53 lines
1.6 KiB
Nim
import ffi
|
|
import std/locks
|
|
import results
|
|
import logos_delivery
|
|
|
|
declareLibrary("logosdelivery")
|
|
|
|
var eventCallbackLock: Lock
|
|
initLock(eventCallbackLock)
|
|
|
|
template requireInitializedNode*(
|
|
ctx: ptr FFIContext[LogosDelivery], opName: string, onError: untyped
|
|
) =
|
|
if isNil(ctx):
|
|
let errMsg {.inject.} = opName & " failed: invalid context"
|
|
onError
|
|
elif isNil(ctx.myLib) or isNil(ctx.myLib[]):
|
|
let errMsg {.inject.} = opName & " failed: node is not initialized"
|
|
onError
|
|
|
|
template requireMessaging*(
|
|
ctx: ptr FFIContext[LogosDelivery], opName: string, onError: untyped
|
|
) =
|
|
## Use after `requireInitializedNode`. Fails if the node has no messaging client
|
|
## (a kernel-only / fleet node).
|
|
ctx.myLib[].ensureMessaging().isOkOr:
|
|
let errMsg {.inject.} = opName & " failed: " & error
|
|
onError
|
|
|
|
template requireChannels*(
|
|
ctx: ptr FFIContext[LogosDelivery], opName: string, onError: untyped
|
|
) =
|
|
## Use after `requireInitializedNode`. Fails if the node has no reliable channel
|
|
## manager (a kernel-only / fleet node).
|
|
ctx.myLib[].ensureChannels().isOkOr:
|
|
let errMsg {.inject.} = opName & " failed: " & error
|
|
onError
|
|
|
|
proc logosdelivery_set_event_callback(
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
|
) {.dynlib, exportc, cdecl.} =
|
|
if isNil(ctx):
|
|
echo "error: invalid context in logosdelivery_set_event_callback"
|
|
return
|
|
|
|
# prevent race conditions that might happen due incorrect usage.
|
|
eventCallbackLock.acquire()
|
|
defer:
|
|
eventCallbackLock.release()
|
|
|
|
ctx[].eventCallback = cast[pointer](callback)
|
|
ctx[].eventUserData = userData
|