Skip to content

Callbacks, enums & result codes

lattice_callbacks

All callbacks fire synchronously inside lattice_runner_tick() on the caller's thread. No exception may propagate out of a callback into the core. Install the table with lattice_runner_set_callbacks before start. Any function pointer left NULL simply isn't called.

typedef struct {
    void* user_data;
    void (*on_connected)    (void* user_data);
    void (*on_disconnected) (void* user_data, int reason);
    void (*on_spawned)      (void* user_data, lattice_netid id, lattice_type_id type, uint64_t owner);
    void (*on_despawned)    (void* user_data, lattice_netid id);
    void (*on_state_updated)(void* user_data, lattice_netid id);
    void (*on_rpc)          (void* user_data, lattice_netid id, uint16_t rpc_id,
                             const uint8_t* payload, uint32_t len);
    void (*on_event)        (void* user_data, uint16_t event_id, lattice_netid netid,
                             uint64_t sender, const uint8_t* payload, uint32_t len);
    void (*on_authority_changed)(void* user_data, lattice_netid id, uint64_t new_owner,
                                 uint32_t authority_tick);
    void (*on_log)          (void* user_data, lattice_log_level level, const char* msg);
    void (*on_violation)    (void* user_data, uint64_t conn, lattice_ac_violation violation,
                             uint32_t severity, int64_t detail);
    void (*on_http_result)  (void* user_data, uint64_t handle, int ok, int status,
                             const uint8_t* body, uint32_t body_len);
    void (*on_store_result) (void* user_data, uint64_t handle, int op, int ok, int found,
                             int from_cache, const uint8_t* value, uint32_t value_len);
} lattice_callbacks;
Callback Fires when Documented on
on_connected a session is established Runner
on_disconnected the session drops (reason is a code) Runner
on_spawned an object appears (id, type, owner) Types & objects
on_despawned an object is removed Types & objects
on_state_updated an object's replicated state converged Types & objects
on_rpc an RPC arrives RPC
on_event new a custom event arrives Events
on_authority_changed new a shared object's authority moves Authority
on_log the core emits a log line below
on_violation new anti-cheat rejects a submission Anti-cheat
on_http_result new a mediated fetch completes Jobs & fetch
on_store_result new a store op completes Store

Enums

lattice_game_mode

typedef enum {
    LATTICE_MODE_SERVER      = 0, /* dedicated server: authority, typically headless    */
    LATTICE_MODE_HOST        = 1, /* server that is also a local participant            */
    LATTICE_MODE_CLIENT      = 2,
    LATTICE_MODE_SHARED_HOST = 3  /* shared/distributed authority                        */
} lattice_game_mode;

lattice_connection_state

typedef enum {
    LATTICE_CONN_DISCONNECTED  = 0,
    LATTICE_CONN_CONNECTING,
    LATTICE_CONN_CONNECTED,
    LATTICE_CONN_DISCONNECTING
} lattice_connection_state;

lattice_field_kind

typedef enum {
    LATTICE_FIELD_BOOL = 0,
    LATTICE_FIELD_INT32,
    LATTICE_FIELD_INT64,
    LATTICE_FIELD_FLOAT,
    LATTICE_FIELD_DOUBLE,
    LATTICE_FIELD_RANGED_INT,
    LATTICE_FIELD_COMPRESSED_FLOAT,
    LATTICE_FIELD_VECTOR2,
    LATTICE_FIELD_VECTOR3,
    LATTICE_FIELD_VECTOR4,
    LATTICE_FIELD_QUATERNION,
    LATTICE_FIELD_STRING,
    LATTICE_FIELD_BYTES,
    LATTICE_FIELD_STRUCT
} lattice_field_kind;

lattice_log_level

typedef enum {
    LATTICE_LOG_TRACE = 0,
    LATTICE_LOG_DEBUG,
    LATTICE_LOG_INFO,
    LATTICE_LOG_WARN,
    LATTICE_LOG_ERROR
} lattice_log_level;
static void on_log(void* u, lattice_log_level lvl, const char* msg) {
    if (lvl >= LATTICE_LOG_WARN) fprintf(stderr, "[lattice] %s\n", msg);
}

The routing enums lattice_rpc_target and lattice_event_target, the lattice_ac_violation categories, and the lattice_http_* / lattice_store_* enums are documented on their own pages.


lattice_result

typedef enum {
    LATTICE_OK = 0,
    LATTICE_ERR_INVALID_ARG,
    LATTICE_ERR_NOT_AUTHORITY,
    LATTICE_ERR_NO_SESSION,
    LATTICE_ERR_UNKNOWN_TYPE,
    LATTICE_ERR_UNKNOWN_OBJECT,
    LATTICE_ERR_SCHEMA_MISMATCH,
    LATTICE_ERR_BUFFER_TOO_SMALL,
    LATTICE_ERR_NOT_CONNECTED,
    LATTICE_ERR_INTERNAL
} lattice_result;
Code Meaning
LATTICE_OK Success.
LATTICE_ERR_INVALID_ARG A NULL handle or out-of-range argument.
LATTICE_ERR_NOT_AUTHORITY An authority-only op (e.g. spawn) called on a client.
LATTICE_ERR_NO_SESSION No active session for the operation.
LATTICE_ERR_UNKNOWN_TYPE The lattice_type_id is not registered.
LATTICE_ERR_UNKNOWN_OBJECT The lattice_netid is not known.
LATTICE_ERR_SCHEMA_MISMATCH A type's content hash differs across peers.
LATTICE_ERR_BUFFER_TOO_SMALL An output buffer was too small.
LATTICE_ERR_NOT_CONNECTED A client op issued with no session.
LATTICE_ERR_INTERNAL An internal error.

Render any code with lattice_result_str(code) (Serialization → Misc helper).

POD value types

typedef struct { float x, y; }       lattice_vec2;
typedef struct { float x, y, z; }    lattice_vec3;
typedef struct { float x, y, z, w; } lattice_vec4;
typedef struct { float x, y, z, w; } lattice_quat;
typedef uint64_t lattice_netid;   /* NetworkObject id; 0 == invalid */
typedef uint32_t lattice_type_id; /* registered type id; 0 == invalid */