Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/network/src/lib/network/message_manager.h @ 7678

Last change on this file since 7678 was 7678, checked in by rennerc, 18 years ago

finished MessageManager implementation

File size: 2.1 KB
Line 
1/*!
2 * @file message_manager.h
3 * @brief Definition of MessageManager
4*/
5
6#ifndef _MESSAGE_MANAGER_H
7#define _MESSAGE_MANAGER_H
8
9#include "synchronizeable.h"
10
11#include <map>
12#include <list>
13
14/*
15  Protocol:
16    int nacks
17    int acks[1..nacks]
18    int nmsg
19    (
20      int length
21      int number
22      int MessageId
23      byte * data
24    )[1..nmsg]
25*/
26
27
28enum MessageId
29{
30};
31
32typedef void (*MessageCallback)( MessageId messageId, byte * data, int dataLength, void * someData, int userId );
33
34enum RecieverType
35{
36  RT_ALL = 1,   //!< message is sent to all users
37  RT_USER,      //!< message is only sent to reciever
38  RT_NOT_USER   //!< message is sent to all but reciever
39};
40
41struct NetworkMessage
42{
43  MessageId messageId;
44  byte *    data;
45  int       length;
46  int       number;
47};
48
49struct MessageUserQueue
50{
51  std::list<NetworkMessage> messages;
52  std::list<int>            toAck;
53};
54
55typedef std::map<int,MessageUserQueue> MessageQueue;
56
57struct MessageHandler
58{
59  MessageCallback cb;
60  MessageId       messageId;
61  void *          someData;
62};
63
64typedef std::map<MessageId,MessageHandler> MessageHandlerMap;
65
66//! A class for sending messages over network
67class MessageManager : public Synchronizeable {
68 protected:
69   MessageManager();
70 public:
71   inline static MessageManager * getInstance(){ if (!singletonRef) singletonRef = new MessageManager();  return singletonRef; }
72   
73   virtual ~MessageManager();
74   
75   bool registerMessageHandler( MessageId messageId, MessageCallback cb, void * someData );
76   
77   void sendMessage( MessageId messageId, byte * data, int dataLength, RecieverType recieverType, int reciever );
78
79   virtual int getStateDiff( int userId, byte* data, int maxLength, int stateId, int fromStateId, int priorityTH );
80   virtual int setStateDiff( int userId, byte* data, int length, int stateId, int fromStateId );
81   virtual void cleanUpUser( int userId );
82   
83   void initUser( int userId );
84
85
86 private:
87   static MessageManager * singletonRef;
88   MessageQueue            messageQueue;        //!< stores messages to send
89   MessageHandlerMap       messageHandlerMap;   //!< contains handlers for messages
90
91};
92
93#endif /* _PROTO_CLASS_H */
Note: See TracBrowser for help on using the repository browser.