// Ivy.h: interface for the Ivy class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_BUS_H__F7F08FE9_E653_11D0_AE3E_080009F92591__INCLUDED_) #define AFX_BUS_H__F7F08FE9_E653_11D0_AE3E_080009F92591__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #ifdef WIN32 #ifdef IVY_EXPORTS class _declspec(dllexport) IvyWatcher; class _declspec(dllexport) IvyApplication; class _declspec(dllexport) Ivy; #else #pragma comment(lib,"Ivy.LIB" ) class _declspec(dllimport) IvyWatcher; class _declspec(dllimport) IvyApplication; class _declspec(dllimport) Ivy; #endif #endif #include "stdafx.h" #include "IvyCallback.h" class IvyWatcher; class IvyApplication; class Ivy { private: UINT applicationPort; void SendSubscriptions(IvyApplication *app); public: void AddApplication( IvyApplication *app ); void RemoveApplication( IvyApplication *app); BOOL CheckConnected( IvyApplication *app ); BOOL CheckRegexp( const char *exp ); void CallApplicationConnectedCallback( IvyApplication *app ); void CallApplicationDisconnectedCallback( IvyApplication *app ); 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 ); public: void Classes( int argc, const char **argv ); void SendDirectMsg( IvyApplication *app, int id, const char *message); void BindDirectMsg( IvyDirectMessageCallback *callback ); int SendMsg( const char *message ); const char *GetDomain(const char *domainlist); UINT GetApplicationPort(); int BindMsg( const char *regexp, IvyMessageCallback *cb ); 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(); /* message a emettre sur connection nouvelle application */ string ready_message; protected: bool synchronous; // use Window Shink to made CB mono thread like IvyApplication * server; IvyWatcher * watcher; IvyDieCallback *die_callback; IvyDirectMessageCallback *direct_callback; IvyApplicationCallback *application_callback; /* list des adresses de broadcast */ string domain; /* nom de l'appliction */ string appname; /* liste des clients connectes */ CRITICAL_SECTION m_application_cs; typedef std::list IvyApplicationList; IvyApplicationList applications; /* liste des souscriptions locale a emettre aux autres applications */ std::vector regexp_out; /* liste des callbacks a appeler */ std::vector< IvyMessageCallback* > callbacks; /* classes de messages emis par l'application utilise pour le filtrage */ int messages_classes_count; const char **messages_classes; }; #endif // !defined(AFX_BUS_H__F7F08FE9_E653_11D0_AE3E_080009F92591__INCLUDED_)