summaryrefslogtreecommitdiffstats
path: root/server/dispatcher.h
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-02-20 17:13:36 -0600
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-02-23 23:00:47 +0100
commit816b3f95288e0c8e3a06dd653cb2e82a88c94647 (patch)
treecf5373f8d21ecacf827494190b77d9bd32b355a5 /server/dispatcher.h
parent990cae2220db0d6f3164e9f3089797fe3b59731f (diff)
downloadspice-816b3f95288e0c8e3a06dd653cb2e82a88c94647.tar.gz
spice-816b3f95288e0c8e3a06dd653cb2e82a88c94647.tar.xz
spice-816b3f95288e0c8e3a06dd653cb2e82a88c94647.zip
Convert Dispatcher and MainDispatcher to GObjects
Allows more explicit inheritance relationship, and numerous other advantages.
Diffstat (limited to 'server/dispatcher.h')
-rw-r--r--server/dispatcher.h56
1 files changed, 31 insertions, 25 deletions
diff --git a/server/dispatcher.h b/server/dispatcher.h
index fd02bce4..968127e2 100644
--- a/server/dispatcher.h
+++ b/server/dispatcher.h
@@ -18,9 +18,37 @@
#ifndef DISPATCHER_H
#define DISPATCHER_H
+#include <glib-object.h>
#include "common.h"
-typedef struct Dispatcher Dispatcher;
+#define TYPE_DISPATCHER dispatcher_get_type()
+
+#define DISPATCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_DISPATCHER, Dispatcher))
+#define DISPATCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_DISPATCHER, DispatcherClass))
+#define IS_DISPATCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), TYPE_DISPATCHER))
+#define IS_DISPATCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), TYPE_DISPATCHER))
+#define DISPATCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), TYPE_DISPATCHER, DispatcherClass))
+
+typedef struct _Dispatcher Dispatcher;
+typedef struct _DispatcherClass DispatcherClass;
+typedef struct _DispatcherPrivate DispatcherPrivate;
+
+struct _Dispatcher
+{
+ GObject parent;
+
+ DispatcherPrivate *priv;
+};
+
+struct _DispatcherClass
+{
+ GObjectClass parent_class;
+};
+
+GType dispatcher_get_type(void) G_GNUC_CONST;
+
+Dispatcher *dispatcher_new(size_t max_message_type, void *opaque);
+
typedef void (*dispatcher_handle_message)(void *opaque,
uint32_t message_type,
@@ -37,21 +65,6 @@ typedef struct DispatcherMessage {
dispatcher_handle_message handler;
} DispatcherMessage;
-struct Dispatcher {
- SpiceCoreInterface *recv_core;
- int recv_fd;
- int send_fd;
- pthread_t self;
- pthread_mutex_t lock;
- DispatcherMessage *messages;
- int stage; /* message parser stage - sender has no stages */
- size_t max_message_type;
- void *payload; /* allocated as max of message sizes */
- size_t payload_size; /* used to track realloc calls */
- void *opaque;
- dispatcher_handle_async_done handle_async_done;
- dispatcher_handle_message extra_handler;
-};
/*
* dispatcher_send_message
@@ -62,15 +75,6 @@ void dispatcher_send_message(Dispatcher *dispatcher, uint32_t message_type,
void *payload);
uint32_t dispatcher_read_message(Dispatcher *dispatcher);
-/*
- * dispatcher_init
- * @max_message_type: number of message types. Allows upfront allocation
- * of a DispatcherMessage list.
- * up front, and registration in any order wanted.
- */
-void dispatcher_init(Dispatcher *dispatcher, size_t max_message_type,
- void *opaque);
-
void dispatcher_attach(Dispatcher *dispatcher, GMainContext *main_context);
enum {
@@ -132,4 +136,6 @@ int dispatcher_get_recv_fd(Dispatcher *);
*/
void dispatcher_set_opaque(Dispatcher *dispatcher, void *opaque);
+pthread_t dispatcher_get_thread_id(Dispatcher *self);
+
#endif //DISPATCHER_H