From 5241f71a41f4125281f9215dd30b8fc4dfc546b1 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Fri, 20 Aug 2010 14:40:48 +0200 Subject: Added a service for server commands and moved the list command in there. --- server.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 server.c (limited to 'server.c') diff --git a/server.c b/server.c new file mode 100644 index 0000000..1015572 --- /dev/null +++ b/server.c @@ -0,0 +1,57 @@ +#include "server_commands.h" + +#include + +static GSocketService *ss = NULL; + +static gboolean service_incoming(GSocketService *service, + GSocketConnection *connection, GObject *source_object, + gpointer user_data) { + GError *error = NULL; + GSocket *socket = g_socket_connection_get_socket(connection); + gchar buffer[0x400]; + + while(g_socket_is_connected(socket) == TRUE) { + gssize size = g_socket_receive(socket, buffer, 0x400, NULL, &error); + + if(size < 0) { + g_warning(error->message); + return FALSE; + } else if(size == 0) { + break; + } + + g_debug("size == %d", size); + g_debug(buffer); + + gchar *pos = g_strstr_len(buffer, size, "\r"); + if(pos == NULL) { + pos = g_strstr_len(buffer, size, "\n"); + } + if(pos == NULL) { + g_warning("EOL not found"); + return FALSE; + } + *pos = '\0'; + + server_commands_handle(connection, buffer); + } + + return FALSE; +} + +gboolean server_start() { + ss = g_threaded_socket_service_new(10); + + g_socket_listener_add_inet_port((GSocketListener*)ss, 7681, NULL, NULL); + + g_signal_connect(ss, "incoming", (GCallback)service_incoming, NULL); + g_socket_service_start(ss); + + return TRUE; +} + +void server_stop() { + g_socket_service_stop(ss); + g_object_unref(ss); +} -- cgit v1.2.3