loudmouth/lm-socket.c
changeset 433 2ed69f025f4a
parent 432 63a049d146c3
child 434 579db9f99cc5
--- a/loudmouth/lm-socket.c	Tue Jul 08 00:57:01 2008 +0300
+++ b/loudmouth/lm-socket.c	Wed Jul 09 15:56:07 2008 +0300
@@ -20,155 +20,87 @@
 
 #include <config.h>
 
-#include "lm-marshal.h"
 #include "lm-socket.h"
 
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), LM_TYPE_DUMMY, LmSocketPriv))
-
-typedef struct LmSocketPriv LmSocketPriv;
-struct LmSocketPriv {
-	gint my_prop;
-};
+static void    socket_base_init (LmSocketIface *iface);
 
-static void     socket_finalize            (GObject           *object);
-static void     socket_get_property        (GObject           *object,
-					   guint              param_id,
-					   GValue            *value,
-					   GParamSpec        *pspec);
-static void     socket_set_property        (GObject           *object,
-					   guint              param_id,
-					   const GValue      *value,
-					   GParamSpec        *pspec);
-
-G_DEFINE_TYPE (LmSocket, lm_socket, G_TYPE_OBJECT)
-
-enum {
-	PROP_0,
-	PROP_MY_PROP
-};
-
-enum {
-	SIGNAL_NAME,
-	LAST_SIGNAL
-};
+GType
+lm_socket_get_type (void)
+{
+	static GType iface_type = 0;
 
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static void
-lm_socket_class_init (LmSocketClass *class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (class);
-
-	object_class->finalize     = socket_finalize;
-	object_class->get_property = socket_get_property;
-	object_class->set_property = socket_set_property;
+	if (!iface_type) {
+		static const GTypeInfo iface_info = {
+			sizeof (LmSocketIface),
+			(GBaseInitFunc)     socket_base_init,
+			(GBaseFinalizeFunc) NULL,
+		};
 
-	g_object_class_install_property (object_class,
-					 PROP_MY_PROP,
-					 g_param_spec_string ("my-prop",
-							      "My Prop",
-							      "My Property",
-							      NULL,
-							      G_PARAM_READWRITE));
-	
-	signals[SIGNAL_NAME] = 
-		g_signal_new ("signal-name",
-			      G_OBJECT_CLASS_TYPE (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      0,
-			      NULL, NULL,
-			      lm_marshal_VOID__INT,
-			      G_TYPE_NONE, 
-			      1, G_TYPE_INT);
-	
-	g_type_class_add_private (object_class, sizeof (LmSocketPriv));
+		iface_type = g_type_register_static (G_TYPE_INTERFACE,
+						     "LmSocketIface",
+						     &iface_info,
+						     0);
+
+		g_type_interface_add_prerequisite (iface_type, G_TYPE_OBJECT);
+	}
+
+	return iface_type;
 }
 
 static void
-lm_socket_init (LmSocket *dummy)
-{
-	LmSocketPriv *priv;
-
-	priv = GET_PRIV (dummy);
-
-}
-
-static void
-socket_finalize (GObject *object)
+socket_base_init (LmSocketIface *iface)
 {
-	LmSocketPriv *priv;
-
-	priv = GET_PRIV (object);
-
-	(G_OBJECT_CLASS (lm_socket_parent_class)->finalize) (object);
-}
-
-static void
-socket_get_property (GObject    *object,
-		   guint       param_id,
-		   GValue     *value,
-		   GParamSpec *pspec)
-{
-	LmSocketPriv *priv;
-
-	priv = GET_PRIV (object);
+	static gboolean initialized = FALSE;
 
-	switch (param_id) {
-	case PROP_MY_PROP:
-		g_value_set_int (value, priv->my_prop);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-		break;
-	};
-}
-
-static void
-socket_set_property (GObject      *object,
-                     guint         param_id,
-                     const GValue *value,
-                     GParamSpec   *pspec)
-{
-	LmSocketPriv *priv;
-
-	priv = GET_PRIV (object);
-
-	switch (param_id) {
-	case PROP_MY_PROP:
-		priv->my_prop = g_value_get_int (value);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-		break;
-	};
+	if (!initialized) {
+		/* create interface signals here. */
+		initialized = TRUE;
+	}
 }
 
 LmSocket *
 lm_socket_new (const gchar *host, guint port)
 {
+        g_return_val_if_fail (host != NULL, NULL);
+
         return NULL;
 }
 
 /* Use DNS lookup to find the port and the host */
 LmSocket *
-lm_socket_new_srv (const gchar *service)
+lm_socket_new_to_service (const gchar *service)
 {
+        g_return_val_if_fail (service != NULL, NULL);
+
         return NULL;
 }
 
 void 
 lm_socket_connect (LmSocket *socket)
 {
+        g_return_if_fail (LM_IS_SOCKET (socket));
+
+
         /* Initiate the connection process                 */
         /* DNS lookup, connect thing, create IOchannel etc */
+        if (!LM_SOCKET_GET_IFACE(socket)->write) {
+                g_assert_not_reached ();
+        }
+
+        LM_SOCKET_GET_IFACE(socket)->connect (socket);
 }
 
 gboolean
-lm_socket_write (LmSocket *socket,
-                 gchar    *data,
-                 gsize     len)
+lm_socket_write (LmSocket *socket, gchar *buf, gsize len)
 {
-        return FALSE;
+        g_return_val_if_fail (LM_IS_SOCKET (socket), FALSE);
+        g_return_val_if_fail (buf != NULL, FALSE);
+
+        if (!LM_SOCKET_GET_IFACE(socket)->write) {
+                g_assert_not_reached ();
+        }
+
+        return LM_SOCKET_GET_IFACE(socket)->write (socket, buf, len);
 }
 
 gboolean
@@ -177,12 +109,25 @@
                 gsize     buf_len,
                 gsize     read_len)
 {
-        return FALSE;
+        g_return_val_if_fail (LM_IS_SOCKET (socket), FALSE);
+        g_return_val_if_fail (buf != NULL, FALSE);
+
+        if (!LM_SOCKET_GET_IFACE(socket)->read) {
+                g_assert_not_reached ();
+        }
+
+        return LM_SOCKET_GET_IFACE(socket)->read (socket, buf, buf_len, read_len);
 }
 
 void 
 lm_socket_disconnect (LmSocket *socket)
 {
+        g_return_if_fail (LM_IS_SOCKET (socket));
+
+        if (!LM_SOCKET_GET_IFACE(socket)->disconnect) {
+                g_assert_not_reached ();
+        }
+
+        LM_SOCKET_GET_IFACE(socket)->disconnect (socket);
 }
 
-