107 lines
2.7 KiB
C++
107 lines
2.7 KiB
C++
#pragma once
|
||
|
||
|
||
enum tagAsyncOPType
|
||
{
|
||
asop_none, // 无效操作
|
||
asop_withdrawYuanBao = 1, // 提取元宝
|
||
asop_useSACard, // 使用增值业务卡
|
||
asop_createGuild, // 创建工会
|
||
};
|
||
|
||
enum tagOPResult
|
||
{
|
||
op_Succ, // 操作成功
|
||
op_Failed, // 操作失败
|
||
op_Expired, // 超时
|
||
op_ParamError, // 参数错误
|
||
};
|
||
|
||
// 增值卡相关信息
|
||
typedef struct tagSACardInfo
|
||
{
|
||
UINT64 m_nSN;
|
||
int m_nType;
|
||
int m_nSubType;
|
||
int m_nErrorCode;
|
||
bool m_bQuery; // true为查询;false为使用
|
||
}SACardInfo;
|
||
|
||
// 元宝相关信息
|
||
struct tagWithdrawYuanBaoInfo : public Counter<tagWithdrawYuanBaoInfo>
|
||
{
|
||
int m_nCount;
|
||
};
|
||
|
||
class AsyncOpItem : public Counter<AsyncOpItem>
|
||
{
|
||
public:
|
||
tagAsyncOPType m_nType; // 类型
|
||
bool m_bActive; // 用户主动发起的操作
|
||
TICKCOUNT m_nExpireTime; // 过期时间(ms)
|
||
void *m_pData; // 操作类型对应的数据
|
||
AsyncOpItem() : m_nType(asop_none), m_pData(NULL){}
|
||
};
|
||
|
||
class AsyncOpCollector
|
||
{
|
||
public:
|
||
AsyncOpCollector() : m_curAsyncOpType(asop_none){}
|
||
void SetActor(CActor *pActor);
|
||
|
||
/*
|
||
* Comments: 能否进行某个类型异步操作
|
||
* Param tagAsyncOPType nType: 异步操作类型
|
||
* @Return bool:
|
||
*/
|
||
bool CanAsyncOp(tagAsyncOPType nType);
|
||
|
||
/*
|
||
* Comments: 开始一个异步操作
|
||
* Param tagAsyncOPType nType: 异步操作类型
|
||
* Param unsigned int nExpireTime: 超时时间
|
||
* Param void * data: 操作相关的数据
|
||
* Param bool bActive: 是否是主动操作,主动操作同时只能执行一个
|
||
* @Return bool: 如果当前正在进行某个异步操作,并且当前操作是主动操作,返回false。其它情况返回true
|
||
*/
|
||
bool StartAsyncOp(tagAsyncOPType nType, unsigned int nExpireTime, void *data = 0, bool bActive = true);
|
||
|
||
/*
|
||
* Comments: 通知某个异步操作完成
|
||
* Param tagAsyncOPType nType: 操作类型
|
||
* Param int nResult: 操作结果
|
||
* Param void *pData: 操作相关数据
|
||
* @Return void:
|
||
*/
|
||
void NotifyAsyncOpResult(tagAsyncOPType nType, int nResult, void *pData);
|
||
|
||
/*
|
||
* Comments: 更新异步操作,执行超时处理
|
||
* Param TICKCOUNT nCurrentTime: 当前的TickCount
|
||
* @Return void:
|
||
*/
|
||
void Update(TICKCOUNT nCurrentTime);
|
||
|
||
protected:
|
||
/*
|
||
* Comments: 操作超时
|
||
* Param AsyncOpItem& item: 超时操作数据
|
||
* @Return void:
|
||
*/
|
||
void OnAsyncOpExpired(AsyncOpItem &item);
|
||
|
||
void OnResultUseSACard(int nResult, void *pData);
|
||
|
||
void OnResultWidthdrawYuanBao(int nResult);
|
||
|
||
/*
|
||
* Comments: 使用增值卡超时
|
||
* @Return void:
|
||
*/
|
||
void OnUseSACardExpired();
|
||
|
||
private:
|
||
CActor *m_pActor; // 玩家对象
|
||
CVector<AsyncOpItem> m_asyncOpList; // 异步操作列表
|
||
tagAsyncOPType m_curAsyncOpType; // 当前异步操作类型
|
||
}; |