-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMessage.h
More file actions
109 lines (91 loc) · 3.29 KB
/
Message.h
File metadata and controls
109 lines (91 loc) · 3.29 KB
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
// ======================================================================================
// File : Message.h
// Author : Li Chen
// Last Change : 07/29/2010 | 15:47:57 PM | Thursday,July
// Description :
// ======================================================================================
#ifndef GAMESERVICE_MESSAGE_H
#define GAMESERVICE_MESSAGE_H
#include "Array.h"
namespace GameService
{
enum MessageID
{
EMessage_NONE = 0,
EMessage_Test,
EMessage_OnlineTaskDone,
EMessage_ShowXUIDone,
EMessage_AsyncTaskDone, //ZJ - For AsyncTasks;
EMessage_CustomGuide_ActionManage,
EMessage_ShowUserSharedReplay,
EMessage_CallBackInterface,
EMessage_SignInChanged,
EMessage_ContentInstalled,
EMessage_InternalTaskDone,
EMessage_MAX
};
class MessageRecipient;
class Message
{
public:
Message() {m_MessageId = EMessage_NONE; m_recipient= NULL;}
Message(MessageID messageId) { m_MessageId = messageId; m_PayloadArray.Empty(); m_recipient = NULL;}
~Message();
//Create();
static Message* Create(MessageID messageId);
void Discard();
MessageID GetMessageID() { return m_MessageId; }
GS_VOID AddPayload( GS_BOOL payload );
//GS_VOID AddPayload( GS_CHAR payload ) { m_PayloadArray.AddItem((GS_BYTE*)GS_NEWGS_CHAR>(payload)); }
//GS_VOID AddPayload( GS_BYTE payload ) { m_PayloadArray.AddItem(GS_NEWGS_BYTE>(payload)); }
//GS_VOID AddPayload( GS_WORD payload ) { m_PayloadArray.AddItem((GS_BYTE*)GS_NEWGS_WORD>(payload)); }
#if defined(_XBOX) || defined(_XENON) || defined(_WINDOWS)
GS_VOID AddPayload( GS_DWORD payload );
#elif defined(_PS3)
GS_VOID AddPayload( GS_INT payload );
#endif
//GS_VOID AddPayload( GS_SIZET payload ) { m_PayloadArray.AddItem((GS_BYTE*)GS_NEW GS_SIZET(payload)); }
//GS_VOID AddPayload( GS_INT64 payload ) { m_PayloadArray.AddItem((GS_BYTE*)GS_NEW GS_INT64(payload)); }
//GS_VOID AddPayload( GS_UINT64 payload ) { m_PayloadArray.AddItem((GS_BYTE*)GS_NEW GS_UINT64(payload)); }
GS_VOID AddPayload( GS_FLOAT payload );
GS_VOID AddPayload( GS_DOUBLE payload );
//GS_VOID AddPayload( MessageID payload ) { m_PayloadArray.AddItem((GS_BYTE*)GS_NEW MessageID(payload)); }
void AddTarget(MessageRecipient* target) ;
MessageRecipient* GetTarget() {return m_recipient;}
GS_BYTE* ReadPayload(GS_UINT index);
private:
MessageID m_MessageId;
TArray<GS_BYTE*> m_PayloadArray;
MessageRecipient* m_recipient; //when set , this message will be only send to this recipient
};
class MessageRecipient
{
public:
virtual ~MessageRecipient() {}
virtual void MessageResponse(Message* message) = 0;
};
//typedef void (*MessageMgrRegisterFunc)(MessageID messageId);
class MessageHandler
{
public:
MessageHandler() {}
MessageHandler(MessageID messageId) { m_MessageId = messageId; }
void AddHandler(MessageRecipient* recipient);
void RemoveHandler(MessageRecipient* recipient);
void ExecuteAll(Message* message);
private:
MessageID m_MessageId;
TArray<MessageRecipient*> m_CallbackArray;
};
class MessageMgr
{
public:
MessageMgr();
~MessageMgr();
GS_BOOL Send(Message* message);
void Register(MessageID messageId, MessageRecipient* recipient);
private:
MessageHandler* m_MessageHandlers[EMessage_MAX];
};
} // namespace GameService
#endif //GAMESERVICE_ONLIINEMESSAGE_H