Giocci
Copy MarkdownGiocci is an Elixir library for interacting with the GiocciPlatform. It allows you to save Elixir modules to remote engines and execute their functions across the network.
Installation
Add giocci to your list of dependencies in mix.exs:
def deps do
[
{:giocci, "~> 0.3.0"}
]
endConfiguration
Configure Giocci in your config/config.exs:
config :giocci,
zenoh_config_file_path: "path/to/zenoh.json5", # Path to Zenoh configuration
client_name: "my_client", # Unique client identifier
key_prefix: "" # Optional key prefix for Zenoh keysConfiguration Options
zenoh_config_file_path(required): Path to the Zenoh configuration fileclient_name(required): Unique name to identify this client instancekey_prefix(optional): Prefix prepended to all Zenoh key expressions (default:"")
Usage
1. Register Client
Register your client with a relay:
:ok = Giocci.register_client("giocci_relay")2. Save Module
Here, the following module is assumed to be in your Elixir project.
defmodule MyModule do
def add(a, b), do: a + b
def multiply(a, b), do: a * b
endSave an Elixir module to the relay (which distributes it to engines):
:ok = Giocci.save_module("giocci_relay", MyModule)3. Execute Function (Synchronous)
Execute a function on a remote engine:
# Execute MyModule.add(1, 2)
result = Giocci.exec_func("giocci_relay", {MyModule, :add, [1, 2]})
# => 34. Execute Function (Asynchronous)
Execute a function asynchronously and receive the result as a message:
defmodule MyServer do
use GenServer
def start_link(_) do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def init(_) do
# Execute async function
:ok = Giocci.exec_func_async("giocci_relay", {MyModule, :multiply, [3, 4]}, self())
{:ok, %{}}
end
def handle_info({:giocci, result}, state) do
IO.puts("Received result: #{result}")
# => "Received result: 12"
{:noreply, state}
end
endOptions
All functions accept an optional opts keyword list:
:timeout- Request timeout in milliseconds (default: 5000)
Example:
Giocci.exec_func("giocci_relay", {MyModule, :add, [1, 2]}, timeout: 10_000)Running with Docker (for Testing)
The Docker environment is provided for troubleshooting network connectivity issues between Giocci, GiocciRelay, and GiocciEngine.
Prerequisites
- Docker and Docker Compose installed
- A running Zenoh daemon (zenohd)
- A running GiocciRelay instance
- A running GiocciEngine instance
Setup and Testing
Navigate to the giocci directory:
cd apps/giocciEdit
config/zenoh.json5to configure Zenoh connection:- This file is copied from the official Zenoh repository and modifiled for Giocci (check
MODIFIED_FOR_GIOCCIlabel in the file). - Set
connect.endpointsto your Zenohd server address (e.g.,["tcp/192.168.1.100:7447"])
- This file is copied from the official Zenoh repository and modifiled for Giocci (check
Edit
config/giocci.exsto configure the client:- Set
client_nameto identify this client instance - Ensure
relay_namein the config matches your running GiocciRelay instance
- Set
Start the client with IEx shell:
docker compose run --rm giocciIn the IEx shell, run the test:
iex(giocci@hostname)> Giocci.Sample.Test.exec("giocci_relay")Expected output:
2026-01-14 05:33:10.528 [info] register_client/1 success! 2026-01-14 05:33:10.537 [info] save_module/2 success! 2026-01-14 05:33:10.555 [info] exec_func/2 success! 2026-01-14 05:33:10.556 [info] exec_func_async/3 success! :ok
This test verifies:
- Client registration with the relay
- Module saving and distribution to engines
- Synchronous function execution
- Asynchronous function execution and result delivery
Troubleshooting
If the test fails or times out, check the logs of your running services:
# Check GiocciRelay logs
docker compose logs -f giocci_relay
# Check GiocciEngine logs
docker compose logs -f giocci_engine
# Check Zenohd logs
docker compose logs -f zenohd
Common issues:
- Connection timeout: Verify
connect.endpointsinconfig/zenoh.json5is correct - Relay not found: Ensure the relay name matches between client config and running relay
- Key prefix mismatch: Verify
key_prefixis the same across client, relay, and engine configurations - Module not loaded: Check engine logs for module loading errors
API Reference
See the HexDocs for detailed API documentation.
Architecture
For information about the overall GiocciPlatform architecture and communication flows, see the main README.