summaryrefslogtreecommitdiff
path: root/Ivy/Ivy.h
diff options
context:
space:
mode:
Diffstat (limited to 'Ivy/Ivy.h')
-rw-r--r--Ivy/Ivy.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/Ivy/Ivy.h b/Ivy/Ivy.h
new file mode 100644
index 0000000..cf90bdd
--- /dev/null
+++ b/Ivy/Ivy.h
@@ -0,0 +1,119 @@
+// Ivy.h: interface for the Ivy class.
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#pragma once
+#pragma warning(disable: 4251)
+
+#ifdef WIN32
+#ifdef IVY_EXPORTS
+class _declspec(dllexport) IvyWatcher;
+class _declspec(dllexport) IvyApplication;
+class _declspec(dllexport) Ivy;
+class _declspec(dllexport) CThreadedSocket;
+class _declspec(dllexport) CBufferedSocket;
+#else
+#pragma comment(lib,"Ivy.LIB" )
+class _declspec(dllimport) IvyWatcher;
+class _declspec(dllimport) IvyApplication;
+class _declspec(dllimport) Ivy;
+class _declspec(dllimport) CThreadedSocket;
+class _declspec(dllimport) CBufferedSocket;
+#endif
+#endif
+
+#ifdef IVY_USE_OWN_DATATYPES
+
+#include "DataTypes.h"
+
+#else
+
+#include <string>
+#include <list>
+#include <vector>
+#include <map>
+
+namespace ivy = std;
+
+#endif
+
+#include "IvyCallback.h"
+
+
+class Ivy
+{
+ friend class IvyWatcher;
+
+ friend class IvyApplication;
+
+private:
+ int regexp_id;
+ unsigned int applicationPort;
+ void SendSubscriptions(IvyApplication *app);
+ bool synchronous; // use Window Shink to made CB mono thread like
+ IvyApplication * server;
+ IvyWatcher * watcher;
+ IvyDieCallback *die_callback;
+ IvyDirectMessageCallback *direct_callback;
+ IvyApplicationCallback *application_callback;
+ IvyBindingCallback *binding_callback;
+ /* list des adresses de broadcast */
+ ivy::string domain;
+ /* nom de l'appliction */
+ ivy::string ApplicationName;
+ /* Aplication Unique ID */
+ ivy::string ApplicationID;
+ /* liste des clients connectes */
+ CRITICAL_SECTION m_application_cs;
+ typedef ivy::list<IvyApplication*> IvyApplicationList;
+ IvyApplicationList applications;
+
+ /* liste des souscriptions locale a emettre aux autres applications */
+ ivy::vector<ivy::string> regexp_out;
+ /* liste des callbacks a appeler */
+ ivy::vector< IvyMessageCallback* > callbacks;
+
+protected:
+ void SubstituteInterval (const char *src, char *dst, size_t dst_len);
+ void AddApplication( IvyApplication *app );
+ void RemoveApplication( IvyApplication *app);
+
+ bool CheckConnected( IvyApplication *app );
+ void CallApplicationConnectedCallback( IvyApplication *app );
+ void CallApplicationDisconnectedCallback( IvyApplication *app );
+ void CallBindingAddCallback(IvyApplication * app, int id, const char * regexp);
+ void CallBindingRemoveCallback(IvyApplication * app, int id, const char * regexp);
+ void CallBindingFilterCallback(IvyApplication * app, int id, const char * regexp);
+ bool CallDieCallback( IvyApplication *app, int id, const char *arg );
+ void CallDirectMessageCallback( IvyApplication *app, int id, const char *arg );
+ void CallMessageCallback( IvyApplication *app, int id, int argc, const char **argv );
+
+ const char *GenApplicationUniqueIdentifier();
+
+ /* message a emettre sur connection nouvelle application */
+ ivy::string ready_message;
+
+public:
+
+ void SetBindCallback( IvyBindingCallback* bind_callback );
+ void SetFilter( int argc, const char **argv );
+ void SendDieMsg( IvyApplication *app );
+ IvyApplication *GetApplication(const char *name);
+ void SendDirectMsg( IvyApplication *app, int id, const char *message);
+ void BindDirectMsg( IvyDirectMessageCallback *callback );
+ int SendMsg( const char *message, ... );
+
+ const char *GetDomain(const char *domainlist);
+ unsigned int GetApplicationPort();
+ int BindMsg( const char *regexp, IvyMessageCallback *cb );
+ int BindMsg( IvyMessageCallback *cb, const char *regexp, ... );
+ void UnbindMsg( int id );
+ Ivy( const char *name, const char* ready, IvyApplicationCallback *callback, bool Synchronous = true );
+ void start(const char *domain);
+ void stop();
+ virtual ~Ivy();
+
+
+
+};