#pragma once #include "Common.h" #include typedef std::function ONRELEASECALLBACK; class CContext : public IRxObject { public: CContext(); virtual ~CContext(); public: void setOnRelease(ONRELEASECALLBACK fOnRelease); int addRef(); int release(); public: virtual std::string& getClassName() = 0; virtual std::string toString() = 0; void setRetCode(int code); int getRetCode(); void setRetMsg(const char* pszMsg); std::string& getRetMsg(); HANDLE getEventHandle(); void setEvent(); void resetEvent(); static void createDir(CString strDir); protected: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } void ReadString(CArchive& ar, std::string& string); void WriteString(CArchive& ar, std::string& string); static BOOL IsBoxId(CString& strId); static BOOL IsLotId(CString& strId); private: ONRELEASECALLBACK m_onReleaseCallback; int m_nRef; CRITICAL_SECTION m_criticalSection; protected: int m_nRetCode; std::string m_strRetMsg; HANDLE m_hEvent; };