对消息中心CCNotificationCenter的封装

.h

#ifndef _PLATFORM_DELEGATE_HANDLER_H_

#define _PLATFORM_DELEGATE_HANDLER_H_

#include "include/sdkdelegate.h"

#include "include/platforms.h"

#include "cocos2d.h"


static const char* kInitResult = "InitResult";

static const char* kCheckVersionResult = "CheckVersionResult";

static const char* kLoginResult = "LoginResult";

static const char* kLogoutResult = "LogoutResult";

static const char*  kLoginPlatformResult = "LoginPlatformResult";

static const char*  kBindResult = "BindResult";

static const char* kPayResult = "PayResult";

static const char* kExitResult = "ExitResult";

static const char* kJaveCallStringResult = "JaveCallStringResult";

static const char* kJaveCallVoidResult = "JaveCallVoidResult";


struct ParamObject : public cocos2d::CCObject {    //相当于观察者

ParamObject() 

: platform_(PlatformDefault)

, ret_(-1) 

, intParam_(0) {

eventName_.clear();

}

ParamObject(const char* eventName, PlatformEnum platform, unsigned int ret, 

const char* param)

: platform_(platform) 

, ret_(ret)

, intParam_(0)

{

if (eventName)

eventName_ = eventName;


if (param)

param_ = param;

}


static ParamObject* create(const char* eventName, PlatformEnum platform, int ret, 

const char* param) {

ParamObject* obj = new ParamObject(eventName, platform, ret, param);

obj->autorelease();

return obj;

}

void printParam(const char* tag);

void excuteCallback();

//    {

//        cocos2d::CCNotificationCenter::sharedNotificationCenter()->postNotification(eventName_.c_str(),

//                                                                                    this);

//    }



std::string eventName_; //消息名

PlatformEnum platform_;

int ret_;

std::string param_;  //

int intParam_;

std::string strParam_;

};


class PlatformDelegateImplement : public SdkKit::SdkDelegate, public cocos2d::CCObject {

public:

PlatformDelegateImplement();

virtual ~PlatformDelegateImplement();

    //下面这些函数执行后会往callbackList_ add 观察者

virtual void onInit(PlatformEnum platform, int ret, 

const char* param);

virtual void onCheckVersion(PlatformEnum platform, int ret,

const char* param);

virtual void onLogin(PlatformEnum platform, int ret, 

const char* param, bool isFastLogin);

virtual void onLogout(PlatformEnum platform, int ret,

const char* param);

virtual void onLoginPlatform(PlatformEnum platform, int ret,

const char* param);

virtual void onBind(PlatformEnum platform, int ret,

const char* param);

virtual void onPay(PlatformEnum platform, int ret, 

const char* param);

virtual std::string onJavaCallStringMethod(PlatformEnum platform,

const char* funcName, const char* paramConfig);

virtual void onJavaCallVoidMethod(PlatformEnum platform, 

const char* funcName, const char* paramConfig);

virtual void onExitGame(PlatformEnum platform, int ret,

const char* param);


protected:

virtual void update(float delta);  //update会每帧执行excuteCallbackEvent


void addCallbackEvent(ParamObject* obj);  //相当于addobserve

void excuteCallbackEvent();         //相当于postnotice 但无需参数 因为内部调用ParamObject excuteCallback


private:

cocos2d::CCArray* callbackList_;  //相当于观察者数组

};


#endif // !_PLATFORM_HANDLER_H_



.cpp

#include "PlatformDelegateImplement.h"


#include "cocos2d.h"


USING_NS_CC;


void ParamObject::printParam(const char* tag) {

if (tag == NULL)

tag = "NullTag";


cocos2d::CCLog("[%s] platformId:%d, ret:%d, param:%s, intParam:%d", tag, platform_, ret_, param_.c_str(), intParam_);

}


void ParamObject::excuteCallback() {

cocos2d::CCNotificationCenter::sharedNotificationCenter()->postNotification(eventName_.c_str(), 

this);

}


