C Examples
Math Provider
#include "saikuro.h"
#include <stdio.h>
char* add_handler(void* user_data, const char* args_json) {
// args_json is a JSON array, e.g. "[10, 32]"
// Return a JSON result as a heap string
return saikuro_string_dup("42");
}
int main() {
saikuro_provider_t provider = saikuro_provider_new("math");
saikuro_provider_register(provider, "add", add_handler, NULL);
saikuro_provider_serve(provider, "unix:///tmp/saikuro.sock");
saikuro_provider_free(provider);
return 0;
}
Client
#include "saikuro.h"
#include <stdio.h>
int main() {
saikuro_client_t client = saikuro_client_connect("unix:///tmp/saikuro.sock");
char* result = saikuro_client_call_json(client, "math.add", "[10, 32]");
printf("10 + 32 = %s\n", result);
saikuro_string_free(result);
saikuro_client_close(client);
saikuro_client_free(client);
return 0;
}
Stream
#include "saikuro.h"
#include <stdio.h>
int main() {
saikuro_client_t client = saikuro_client_connect("unix:///tmp/saikuro.sock");
saikuro_stream_t stream = saikuro_client_stream_json(client, "events.tick", "[5]");
char* item = NULL;
int done = 0;
while (saikuro_stream_next_json(stream, &item, &done) == 0 && !done) {
printf("tick: %s\n", item);
saikuro_string_free(item);
}
saikuro_stream_free(stream);
saikuro_client_close(client);
saikuro_client_free(client);
return 0;
}
Channel
#include "saikuro.h"
#include <stdio.h>
int main() {
saikuro_client_t client = saikuro_client_connect("unix:///tmp/saikuro.sock");
saikuro_channel_t ch = saikuro_client_channel_json(client, "chat.room", "[\"lobby\"]");
saikuro_channel_send_json(ch, "\"hello\"");
char* reply = NULL;
int done = 0;
saikuro_channel_next_json(ch, &reply, &done);
printf("reply: %s\n", reply);
saikuro_string_free(reply);
saikuro_channel_close(ch);
saikuro_channel_free(ch);
saikuro_client_close(client);
saikuro_client_free(client);
return 0;
}
Batch
#include "saikuro.h"
#include <stdio.h>
int main() {
saikuro_client_t client = saikuro_client_connect("unix:///tmp/saikuro.sock");
// calls_json is a JSON array of [target, args] tuples
char* results = saikuro_client_batch_json(client,
"[[\"math.add\", [1, 2]], [\"math.multiply\", [3, 4]]]");
printf("batch results: %s\n", results);
saikuro_string_free(results);
saikuro_client_close(client);
saikuro_client_free(client);
return 0;
}