Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 18, 2006, 10:48:17 AM (18 years ago)
Author:
rennerc
Message:

started implementing MessageManager

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/network/src/lib/network/message_manager.h

    r7631 r7671  
    99#include "synchronizeable.h"
    1010
    11 // FORWARD DECLARATION
     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      byte MessageId
     23      byte * data
     24    )[1..nmsg]
     25*/
     26
     27typedef void (*MessageCallback)( byte * data, int dataLength, void * someData, int userId );
     28
     29
     30enum MessageId
     31{
     32};
     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};
     62
     63typedef std::map<MessageId,MessageHandler> MessageHandlerMap;
    1264
    1365//! A class for sending messages over network
    1466class MessageManager : public Synchronizeable {
    15 
     67 protected:
     68   MessageManager();
    1669 public:
    17    MessageManager();
     70   inline static MessageManager * getInstance(){ if (!singletonRef) singletonRef = new MessageManager();  return singletonRef; }
     71   
    1872   virtual ~MessageManager();
     73   
     74   bool registerMessageHandler( MessageId messageId, MessageCallback cb, void * someData );
     75   
     76   void sendMessage( MessageId messageId, byte * data, int dataLength, RecieverType recieverType, int reciever );
    1977
    2078   virtual int getStateDiff( int userId, byte* data, int maxLength, int stateId, int fromStateId, int priorityTH );
    2179   virtual int setStateDiff( int userId, byte* data, int length, int stateId, int fromStateId );
    2280   virtual void cleanUpUser( int userId );
     81   
     82   void initUser( int userId );
    2383
    2484
    2585 private:
     86   static MessageManager * singletonRef;
     87   MessageQueue            messageQueue;        //!< stores messages to send
     88   MessageHandlerMap       messageHandlerMap;   //!< contains handlers for messages
    2689
    2790};
Note: See TracChangeset for help on using the changeset viewer.