#pragma once #include #include #include "SocketMission.h" struct NetCall { int iSub; std::function pFun; }; struct CallBase { virtual void CallFun() = 0; }; template struct CallStruct:public CallBase { virtual void CallFun() { pFun(kInfo); } T kInfo; std::function pFun; }; struct CallVoid:public CallBase { virtual void CallFun() { pFun(); } std::function pFun; }; class CCallMission : public CSocketMission { public: CCallMission(std::string kName,const char* url=0, int port=0 ); virtual ~CCallMission(); public: void addLinkCallFun(std::function pFun) { CallVoid *pCallInfo = new CallVoid; pCallInfo->pFun = pFun; m_kLinkCallFun.push_back(pCallInfo); } template void addLinkCallStruct(std::function pFun,T kInfo) { CallStruct *pCallInfo = new CallStruct; pCallInfo->kInfo = kInfo; pCallInfo->pFun = pFun; m_kLinkCallFun.push_back(pCallInfo); } void addNetCall(std::function 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 m_kLinkCallFun; std::vector m_kNetCallFun; };