TSEvent消息系统.c++版小样

最近开始搞cocos2dx的相关游戏..发现cocos2dx里面的很多东西用起来Q不爽的...哎~.为了更好的和更方便的移植代码.所以搞了个事件系统的小样.boost又不好移植.还是自己动手丰衣足食吧.. 写这个东东想了好长时间..始终没办法 摆脱TSObject这个基类..如果有大神可以把这个基类摘掉..那么就太谢谢了哈..

//
//  main.m
//  CTest
//
//  Created by TSEnel on 13-5-4.
//  Copyright (c) 2013年 TSEnel. All rights reserved.
//
#include 
#include 
#include using namespace std;// 全局基类
class TSObject{};// 全局回调类型定义
typedef void (TSObject::*TpInstFun)(string sBuffer);// TS事件系统
class TSEvent : public TSObject{
public:void RegistEvent(string sEventKey, TSObject* pInst, TpInstFun pFun) {m_MapEvent[sEventKey][pInst] = pFun;}void UnRegistEvent(string sEventKey, TSObject* pInst) {m_MapEvent[sEventKey].erase(pInst);}void UnRegistEvent(string sEventKey) {m_MapEvent.erase(sEventKey);}void SendMessage(string sEventKey, string sBuffer) {if (m_MapEvent.count(sEventKey)) {map& pInstMap = m_MapEvent[sEventKey];map::iterator iter = pInstMap.begin();for (; iter != pInstMap.end(); iter++) {TSObject* pInst = iter->first;TpInstFun pFun = iter->second;(pInst->*pFun)(sBuffer);}}else {cout << "没有消息码 : " << sEventKey << endl;}}public:map > m_MapEvent;
};// 测试类TSGame
class TSGame : public TSObject{
public:TSGame(string name) {m_Name = name;}void EventLogin(string sBuffer){cout <<  m_Name << " : EventLogin : " << sBuffer << endl;}void EventExit(string sBuffer){cout << m_Name << " : EventExit : " << sBuffer << endl;}public:string m_Name;
};//测试类TSApp
class TSApp : public TSObject{
public:TSApp(string name) {m_Name = name;}void EventStart(string sBuffer) {cout << m_Name << " : " << sBuffer << endl;}public:string m_Name;
};// 声明全局事件系统
TSEvent G_EventSys;// 入口函数
int main(int argc, const char * argv[])
{TSGame pG("TS1");TSGame pG2("TS2");G_EventSys.RegistEvent("Login", &pG, (TpInstFun)&TSGame::EventLogin);G_EventSys.RegistEvent("Login", &pG2,(TpInstFun)&TSGame::EventLogin);TSApp pA("APP1");G_EventSys.RegistEvent("Start", &pA, (TpInstFun)&TSApp::EventStart);G_EventSys.RegistEvent("Exit", &pG, (TpInstFun)&TSGame::EventExit);G_EventSys.SendMessage("Login", "WWWWW!!!!!***(FD)SFDS!");G_EventSys.SendMessage("Start", "WQL!");G_EventSys.SendMessage("Exit", "");G_EventSys.UnRegistEvent("Exit");G_EventSys.UnRegistEvent("Exit");G_EventSys.SendMessage("Exit", "");return 0;
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部