Skip to content
Juvix imports

module arch.node.net.transport;

import arch.node.net.transport_messages open;
import arch.node.net.transport_config open;
import arch.node.net.transport_environment open;
import arch.node.net.transport_behaviour open;
import arch.node.types.basics open;
import arch.node.types.engine open;
import arch.node.types.anoma as Anoma open;

open transport_config_example;
open transport_environment_example;

Transport Engine

Purpose

The Transport engine is responsible for establishing and accepting transport connections via one of the Transport Protocol engines, each of which responsible for a specific transport protocol, such as QUIC or TLS.

Engine Components

  • Transport Messages
  • Transport Config
  • Transport Environment
  • Transport Behaviour

Type

TransportEngine : Type :=
Engine
TransportLocalCfg
TransportLocalState
TransportMailboxState
TransportTimerHandle
TransportActionArguments
Anoma.Msg
Anoma.Cfg
Anoma.Env;

Instantiation

transportEngine : TransportEngine :=
mkEngine@{
cfg := transportCfg;
env := transportEnv;
behaviour := transportBehaviour;
};

Where transportCfg is defined as follows:

transportCfg : TransportCfg :=
mkEngineCfg@{
node := Curve25519PubKey "0xabcd1234";
name := "transport";
cfg := mkTransportLocalCfg;
};

transportEnv is defined as follows:

transportEnv : TransportEnv :=
mkEngineEnv@{
localState := mkTransportLocalState;
mailboxCluster := Map.empty;
acquaintances := Set.empty;
timers := [];
};

and transportBehaviour is defined as follows:

transportBehaviour : TransportBehaviour :=
mkEngineBehaviour@{
guards := First [exampleReplyGuard];
};