[telepathy-doc/master] Initial work on a Client.Observer example

Davyd Madeley davyd at madeley.id.au
Wed Jul 29 02:58:46 PDT 2009


---
 configure.ac                                       |    1 +
 docs/examples/Makefile.am                          |    1 +
 docs/examples/glib_mc5_observer/Makefile.am        |   10 +++
 docs/examples/glib_mc5_observer/example-observer.c |   69 ++++++++++++++++++++
 docs/examples/glib_mc5_observer/example-observer.h |   33 +++++++++
 docs/examples/glib_mc5_observer/example.c          |   32 +++++++++
 6 files changed, 146 insertions(+), 0 deletions(-)
 create mode 100644 docs/examples/glib_mc5_observer/Makefile.am
 create mode 100644 docs/examples/glib_mc5_observer/example-observer.c
 create mode 100644 docs/examples/glib_mc5_observer/example-observer.h
 create mode 100644 docs/examples/glib_mc5_observer/example.c

diff --git a/configure.ac b/configure.ac
index e823917..89c94db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -41,6 +41,7 @@ AC_OUTPUT([
       docs/examples/glib_dbus_tube/Makefile
       docs/examples/glib_stream_tube/Makefile
       docs/examples/glib_mc5_connections/Makefile
+      docs/examples/glib_mc5_observer/Makefile
       docs/examples/pygtk_chat_client/Makefile
       docs/examples/python_get_parameters/Makefile
       docs/examples/python_iface_messaging/Makefile
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
index f64b904..05511e3 100644
--- a/docs/examples/Makefile.am
+++ b/docs/examples/Makefile.am
@@ -8,6 +8,7 @@ example_dirs = \
 	glib_dbus_tube \
 	glib_stream_tube \
 	glib_mc5_connections \
+	glib_mc5_observer \
 	pygtk_chat_client \
 	python_get_parameters \
 	python_iface_messaging \
diff --git a/docs/examples/glib_mc5_observer/Makefile.am b/docs/examples/glib_mc5_observer/Makefile.am
new file mode 100644
index 0000000..2195f67
--- /dev/null
+++ b/docs/examples/glib_mc5_observer/Makefile.am
@@ -0,0 +1,10 @@
+INCLUDES = $(TELEPATHY_GLIB_CFLAGS)
+LDADD = $(TELEPATHY_GLIB_LIBS)
+
+noinst_PROGRAMS = example
+
+example_SOURCES = \
+	example-observer.c example-observer.h \
+	example.c
+
+include $(top_srcdir)/docs/rsync-dist.make
diff --git a/docs/examples/glib_mc5_observer/example-observer.c b/docs/examples/glib_mc5_observer/example-observer.c
new file mode 100644
index 0000000..fb2425f
--- /dev/null
+++ b/docs/examples/glib_mc5_observer/example-observer.c
@@ -0,0 +1,69 @@
+#include <telepathy-glib/svc-client.h>
+
+#include "example-observer.h"
+
+static void client_iface_init (gpointer, gpointer);
+static void observer_iface_init (gpointer, gpointer);
+
+// #define EXAMPLE_OBSERVER_GET_PRIVATE(obj)	(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EXAMPLE_TYPE_OBSERVER, ExampleObserverPrivate))
+
+G_DEFINE_TYPE_WITH_CODE (ExampleObserver, example_observer, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CLIENT, client_iface_init);
+    G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CLIENT_OBSERVER, observer_iface_init);
+    );
+
+// typedef struct _ExampleObserverPrivate ExampleObserverPrivate;
+// struct _ExampleObserverPrivate
+// {
+// };
+
+static void
+example_observer_observe_channels (TpSvcClientObserver   *self,
+                                   const char            *account,
+                                   const char            *connection,
+                                   const GPtrArray       *channels,
+                                   const char            *dispatch_op,
+                                   const GPtrArray       *requests_satisfied,
+                                   GHashTable            *observer_info,
+                                   DBusGMethodInvocation *context)
+{
+  g_print (" > example_observer_observe_channels\n");
+  g_print ("     account    = %s\n", account);
+  g_print ("     connection = %s\n", connection);
+  g_print ("     dispatchop = %s\n", dispatch_op);
+
+  tp_svc_client_observer_return_from_observe_channels (context);
+}
+
+static void
+example_observer_class_init (ExampleObserverClass *class)
+{
+}
+
+static void
+example_observer_init (ExampleObserver *self)
+{
+}
+
+static void
+client_iface_init (gpointer g_iface, gpointer iface_data)
+{
+  /* no methods */
+}
+
+static void
+observer_iface_init (gpointer g_iface, gpointer iface_data)
+{
+  TpSvcClientObserverClass *klass = (TpSvcClientObserverClass *) g_iface;
+
+#define IMPLEMENT(x) tp_svc_client_observer_implement_##x (klass, \
+    example_observer_##x)
+  IMPLEMENT (observe_channels);
+#undef IMPLEMENT
+}
+
+ExampleObserver *
+example_observer_new (void)
+{
+  return g_object_new (TYPE_EXAMPLE_OBSERVER, NULL);
+}
diff --git a/docs/examples/glib_mc5_observer/example-observer.h b/docs/examples/glib_mc5_observer/example-observer.h
new file mode 100644
index 0000000..3a5b4da
--- /dev/null
+++ b/docs/examples/glib_mc5_observer/example-observer.h
@@ -0,0 +1,33 @@
+#ifndef __EXAMPLE_OBSERVER_H__
+#define __EXAMPLE_OBSERVER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define TYPE_EXAMPLE_OBSERVER	(example_observer_get_type ())
+#define EXAMPLE_OBSERVER(obj)	(G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_EXAMPLE_OBSERVER, ExampleObserver))
+#define EXAMPLE_OBSERVER_CLASS(obj)	(G_TYPE_CHECK_CLASS_CAST ((obj), TYPE_EXAMPLE_OBSERVER, ExampleObserverClass))
+#define IS_EXAMPLE_OBSERVER(obj)	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_EXAMPLE_OBSERVER))
+#define IS_EXAMPLE_OBSERVER_CLASS(obj)	(G_TYPE_CHECK_CLASS_TYPE ((obj), TYPE_EXAMPLE_OBSERVER))
+#define EXAMPLE_OBSERVER_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_EXAMPLE_OBSERVER, ExampleObserverClass))
+
+typedef struct _ExampleObserver ExampleObserver;
+typedef struct _ExampleObserverClass ExampleObserverClass;
+
+struct _ExampleObserver
+{
+	GObject parent;
+};
+
+struct _ExampleObserverClass
+{
+	GObjectClass parent_class;
+};
+
+GType example_observer_get_type (void);
+ExampleObserver *example_observer_new (void);
+
+G_END_DECLS
+
+#endif
diff --git a/docs/examples/glib_mc5_observer/example.c b/docs/examples/glib_mc5_observer/example.c
new file mode 100644
index 0000000..116dfa5
--- /dev/null
+++ b/docs/examples/glib_mc5_observer/example.c
@@ -0,0 +1,32 @@
+/*
+ * An example of talking to MC5 to get available connections
+ */
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+
+#include <telepathy-glib/dbus.h>
+
+#include "example-observer.h"
+
+static GMainLoop *loop = NULL;
+
+int
+main (int argc, char **argv)
+{
+  GError *error = NULL;
+
+  g_type_init ();
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  DBusGConnection *dbus = tp_get_bus ();
+
+  ExampleObserver *example_observer = example_observer_new ();
+
+  dbus_g_connection_register_g_object (dbus,
+      "/org/freedesktop/Telepathy/Client/ExampleObserver",
+      G_OBJECT (example_observer));
+
+  g_main_loop_run (loop);
+}
-- 
1.5.6.5




More information about the telepathy-commits mailing list