diff options
Diffstat (limited to 'src/libclient')
| -rw-r--r-- | src/libclient/client.c | 73 | ||||
| -rw-r--r-- | src/libclient/client.h | 15 | ||||
| -rw-r--r-- | src/libclient/common.h | 5 |
3 files changed, 87 insertions, 6 deletions
diff --git a/src/libclient/client.c b/src/libclient/client.c index 58264e0..0776842 100644 --- a/src/libclient/client.c +++ b/src/libclient/client.c @@ -1,8 +1,41 @@ #include "client.h" +#include "common.h" #include "../server/common.h" -static struct aki_rpc_command commands[] = { }; +static bool results_callback(void *userdata, struct aki_rpc_connection *conn, + struct aki_packet *packet, struct aki_packet *rpacket) +{ + struct camu_client *client = (struct camu_client *)userdata; + (void)conn; + (void)rpacket; + + u8 op = aki_packet_read_u8(packet); + switch (op) { + case CAMU_CLIENT_CREATE_SEARCH: { + s32 id = aki_packet_read_s32(packet); + client->callback(client->userdata, CAMU_CLIENT_SEARCH_CREATED, &id); + break; + } + case CAMU_CLIENT_GET_PAGE: + client->callback(client->userdata, CAMU_CLIENT_PAGE_RESULTS, packet); + break; + } + + aki_packet_free(packet); + return false; +} + +static struct aki_rpc_command commands[] = { + { .op = CAMU_CLIENT_RESULTS, .callback = results_callback, .userdata = NULL } +}; + +static void idd_callback(void *userdata, struct aki_packet *packet) +{ + struct camu_client *client = (struct camu_client *)userdata; + (void)packet; + client->callback(client->userdata, CAMU_CLIENT_LOGIN, NULL); +} static void connection_callback(void *userdata, struct aki_rpc_connection *conn) { @@ -11,7 +44,7 @@ static void connection_callback(void *userdata, struct aki_rpc_connection *conn) struct aki_packet *packet = aki_rpc_get_packet(&client->client, CAMU_SERVER_IDENTIFY); aki_packet_write_u8(packet, CAMU_CLIENT); aki_packet_write_str(packet, &client->username); - aki_rpc_connection_command(client->conn, packet, NULL, NULL); + aki_rpc_connection_command(client->conn, packet, idd_callback, client); } static void connection_closed_callback(void *userdata, struct aki_rpc_connection *conn) @@ -47,12 +80,42 @@ void camu_client_create_list(struct camu_client *client, str *name, aki_rpc_connection_command(client->conn, packet, callback, userdata); } -void camu_client_enable_sink(struct camu_client *client, str *list, str *sink, +void camu_client_toggle_sink(struct camu_client *client, str *sink, str *list, bool enable, void (*callback)(void *, struct aki_packet *), void *userdata) { struct aki_packet *packet = aki_rpc_get_packet(&client->client, CAMU_SERVER_CLIENT_COMMAND); - aki_packet_write_u8(packet, CAMU_CLIENT_ENABLE_SINK); - aki_packet_write_str(packet, list); + aki_packet_write_u8(packet, CAMU_CLIENT_TOGGLE_SINK); aki_packet_write_str(packet, sink); + aki_packet_write_str(packet, list); + aki_packet_write_bool(packet, enable); aki_rpc_connection_command(client->conn, packet, callback, userdata); } + +void camu_client_create_search(struct camu_client *client, str *module, str *query) +{ + struct aki_packet *packet = aki_rpc_get_packet(&client->client, CAMU_SERVER_CLIENT_COMMAND); + aki_packet_write_u8(packet, CAMU_CLIENT_CREATE_SEARCH); + aki_packet_write_str(packet, module); + aki_packet_write_str(packet, query); + aki_rpc_connection_command(client->conn, packet, NULL, NULL); +} + +void camu_client_get_page(struct camu_client *client, s32 id, u32 num) +{ + struct aki_packet *packet = aki_rpc_get_packet(&client->client, CAMU_SERVER_CLIENT_COMMAND); + aki_packet_write_u8(packet, CAMU_CLIENT_GET_PAGE); + aki_packet_write_s32(packet, id); + aki_packet_write_u32(packet, num); + aki_rpc_connection_command(client->conn, packet, NULL, NULL); +} + +void camu_client_add(struct camu_client *client, str *list, str *unique_id, u32 index) +{ + struct aki_packet *packet = aki_rpc_get_packet(&client->client, CAMU_SERVER_LIST_ACTION); + aki_packet_write_str(packet, list); + aki_packet_write_u8(packet, CAMU_LIST_ADD); + aki_packet_write_u8(packet, CAMU_RESOURCE_PORTAL); + aki_packet_write_str(packet, unique_id); + aki_packet_write_u32(packet, index); + aki_rpc_connection_command(client->conn, packet, NULL, NULL); +} diff --git a/src/libclient/client.h b/src/libclient/client.h index a56be26..02a6639 100644 --- a/src/libclient/client.h +++ b/src/libclient/client.h @@ -2,11 +2,19 @@ #include <aki/rpc2.h> +enum { + CAMU_CLIENT_LOGIN = 0, + CAMU_CLIENT_SEARCH_CREATED, + CAMU_CLIENT_PAGE_RESULTS +}; + struct camu_client { struct aki_event_loop *loop; str username; struct aki_rpc client; struct aki_rpc_connection *conn; + void (*callback)(void *, u8, void *); + void *userdata; }; bool camu_client_login(struct camu_client *client, struct aki_event_loop *loop, @@ -14,5 +22,10 @@ bool camu_client_login(struct camu_client *client, struct aki_event_loop *loop, void camu_client_create_list(struct camu_client *client, str *name, void (*callback)(void *, struct aki_packet *), void *userdata); -void camu_client_enable_sink(struct camu_client *client, str *list, str *sink, +void camu_client_toggle_sink(struct camu_client *client, str *sink, str *list, bool enable, void (*callback)(void *, struct aki_packet *), void *userdata); + +void camu_client_create_search(struct camu_client *client, str *module, str *query); +void camu_client_get_page(struct camu_client *client, s32 id, u32 num); + +void camu_client_add(struct camu_client *client, str *list, str *unique_id, u32 index); diff --git a/src/libclient/common.h b/src/libclient/common.h new file mode 100644 index 0000000..5b8dcbf --- /dev/null +++ b/src/libclient/common.h @@ -0,0 +1,5 @@ +#pragma once + +enum { + CAMU_CLIENT_RESULTS = 0 +}; |