PlatformDelegateImplement::PlatformDelegateImplement() {

callbackList_ = cocos2d::CCArray::create();

callbackList_->retain();

cocos2d::CCDirector::sharedDirector()->getScheduler()->scheduleUpdateForTarget(this, 0, false);

}


PlatformDelegateImplement::~PlatformDelegateImplement() {

cocos2d::CCDirector::sharedDirector()->getScheduler()->unscheduleUpdateForTarget(this);

callbackList_->release();

callbackList_ = NULL;

}


void PlatformDelegateImplement::onInit(PlatformEnum platform, int ret, 

const char* param) {

cocos2d::CCLog("PlatformDelegateImplement::onInit");

addCallbackEvent(ParamObject::create(kInitResult, platform, ret, param));

}


void PlatformDelegateImplement::onCheckVersion(PlatformEnum platform, int ret,

const char* param) {

addCallbackEvent(ParamObject::create(kCheckVersionResult, platform, ret, param));

}


void PlatformDelegateImplement::onLogin(PlatformEnum platform, int ret, 

  const char* param, bool isFastLogin) {

ParamObject* obj = ParamObject::create(kLoginResult, platform, ret, param);

obj->intParam_ = isFastLogin ? 1 : 0;

addCallbackEvent(obj);

    CCLOG("进入onLogin。。。。。。。。。。");

}


void PlatformDelegateImplement::onLogout(PlatformEnum platform, int ret,

  const char* param) {

addCallbackEvent(ParamObject::create(kLogoutResult, platform, ret, param));

}


void PlatformDelegateImplement::onLoginPlatform(PlatformEnum platform, int ret,

const char* param) {

addCallbackEvent(ParamObject::create(kLoginPlatformResult, platform, ret, param));

}


void PlatformDelegateImplement::onBind(PlatformEnum platform, int ret,

const char* param) {

addCallbackEvent(ParamObject::create(kBindResult, platform, ret, param));

}


void PlatformDelegateImplement::onPay(PlatformEnum platform, int ret, 

const char* param) {

addCallbackEvent(ParamObject::create(kPayResult, platform, ret, param));

}


std::string PlatformDelegateImplement::onJavaCallStringMethod(PlatformEnum platform,

  const char* funcName, const char* paramConfig) {

std::string result("result:");

if (funcName != NULL) {

result.append(" func(");

result.append(funcName);

result.append(")");

}

if (paramConfig != NULL) {

result.append(" param(");

result.append(paramConfig);

result.append(")");

}


cocos2d::CCLog("PlatformDelegateImplement::onJavaCallStringMethod: called! funcname=%s, param=%s",

funcName, paramConfig);

return result.c_str();

}


void PlatformDelegateImplement::onJavaCallVoidMethod(PlatformEnum platform, 

  const char* funcName, const char* paramConfig) {

ParamObject* obj = ParamObject::create(kJaveCallVoidResult, platform, 0, paramConfig);

obj->strParam_ = funcName;

addCallbackEvent(obj);


cocos2d::CCLog("PlatformDelegateImplement::onJavaCallVoidMethod: called! funcname=%s, param=%s",

funcName, paramConfig);

}


void PlatformDelegateImplement::onExitGame(PlatformEnum platform, int ret,

const char* param) {

addCallbackEvent(ParamObject::create(kExitResult, platform, ret, param));

}


void PlatformDelegateImplement::update(float delta) {

cocos2d::CCObject::update(delta);


excuteCallbackEvent();

}


void PlatformDelegateImplement::addCallbackEvent(ParamObject* obj) {

if (callbackList_ == NULL || obj == NULL)

return ;


callbackList_->addObject(obj);

}


void PlatformDelegateImplement::excuteCallbackEvent() {

if (callbackList_ == NULL ||

callbackList_->count() < 1)

return ;


cocos2d::CCObject* obj = NULL;

CCARRAY_FOREACH(callbackList_, obj) {

ParamObject* paramObj = dynamic_cast<ParamObject*>(obj);

if (paramObj != NULL) {

paramObj->excuteCallback();

}

}


callbackList_->removeAllObjects();

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值