diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-09-23 16:30:04 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-09-23 16:30:04 (GMT) |
commit | be3c180fec71866a91b5f9297708d581bc1d6435 (patch) | |
tree | 830acee295b8456d1e629a0db6c3734f629074a3 /src/uscxml/plugins/invoker/im/IMInvoker.h | |
parent | 8dde1311719b29c63efb379566916cb1aa9a7cd7 (diff) | |
download | uscxml-be3c180fec71866a91b5f9297708d581bc1d6435.zip uscxml-be3c180fec71866a91b5f9297708d581bc1d6435.tar.gz uscxml-be3c180fec71866a91b5f9297708d581bc1d6435.tar.bz2 |
Added instant messaging invoker
Diffstat (limited to 'src/uscxml/plugins/invoker/im/IMInvoker.h')
-rw-r--r-- | src/uscxml/plugins/invoker/im/IMInvoker.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/uscxml/plugins/invoker/im/IMInvoker.h b/src/uscxml/plugins/invoker/im/IMInvoker.h new file mode 100644 index 0000000..fb02e46 --- /dev/null +++ b/src/uscxml/plugins/invoker/im/IMInvoker.h @@ -0,0 +1,117 @@ +#ifndef IMINVOKER_H_FNWG0XCQ +#define IMINVOKER_H_FNWG0XCQ + +#include <uscxml/Interpreter.h> + +//extern "C" { +#include <libpurple/purple.h> +//} + +#ifdef BUILD_AS_PLUGINS +#include "uscxml/plugins/Plugins.h" +#endif + +namespace uscxml { + +class IMInvoker : public InvokerImpl { +public: + struct EventContext { + InvokeRequest invokeReq; + SendRequest sendReq; + IMInvoker* instance; + }; + + IMInvoker(); + virtual ~IMInvoker(); + virtual boost::shared_ptr<InvokerImpl> create(InterpreterImpl* interpreter); + + virtual std::set<std::string> getNames() { + std::set<std::string> names; + names.insert("im"); + names.insert("instant-messaging"); + names.insert("http://uscxml.tk.informatik.tu-darmstadt.de/#instant-messaging"); + return names; + } + + virtual Data getDataModelVariables(); + virtual void send(const SendRequest& req); + virtual void cancel(const std::string sendId); + virtual void invoke(const InvokeRequest& req); + +protected: + static bool _libPurpleIsInitialized; + static Data _pluginData; + static PurpleAccountUiOps _accountUIOps; + static PurpleEventLoopUiOps _uiEventLoopOps; + static PurpleCoreUiOps _uiCoreOps; + static GHashTable* _uiInfo; + static GRand* _gRand; + + static DelayedEventQueue* _eventQueue; + + // these are only being called from the delayed queue's thread + static void initLibPurple(void *userdata, const std::string event); + static void send(void *userdata, const std::string event); + static void invoke(void *userdata, const std::string event); + + // libpurple ui operations + static guint purpleEventTimeoutAdd(guint interval, GSourceFunc function, gpointer data); + static gboolean purpleEventTimeoutRemove(guint handle); + static guint purpleEventInputAdd(int fd, PurpleInputCondition cond, PurpleInputFunction func, gpointer user_data); + static gboolean purpleEventInputRemove(guint handle); + static int purpleEventInputGetError(int fd, int *error); + static guint purpleEventTimeoutAddSec(guint interval, GSourceFunc function, gpointer data); + + // callback contexts + struct PurpleEventContext { + PurpleInputFunction input; + PurpleInputCondition cond; + int inputFD; + GSourceFunc function; + gpointer data; + }; + static void purpleCallback(void *userdata, const std::string event); + + // libpurple core operations + static void purplePrefsInit(void); + static void purpleDebugInit(void); + static void purpleUIInit(void); + static void purpleQuit(void); + static GHashTable* purpleGetUIInfo(void); + + // account operations + static void accountNotifyAdded(PurpleAccount *account, + const char *remote_user, + const char *id, + const char *alias, + const char *message); + static void accountStatusChanged(PurpleAccount *account, + PurpleStatus *status); + static void accountRequestAdd(PurpleAccount *account, + const char *remote_user, + const char *id, + const char *alias, + const char *message); + static void* accountRequestAuthorize(PurpleAccount *account, + const char *remote_user, + const char *id, + const char *alias, + const char *message, + gboolean on_list, + PurpleAccountRequestAuthorizationCb authorize_cb, + PurpleAccountRequestAuthorizationCb deny_cb, + void *user_data); + static void accountCloseRequest(void *ui_handle); + + + PurpleAccount* _account; +}; + +#ifdef BUILD_AS_PLUGINS +PLUMA_INHERIT_PROVIDER(IMInvoker, InvokerImpl); +#endif + +} + + +#endif /* end of include guard: IMINVOKER_H_FNWG0XCQ */ |