00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TMW_POSTMAN_H_
00023 #define _TMW_POSTMAN_H_
00024
00025 #include <map>
00026
00027 class Character;
00028
00029 struct PostCallback
00030 {
00031 void (*handler)(Character *, const std::string &sender,
00032 const std::string &letter, void *data);
00033 void *data;
00034 };
00035
00036 class PostMan
00037 {
00038 public:
00039 Character* getCharacter(int id)
00040 {
00041 std::map<int, Character*>::iterator itr = mCharacters.find(id);
00042 if (itr != mCharacters.end())
00043 {
00044 return itr->second;
00045 }
00046
00047 return NULL;
00048 }
00049
00050 void addCharacter(Character *player)
00051 {
00052 std::map<int, Character*>::iterator itr = mCharacters.find(player->getDatabaseID());
00053 if (itr == mCharacters.end())
00054 {
00055 mCharacters.insert(std::pair<int, Character*>(player->getDatabaseID(), player));
00056 }
00057 }
00058
00059 void getPost(Character *player, PostCallback &f)
00060 {
00061 mCallbacks.insert(std::pair<Character*, PostCallback>(player, f));
00062 accountHandler->getPost(player);
00063 }
00064
00065 void gotPost(Character *player, std::string sender, std::string letter)
00066 {
00067 std::map<Character*, PostCallback>::iterator itr = mCallbacks.find(player);
00068 if (itr != mCallbacks.end())
00069 {
00070 itr->second.handler(player, sender, letter, itr->second.data);
00071 }
00072 }
00073
00074 private:
00075 std::map<int, Character*> mCharacters;
00076 std::map<Character*, PostCallback> mCallbacks;
00077 };
00078
00079 extern PostMan *postMan;
00080
00081 #endif