diff options
author | Jonathon Jongsma <jjongsma@redhat.com> | 2015-02-20 17:13:36 -0600 |
---|---|---|
committer | Fabiano FidĂȘncio <fidencio@redhat.com> | 2015-02-23 23:00:47 +0100 |
commit | 816b3f95288e0c8e3a06dd653cb2e82a88c94647 (patch) | |
tree | cf5373f8d21ecacf827494190b77d9bd32b355a5 /server/dispatcher.h | |
parent | 990cae2220db0d6f3164e9f3089797fe3b59731f (diff) | |
download | spice-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.h | 56 |
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 |