summaryrefslogtreecommitdiff
path: root/src/libclient
diff options
context:
space:
mode:
Diffstat (limited to 'src/libclient')
-rw-r--r--src/libclient/client.c26
-rw-r--r--src/libclient/client.h4
2 files changed, 20 insertions, 10 deletions
diff --git a/src/libclient/client.c b/src/libclient/client.c
index b4e44da..dcceb05 100644
--- a/src/libclient/client.c
+++ b/src/libclient/client.c
@@ -1,3 +1,5 @@
+#include <nnwt/multiplex.h>
+
#include "client.h"
#include "common.h"
@@ -22,7 +24,8 @@ static bool results_callback(void *userdata, struct nn_rpc_connection *conn,
break;
}
- nn_packet_free(packet);
+ nn_packet_stream_return_packet(conn->stream, packet);
+
return false;
}
@@ -30,10 +33,11 @@ static struct nn_rpc_command commands[] = {
{ .op = CAMU_CLIENT_RESULTS, .callback = results_callback, .userdata = NULL }
};
-static void idd_callback(void *userdata, struct nn_packet *packet)
+static void idd_callback(void *userdata, struct nn_rpc_connection *conn, struct nn_packet *packet)
{
struct camu_client *client = (struct camu_client *)userdata;
client->callback(client->userdata, CAMU_CLIENT_LOGIN, packet);
+ nn_packet_stream_return_packet(conn->stream, packet);
}
static void connection_callback(void *userdata, struct nn_rpc_connection *conn)
@@ -64,15 +68,21 @@ bool camu_client_login(struct camu_client *client, struct nn_event_loop *loop,
commands[i].userdata = client;
nn_rpc_add_command(&client->client, &commands[i]);
}
- if (!nn_rpc_prepare_client(&client->client, type, CAMU_MULTIPLEX_RPC)) {
- return false;
- }
- nn_rpc_connect(&client->client, addr, port);
+ nn_rpc_prepare_client(&client->client);
+#ifdef CAMU_DIRECT_MODE
+ (void)type;
+ (void)addr;
+ (void)port;
+ struct nn_rpc_connection *conn = client->client.conn;
+ nn_multiplex_direct_connect(conn->stream, CAMU_MULTIPLEX_RPC);
+#else
+ nn_rpc_connect(&client->client, CAMU_MULTIPLEX_RPC, type, addr, port);
+#endif
return true;
}
void camu_client_create_list(struct camu_client *client, str *name,
- void (*callback)(void *, struct nn_packet *), void *userdata)
+ void (*callback)(void *, struct nn_rpc_connection *conn, struct nn_packet *), void *userdata)
{
struct nn_packet *packet = nn_rpc_get_packet(&client->client, CAMU_SERVER_CLIENT_COMMAND);
nn_packet_write_u8(packet, CAMU_CLIENT_CREATE_LIST);
@@ -81,7 +91,7 @@ void camu_client_create_list(struct camu_client *client, str *name,
}
void camu_client_toggle_sink(struct camu_client *client, str *sink, str *list, bool enable,
- void (*callback)(void *, struct nn_packet *), void *userdata)
+ void (*callback)(void *, struct nn_rpc_connection *conn, struct nn_packet *), void *userdata)
{
struct nn_packet *packet = nn_rpc_get_packet(&client->client, CAMU_SERVER_CLIENT_COMMAND);
nn_packet_write_u8(packet, CAMU_CLIENT_TOGGLE_SINK);
diff --git a/src/libclient/client.h b/src/libclient/client.h
index 63d877d..fee7de1 100644
--- a/src/libclient/client.h
+++ b/src/libclient/client.h
@@ -21,9 +21,9 @@ bool camu_client_login(struct camu_client *client, struct nn_event_loop *loop,
u8 type, str *addr, u16 port, str *username);
void camu_client_create_list(struct camu_client *client, str *name,
- void (*callback)(void *, struct nn_packet *), void *userdata);
+ void (*callback)(void *, struct nn_rpc_connection *conn, struct nn_packet *), void *userdata);
void camu_client_toggle_sink(struct camu_client *client, str *sink, str *list, bool enable,
- void (*callback)(void *, struct nn_packet *), void *userdata);
+ void (*callback)(void *, struct nn_rpc_connection *conn, struct nn_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);