diff options
Diffstat (limited to 'src/libclient')
| -rw-r--r-- | src/libclient/client.c | 31 | ||||
| -rw-r--r-- | src/libclient/client.h | 2 | ||||
| -rw-r--r-- | src/libclient/resource_client.c | 9 | ||||
| -rw-r--r-- | src/libclient/resource_client.h | 5 |
4 files changed, 25 insertions, 22 deletions
diff --git a/src/libclient/client.c b/src/libclient/client.c index 71825e3..1194994 100644 --- a/src/libclient/client.c +++ b/src/libclient/client.c @@ -31,9 +31,6 @@ static void connection_closed_callback(void *userdata, struct aki_rpc_connection static u8 packet_pool_callback(void *userdata, struct aki_packet *packet) { struct camu_client *client = (struct camu_client *)userdata; - while (!client->conn) { - aki_event_loop_run_once(client->loop); - } aki_rpc_connection_command(client->conn, packet, packet->userdata, client); return AKI_PACKET_POOL_NOP; } @@ -112,6 +109,10 @@ bool camu_client_login(struct camu_client *client, str *username, str *addr, s32 if (!aki_rpc_connect(&client->client, client->loop, addr, port)) { return false; } + while (!client->conn) { + aki_event_loop_run_once(client->loop); + } + // TODO: Timeout. return true; } @@ -144,29 +145,31 @@ static void results_callback(void *userdata, struct aki_packet *packet) { struct camu_client *client = (struct camu_client *)userdata; + s32 id = aki_packet_read_s32(packet); + s32 ok = aki_packet_read_s32(packet); if (ok != 0) { - client->callback(client->userdata, CAMU_CLIENT_END_OF_RESULTS, NULL); + client->callback(client->userdata, CAMU_CLIENT_END_OF_RESULTS, &id); return; } - s32 id = aki_packet_read_s32(packet); struct camu_search *search = get_search_from_id(client, id); if (!search) return; u32 page_num = aki_packet_read_u32(packet); - struct camu_result_list *list; - al_array_foreach(search->lists, i, list) { - if (list->num == page_num) { + struct camu_result_list *results; + al_array_foreach(search->lists, i, results) { + if (results->num == page_num) { al_log_warn("client", "Requested page was already loaded."); return; } } - list = al_alloc_object(struct camu_result_list); - al_array_push(search->lists, list); - list->num = page_num; - al_array_init(list->unique_ids); + results = al_alloc_object(struct camu_result_list); + al_array_push(search->lists, results); + results->num = page_num; + al_array_init(results->unique_ids); + results->search = search; u32 size = aki_packet_read_u32(packet); for (u32 i = 0; i < size; i++) { @@ -181,10 +184,10 @@ static void results_callback(void *userdata, struct aki_packet *packet) for (u32 i = 0; i < size; i++) { aki_packet_read_str(packet, &s); al_str_clone(&unique_id, &s); - al_array_push(list->unique_ids, unique_id); + al_array_push(results->unique_ids, unique_id); } - client->callback(client->userdata, CAMU_CLIENT_RESULTS, list); + client->callback(client->userdata, CAMU_CLIENT_RESULTS, results); } void camu_client_get_page(struct camu_client *client, struct camu_search *search, u32 num) diff --git a/src/libclient/client.h b/src/libclient/client.h index 2b2e093..edb7881 100644 --- a/src/libclient/client.h +++ b/src/libclient/client.h @@ -23,8 +23,8 @@ struct camu_list { struct camu_result_list { u32 num; - s32 search_id; array(str) unique_ids; + struct camu_search *search; }; struct camu_search { diff --git a/src/libclient/resource_client.c b/src/libclient/resource_client.c index 1e07b0b..0318305 100644 --- a/src/libclient/resource_client.c +++ b/src/libclient/resource_client.c @@ -48,6 +48,7 @@ static void signal_callback(void *userdata) aki_packet_write_str(packet, &request.unique_id); aki_packet_write_u32(packet, request.index); aki_packet_stream_send_packet(&client->client, packet); + al_str_free(&request.unique_id); } while (1); } @@ -63,8 +64,7 @@ void camu_resource_client_init(struct camu_resource_client *client, connection_closed_callback, packet_callback, packet_sent_callback, client); } - -void camu_resource_client_connect(struct camu_resource_client *client, str *addr, s32 port) +bool camu_resource_client_connect(struct camu_resource_client *client, str *addr, s32 port) { aki_signal_start(&client->signal, client->loop); aki_packet_stream_connect(&client->client, client->loop, addr, port); @@ -72,10 +72,11 @@ void camu_resource_client_connect(struct camu_resource_client *client, str *addr while (!client->connected) { aki_event_loop_run_once(client->loop); } + // TODO: Timeout. + return true; } -void camu_resource_request(struct camu_resource_client *client, - str *unique_id, u32 index, u16 id) +void camu_resource_request(struct camu_resource_client *client, str *unique_id, u32 index, u16 id) { struct camu_resource_request request; request.id = id; diff --git a/src/libclient/resource_client.h b/src/libclient/resource_client.h index 17ac31e..755e661 100644 --- a/src/libclient/resource_client.h +++ b/src/libclient/resource_client.h @@ -25,6 +25,5 @@ struct camu_resource_client { void camu_resource_client_init(struct camu_resource_client *client, struct aki_event_loop *loop, void (*callback)(void *, u16, struct aki_buffer *), void *userdata); -void camu_resource_client_connect(struct camu_resource_client *client, str *addr, s32 port); -void camu_resource_request(struct camu_resource_client *client, - str *unique_id, u32 index, u16 id); +bool camu_resource_client_connect(struct camu_resource_client *client, str *addr, s32 port); +void camu_resource_request(struct camu_resource_client *client, str *unique_id, u32 index, u16 id); |