Runtime Interpreter¶
By passing a file to cicada.py
, you can execute a series of commands that
interact with the Cicada API.
Each line is executed in order, and has a set of required parameters. Comment
lines start with a #
and are ignored.
SEND [host] [port] [data...]
Sends a message to a particular address.[port]
must be convertible to an integer.RECV [count]
Waits for a message to be received from anyone. The[count]
parameter is optional, and indicates the number of messages to wait for.BCAST [data...]
Sends the specified data to the entire swarm.OPT key1=value key2=value [key=value...]
Processes and sets the configurable options. All subsequent lines will have these options applied to them.WAIT [time (s)]
Waits for an incoming connection for a certain amount of time. If set to -1, waits indefinitely. This is useful for the first peer in a swarm.
Configurable Options¶
Parameter | Type | Description |
---|---|---|
duplicates | int |
Configures the number of extra paths to take for all of the SEND calls. |
Example Runtimes¶
You usually will want a single “server” runtime that starts the swarm; it waits for the other peers to join. This can look something like this:
WAIT -1
OPT duplicates=3
BCAST Hey everyone, I'm the original peer.
SEND localhost 49611 Hey there, specific client @ localhost:49611, it's me.
RECV 2
You would run this like so:
./cicada.py --interface localhost -p 49610 --no-port-mapping first.conf
Similarly, you’d want a “join immediately” peers that look something like this:
RECV 1
BCAST Hey everyone, I'm a new peer!
RECV 1
SEND localhost 49610 Hey there, localhost:49610; it's me.
This would be run like so:
./cicada.py --interface localhost -p 49611 --no-port-mapping --join localhost:49611 others.conf