63 lines
1.8 KiB
Nim
63 lines
1.8 KiB
Nim
# SPDX-License-Identifier: LSL-1.0
|
|
# Copyright (c) 2026 Markus Maiwald
|
|
# Stewardship: Self Sovereign Society Foundation
|
|
#
|
|
# This file is part of the Nexus Sovereign Core.
|
|
# See legal/LICENSE_SOVEREIGN.md for license terms.
|
|
|
|
## Rumpk Layer 1: High-Level Sovereign Channels
|
|
|
|
# MARKUS MAIWALD (ARCHITECT) | VOXIS FORGE (AI)
|
|
# RUMPK CORE // CHANNEL
|
|
# The primitive for Typed Communication.
|
|
#
|
|
# DISTINCTION:
|
|
# - FIBER: Unit of EXECUTION (Sequential logic, stack-based).
|
|
# - CHANNEL: Unit of COMMUNICATION (Object transport, ID-based).
|
|
#
|
|
# Channels are the "Pipes" of NexShell. They carry KDL/JSON objects
|
|
# instead of raw byte streams.
|
|
|
|
{.push stackTrace: off, lineTrace: off.}
|
|
|
|
import ring
|
|
import crypto # For SipHash if needed, but for now we define ID type
|
|
|
|
type
|
|
ChannelID* = array[2, uint64] # 128-bit SipHash ID
|
|
|
|
Message* = object
|
|
## A typed payload carried by a channel
|
|
sender*: ChannelID
|
|
target*: ChannelID
|
|
payload*: pointer ## Pointer to KDL object in CAS/Heap
|
|
size*: uint64
|
|
|
|
Channel*[N: static[int]] = object
|
|
## A typed channel carrying Messages
|
|
id*: ChannelID
|
|
name*: cstring
|
|
buffer*: RingBuffer[Message, N]
|
|
|
|
proc init*[N: static[int]](chan: var Channel[N], id: ChannelID, name: cstring) =
|
|
chan.id = id
|
|
chan.name = name
|
|
chan.buffer.init()
|
|
|
|
proc send*[N: static[int]](chan: var Channel[N], msg: Message): bool =
|
|
## Send a message to the channel. Returns false if full.
|
|
chan.buffer.push(msg)
|
|
|
|
proc recv*[N: static[int]](chan: var Channel[N]): tuple[ok: bool,
|
|
msg: Message] =
|
|
## Receive a message from the channel.
|
|
chan.buffer.pop()
|
|
|
|
# =========================================================
|
|
# The Global Message Bus (The Hub)
|
|
# =========================================================
|
|
# In a full NexShell implementation, this would be a registry
|
|
# of Channels indexed by their SipHash ID.
|
|
|
|
{.pop.}
|