Documentation

LE004: EVENT BUS (PUB/SUB + CHANNELS + PROCESSES + MULTI-MODULE)

Back to documentation index
---
{
  "@context": "https://nxdlang.org/schema",
  "doc_id": "LE004",
  "title": "",
  "description": "",
  "layer": "Examples",
  "category": "Large Examples",
  "keywords": [],
  "doc_version": "1.0",
  "status": "active"
}
---

# LE004: EVENT BUS (PUB/SUB + CHANNELS + PROCESSES + MULTI-MODULE)

### NXD
```nxd
MODULE bus.core

TYPE CHANNEL<string> { }

TYPE SUBSCRIBER { NAME: string, CH: CHANNEL<string> }

LET SUBS SET LIST<SUBSCRIBER> []

FUNC SUBSCRIBE(NAME: string): SUBSCRIBER:
    LET CH SET CHANNEL<string>()
    LET S SET SUBSCRIBER { NAME: NAME, CH: CH }
    PUSH SUBS, S
    RETURN S

FUNC PUBLISH(MSG: string):
    LOOP S IN SUBS:
        SEND MSG TO S.CH


MODULE bus.handlers
IMPORT bus.core

FUNC LOGGER(S: SUBSCRIBER):
    LOOP:
        LET M SET RECV S.CH
        PRINTLN("[" ADD S.NAME ADD "] " ADD M)

FUNC ALERT(S: SUBSCRIBER):
    LOOP:
        LET M SET RECV S.CH
        IF M CONTAINS "error":
            PRINTLN("ALERT: " ADD M)


MODULE app.main
IMPORT bus.core
IMPORT bus.handlers

FUNC MAIN():
    LET L SET SUBSCRIBE("logger")
    LET A SET SUBSCRIBE("alert")

    SPAWN LOGGER(L)
    SPAWN ALERT(A)

    PUBLISH("system started")
    PUBLISH("error: disk full")

    RETURN NONE
```