summaryrefslogtreecommitdiff
path: root/server_communication.c
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2010-08-23 20:07:01 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2010-08-23 20:07:01 +0200
commitc7147f5ccc6d0fa4a019c54166085a36f86a1bf0 (patch)
tree99a199deee963252aa0070658ca27c963a2ed3a6 /server_communication.c
parentd295f0a4cbc5f96b0aa65a3d005f98bc31511068 (diff)
Moved server_sync() to server_communication.c.
Diffstat (limited to 'server_communication.c')
-rw-r--r--server_communication.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/server_communication.c b/server_communication.c
new file mode 100644
index 0000000..227eb8f
--- /dev/null
+++ b/server_communication.c
@@ -0,0 +1,61 @@
+#include "server_communication.h"
+
+#include <gio/gio.h>
+
+gboolean server_sync(struct server *server) {
+ GError *error = NULL, *conn_error = NULL;
+ GSocketConnectable *addr;
+ GSocketAddressEnumerator *enumerator;
+ GSocketAddress *sockaddr;
+ GSocketConnection *conn = NULL;
+ GSocketClient *client;
+ GTimer *timer = g_timer_new();
+
+ addr = g_network_address_new(server->host, server->port);
+ enumerator = g_socket_connectable_enumerate(addr);
+ g_object_unref(addr);
+
+ client = g_socket_client_new();
+
+ while(conn == NULL && (sockaddr = g_socket_address_enumerator_next(enumerator, NULL, &error))) {
+ conn = g_socket_client_connect(client, (GSocketConnectable*)sockaddr, NULL, &conn_error);
+ g_object_unref(sockaddr);
+ }
+
+ if(sockaddr == NULL) {
+ if(error != NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ } else {
+ g_warning("server_sync: no connectable addresses found for host %s",
+ server->host);
+ }
+ return FALSE;
+ }
+
+ if(conn == NULL) {
+ g_warning(conn_error->message);
+ g_error_free(conn_error);
+ return FALSE;
+ }
+
+ GSocket *socket = g_socket_connection_get_socket(conn);
+
+ g_debug("connected");
+
+ g_socket_send(socket, "ping\n", 5, NULL, NULL);
+ gchar buffer[0x400];
+ g_socket_receive(socket, buffer, 0x400, NULL, NULL);
+ if(buffer[4] == '\n') {
+ buffer[4] = '\0';
+ g_debug("got response: %s", buffer);
+ g_debug("time: %f ms", g_timer_elapsed(timer, NULL) * 1000);
+ }
+
+ g_timer_destroy(timer);
+
+ g_socket_close(socket, NULL);
+
+ return TRUE;
+}
+