Skip to content
Juvix imports

module arch.node.net.router;

import arch.node.net.router_messages open;
import arch.node.net.router_config open;
import arch.node.net.router_environment open;
import arch.node.net.router_behaviour open;
import arch.node.types.basics open;
import arch.node.types.engine open;
import arch.node.types.anoma as Anoma open;

open router_config_example;
open router_environment_example;
open router_behaviour_example;

Router Engine

Purpose

The Router engine is responsible for spawning a Node Proxy instance for each remote node, and a Pub/Sub Topic instance for each pub/sub topic. It maintains a database of known NodeAdvert and TopicAdvert messages.

Engine Components

Type

RouterEngine : Type :=
Engine
RouterLocalCfg
RouterLocalState
RouterMailboxState
RouterTimerHandle
RouterActionArguments
Anoma.Msg
Anoma.Cfg
Anoma.Env;

Instantiation

exRouterEngine : RouterEngine :=
mkEngine@{
cfg := exRouterCfg;
env := exRouterEnv;
behaviour := exRouterBehaviour;
};

Where exRouterCfg is defined as follows:

exRouterCfg : RouterCfg :=
mkEngineCfg@{
node := Curve25519PubKey "0xabcd1234";
name := "router";
cfg := mkRouterLocalCfg;
};

exRouterEnv is defined as follows:

exRouterEnv : RouterEnv :=
mkEngineEnv@{
localState := mkRouterLocalState;
mailboxCluster := Map.empty;
acquaintances := Set.empty;
timers := [];
};

and exRouterBehaviour is defined as follows:

module router_behaviour_example;
exRouterBehaviour : RouterBehaviour :=
mkEngineBehaviour@{
guards := First [exampleReplyGuard];
};
end;