Files
wnmj/Classes/Network/CallMission.h
2026-02-13 14:34:15 +08:00

78 lines
1.5 KiB
C++

#pragma once
#include <vector>
#include <functional>
#include "SocketMission.h"
struct NetCall
{
int iSub;
std::function<void(void*, int)> pFun;
};
struct CallBase
{
virtual void CallFun() = 0;
};
template <class T>
struct CallStruct:public CallBase
{
virtual void CallFun()
{
pFun(kInfo);
}
T kInfo;
std::function<void(T)> pFun;
};
struct CallVoid:public CallBase
{
virtual void CallFun()
{
pFun();
}
std::function<void()> pFun;
};
class CCallMission : public CSocketMission
{
public:
CCallMission(std::string kName,const char* url=0, int port=0 );
virtual ~CCallMission();
public:
void addLinkCallFun(std::function<void()> pFun)
{
CallVoid *pCallInfo = new CallVoid;
pCallInfo->pFun = pFun;
m_kLinkCallFun.push_back(pCallInfo);
}
template <class T>
void addLinkCallStruct(std::function<void(T)> pFun,T kInfo)
{
CallStruct<T> *pCallInfo = new CallStruct<T>;
pCallInfo->kInfo = kInfo;
pCallInfo->pFun = pFun;
m_kLinkCallFun.push_back(pCallInfo);
}
void addNetCall(std::function<void(void*, int)> pFun,int iSub)
{
NetCall kCallInfo;
kCallInfo.pFun = pFun;
kCallInfo.iSub = iSub;
m_kNetCallFun.push_back(kCallInfo);
}
void clearCall();
public:
virtual void onEventTCPSocketLink();
virtual void onEventTCPSocketShut();
virtual void onEventTCPSocketError(int errorCode);
virtual bool onEventTCPSocketRead(int main, int sub, void* data, int dataSize);
private:
std::string m_kClassName;
std::vector<CallBase*> m_kLinkCallFun;
std::vector<NetCall> m_kNetCallFun;
};