summaryrefslogtreecommitdiff
path: root/Ivy
diff options
context:
space:
mode:
Diffstat (limited to 'Ivy')
-rw-r--r--Ivy/IvyCbindings.cxx54
1 files changed, 41 insertions, 13 deletions
diff --git a/Ivy/IvyCbindings.cxx b/Ivy/IvyCbindings.cxx
index 722be71..abe94cf 100644
--- a/Ivy/IvyCbindings.cxx
+++ b/Ivy/IvyCbindings.cxx
@@ -7,19 +7,41 @@
#include "IvyCbindings.h"
static Ivy *bus = NULL;
+static bool synchronous = false;
// application callback wrappers
-IvyCApplicationCallback app_cb = NULL;
-void * app_user_data = NULL;
-void app_conn( IvyApplication *app )
-{
- (*app_cb)(app, app_user_data, IvyApplicationConnected );
-}
-void app_discon( IvyApplication *app )
-{
- (*app_cb)(app, app_user_data, IvyApplicationDisconnected );
-}
-
+static IvyCApplicationCallback app_cb = NULL;
+static void * app_user_data = NULL;
+static void app_conn( IvyApplication *app )
+{
+ if ( app_cb )
+ (*app_cb)(app, app_user_data, IvyApplicationConnected );
+}
+static void app_discon( IvyApplication *app )
+{
+ if ( app_cb )
+ (*app_cb)(app, app_user_data, IvyApplicationDisconnected );
+}
+#ifdef USE_MESSAGE_MAINLOOP
+static void MyMainLoop()
+{
+ MSG msg;
+ BOOL bRet;
+ while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
+ {
+ if (bRet == -1)
+ {
+ // handle the error and possibly exit
+ break;
+ }
+ else
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+}
+#endif
void IvyInit(
const char *AppName, /* nom de l'application */
const char *ready, /* ready Message peut etre NULL */
@@ -28,7 +50,7 @@ void IvyInit(
IvyCDieCallback die_callback, /* last change callback before die */
void *die_data ) /* user data */
{
- bus = new Ivy(AppName, ready, BUS_APPLICATION_CALLBACK(app_conn,app_discon) );
+ bus = new Ivy(AppName, ready, BUS_APPLICATION_CALLBACK(app_conn,app_discon) , synchronous );
}
/* filtrage des regexps */
void IvySetFilter( int argc, const char **argv)
@@ -123,7 +145,13 @@ void IvyBindDirectMsg( IvyCMsgDirectCallback callback, void *user_data)
void IvySendDirectMsg( IvyClientPtr app, int id, char *msg )
{
}
+
void IvyMainLoop()
{
- Sleep( INFINITE );
+#ifdef USE_MESSAGE_MAINLOOP
+ if ( synchronous )
+ MyMainLoop();
+ else
+#endif
+ Sleep( INFINITE );
}