summaryrefslogtreecommitdiff
path: root/Ivy/IvyCallback.h
blob: 78aff80ddc13788945943b2d28c2a3f6d704128c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// IvyCallback.h : Interface for the IvyMessageCallback Class
//               : Interface for the IvyDirectMessageCallback Class
//               : Interface for the IvyApplicationCallback Class
//


#pragma once

class IvyApplication;

/* Callback for the normal bus Message */

class IvyMessageCallback  {
public:
	virtual void OnMessage (IvyApplication *app, int argc, const char **argv )=0;
	virtual ~IvyMessageCallback()
	{
	}
};
class IvyMessageCallbackFunction: public IvyMessageCallback  {
public:
	typedef	void ( *IvyMessageCallback_fun )( IvyApplication *app, void *user_data, int argc, const char **argv );
	IvyMessageCallback_fun MessageCb;
	void *data;

public:
	IvyMessageCallbackFunction (  IvyMessageCallback_fun m_cb, void *udata = NULL ) : MessageCb( m_cb ) 
	{
		data = udata;
	}
	~IvyMessageCallbackFunction ()
	{
	}
	void OnMessage (IvyApplication *app, int argc, const char **argv)
	{
	(*MessageCb) (app, data, argc, argv);
	}
/* raccourci d'ecriture */
#define BUS_CALLBACK(  m , d ) new IvyMessageCallbackFunction( m, d )
};
/* template Class Callback for the normal bus Message */
template <class T> class IvyMessageCallbackOf : public IvyMessageCallback {

protected:
	T*      Object;
	typedef	void ( T::*IvyMessageCallback_fun )( IvyApplication *app, int argc, const char **argv );
	IvyMessageCallback_fun MessageCb;

public:
	IvyMessageCallbackOf ( T* o, IvyMessageCallback_fun m_cb ) : Object (o), MessageCb( m_cb )
	{
	}
	~IvyMessageCallbackOf ()
	{
	}
	void OnMessage (IvyApplication *app, int argc, const char **argv)
	{
	(Object->*MessageCb) (app, argc, argv);
	}
/* raccourci d'ecriture */
#define BUS_CALLBACK_OF( cl, m ) new IvyMessageCallbackOf<cl>( this, &cl::m )
};
/* Callback for the direct Message */
class IvyDirectMessageCallback {
public:
	virtual void OnDirectMessage (IvyApplication *app, int id, const char *arg ) = 0;
};

/* Application Callback */

class IvyApplicationCallback {
public:
	virtual void OnApplicationConnected (IvyApplication *app) = 0;
	virtual void OnApplicationDisconnected (IvyApplication *app) = 0;
	virtual ~IvyApplicationCallback()
	{
	}
};
class IvyApplicationNullCallback : public IvyApplicationCallback {
public:
	virtual void OnApplicationConnected (IvyApplication *app)
	{};
	virtual void OnApplicationDisconnected (IvyApplication *app)
	{};
	virtual ~IvyApplicationNullCallback()
	{
	}
};
// Static function CB
class IvyApplicationCallbackFunction: public IvyApplicationCallback  {
public:
	typedef	void ( *IvyApplicationCallback_fun )( IvyApplication *app );
	IvyApplicationCallback_fun ApplicationConnectedCb;
	IvyApplicationCallback_fun ApplicationDisconnectedCb;

public:
	IvyApplicationCallbackFunction ( IvyApplicationCallback_fun con_cb,  IvyApplicationCallback_fun disc_cb) 
		: ApplicationConnectedCb( con_cb ), ApplicationDisconnectedCb( disc_cb )
	{
	}
	~IvyApplicationCallbackFunction ()
	{
	}
	virtual void OnApplicationConnected (IvyApplication *app)
	{
	(*ApplicationConnectedCb) (app);
	};
	virtual void OnApplicationDisconnected (IvyApplication *app)
	{
	(*ApplicationDisconnectedCb) (app);
	};
	
/* raccourci d'ecriture */
#define BUS_APPLICATION_CALLBACK(  conn, disconn ) new IvyApplicationCallbackFunction(  conn, disconn )
};
/* Callback for the die Message */
class IvyDieCallback {
public:
	virtual bool OnDie (IvyApplication *app, int id, const char *arg ) = 0;
	virtual ~IvyDieCallback()
	{
	}
};