对消息中心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();

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: V2X(车联网)是指车辆与基础设施及其他车辆之间进行信息交互和通信的技术。在V2X中,BSM(Basic Safety Message)消息是一种重要的通信消息,用于传输交通安全相关的基本信息。 BSM消息封装格式主要包括如下内容: 1. 消息头:包含消息的标识符和长度信息,用于标识消息的类型和大小。 2. 消息体:包含了车辆的基本安全信息,如车辆的位置、速度、方向、加速度等。还可能包括其他的车辆状态信息、驾驶员行为信息等。 3. 时间戳:记录消息的发送时间,用于协调不同车辆之间的数据同步。 4. 消息签名:对消息进行数字签名,验证消息的完整性和真实性,防止消息被篡改。 5. 消息优先级:定义消息的优先级,用于区分不同类型的消息,保证重要信息的及时传输。 BSM消息封装格式应该符合标准的通信协议,如IEEE 1609.2和SAE J2735等。这些协议定义了BSM消息的具体格式和字段的含义,以保证不同车辆和基础设施之间的信息交互的一致性和互操作性。 总之,BSM消息封装格式是用来传输V2X中的基本安全信息的一种格式化方式,它标准化了消息的结构和内容,以确保有效的交通安全信息传输和车辆间的协调。 ### 回答2: V2X BSM(基础安全消息)是在智能交通系统中用于车辆之间传递信息的一种标准化格式。BSM消息封装格式的设计旨在提供一种可靠、高效的通信机制,以便车辆可以传输和接收关键的安全信息。 BSM消息封装格式通常由两个部分组成:消息头和消息体。 消息头包含了一些元数据信息,例如消息类型、发送时间、消息的大小等。这些信息可以帮助接收方正确解析和处理消息消息体则包含了实际的数据内容。其中最重要的是车辆的状态信息,例如车辆的位置、速度、加速度等。此外,还可以包含其他相关信息,如车辆的类型、标识符、行驶方向等。这些信息对于车辆之间的协同和决策非常重要,可以帮助车辆预测和避免可能的危险情况。 在封装格式的设计中,通常还考虑到了一些安全性和效率的要求。例如,引入了数据压缩和加密等机制来减少通信的带宽和保护信息安全。此外,还可以使用适当的错误检测和纠正机制,确保消息的可靠性和准确性。 总的来说,V2X BSM消息封装格式旨在提供一种可靠、高效的通信方式,使车辆能够准确传递和接收关键的安全信息。这种封装格式的设计充分考虑了安全性、实时性和网络效率等方面的要求,使得车辆之间能够实现有效的协同和决策,提高整个智能交通系统的安全性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值