diff options
author | Timo Dörr <timo@latecrew.de> | 2013-10-04 17:18:41 +0200 |
---|---|---|
committer | Timo Dörr <timo@latecrew.de> | 2013-10-23 14:08:07 +0200 |
commit | 921d9015736205bb03a02985f6046d931cdd26c9 (patch) | |
tree | eeb00d06512f51c2140c5d342d40eb7da4ef19e2 /ufo/ufo-messenger-iface.h | |
parent | 89fc1edf44ca48086c193d5ad64d6a0f7ee12660 (diff) |
Abstract away communication into interface
* Create generic interface ufo_messenger_iface
* Move all zmq_* stuff into ufo_zmq_messenger that implements that
interface
* also fixes a bug that happened when closing the zmq_socket from
another thread by introducing a special TERMINATE message that
will kill ufo-daemon
Diffstat (limited to 'ufo/ufo-messenger-iface.h')
-rw-r--r-- | ufo/ufo-messenger-iface.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/ufo/ufo-messenger-iface.h b/ufo/ufo-messenger-iface.h new file mode 100644 index 0000000..f6d9271 --- /dev/null +++ b/ufo/ufo-messenger-iface.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2011-2013 Karlsruhe Institute of Technology + * + * This file is part of Ufo. + * + * This library is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UFO_MESSENGER_H +#define UFO_MESSENGER_H + +#if !defined (__UFO_H_INSIDE__) && !defined (UFO_COMPILATION) +#error "Only <ufo/ufo.h> can be included directly." +#endif + +#include <ufo/ufo-remote-node.h> + +G_BEGIN_DECLS + +#define UFO_TYPE_MESSENGER (ufo_messenger_get_type()) +#define UFO_MESSENGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), UFO_TYPE_MESSENGER, UfoMessenger)) +#define UFO_MESSENGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), UFO_TYPE_MESSENGER, UfoMessengerIface)) +#define UFO_IS_MESSENGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), UFO_TYPE_MESSENGER)) +#define UFO_IS_MESSENGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), UFO_TYPE_MESSENGER)) +#define UFO_MESSENGER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), UFO_TYPE_MESSENGER, UfoMessengerIface)) + +#define UFO_MESSENGER_ERROR ufo_messenger_error_quark() + +typedef struct _UfoMessenger UfoMessenger; +typedef struct _UfoMessengerIface UfoMessengerIface; +typedef struct _UfoMessage UfoMessage; + + +/** + * UfoMessageType: (skip) + * @UFO_MESSAGE_STREAM_JSON: insert + * @UFO_MESSAGE_REPLICATE_JSON: insert + * @UFO_MESSAGE_GET_NUM_DEVICES: insert + * @UFO_MESSAGE_SETUP: insert + * @UFO_MESSAGE_GET_STRUCTURE: insert + * @UFO_MESSAGE_STRUCTURE: insert + * @UFO_MESSAGE_GET_REQUISITION: insert + * @UFO_MESSAGE_REQUISITION: insert + * @UFO_MESSAGE_SEND_INPUTS: insert + * @UFO_MESSAGE_GET_RESULT: insert + * @UFO_MESSAGE_RESULT: insert + * @UFO_MESSAGE_CLEANUP: insert + * @UFO_MESSAGE_ACK: insert + */ +typedef enum { + UFO_MESSAGE_STREAM_JSON = 0, + UFO_MESSAGE_REPLICATE_JSON, + UFO_MESSAGE_GET_NUM_DEVICES, + UFO_MESSAGE_GET_STRUCTURE, + UFO_MESSAGE_STRUCTURE, + UFO_MESSAGE_GET_REQUISITION, + UFO_MESSAGE_REQUISITION, + UFO_MESSAGE_SEND_INPUTS, + UFO_MESSAGE_GET_RESULT, + UFO_MESSAGE_RESULT, + UFO_MESSAGE_CLEANUP, + UFO_MESSAGE_TERMINATE, + UFO_MESSAGE_ACK +} UfoMessageType; + +/** + * UfoMessage: (skip) + * @type: Type of the wire message + */ +struct _UfoMessage { + UfoMessageType type; + guint64 data_size; + gpointer data; +}; + +void ufo_message_free (UfoMessage *msg); +UfoMessage * ufo_message_new (UfoMessageType type, guint64 data_size); + +typedef enum { + UFO_MESSENGER_BUFFER_FULL, + UFO_MESSENGER_SIZE_MISSMATCH +} UfoMessengerError; + +typedef enum { + UFO_MESSENGER_CLIENT, + UFO_MESSENGER_SERVER +} UfoMessengerRole; + +struct _UfoMessengerIface { + /*< private >*/ + GTypeInterface parent_iface; + + void (*connect) (UfoMessenger *msger, + gchar *addr, + UfoMessengerRole role); + + void (*disconnect) (UfoMessenger *msger); + + UfoMessage * (*send_blocking) (UfoMessenger *msger, + UfoMessage *request, + GError **error); + + UfoMessage * (*recv_blocking) (UfoMessenger *msger, + GError **error); +}; + + +void ufo_messenger_connect (UfoMessenger *msger, + gchar *addr, + UfoMessengerRole role); + +void ufo_messenger_disconnect (UfoMessenger *msger); + +UfoMessage *ufo_messenger_send_blocking (UfoMessenger *msger, + UfoMessage *request, + GError **error); + +UfoMessage *ufo_messenger_recv_blocking (UfoMessenger *msger, + GError **error); + +GQuark ufo_messenger_error_quark (void); +GType ufo_messenger_get_type (void); + +G_END_DECLS + +#endif |