#pragma once #include "SpBase.h" #include "SpIni.h" #include "libvideorecord.h" #include "EventCode.h" #include "fileutil.h" #include "array.h" #include #include #include #include "rvc_media_common.h" #include "Recorder_client_g.h" #include "Recorder_def_g.h" #include "Recorder_server_g.h" #include "recordinfo.h" namespace Recorder { class CRecorderEntity : public CEntityBase, public CHostApi, public ILogListener, public ISysVarListener { public: CRecorderEntity() : m_bStarted(false), m_pRecorder(NULL), m_bEncFlag(true){ m_strHttpServerAPI = RVC_UPLOAD_VIDEORECORDING_HTTP_API; m_iHttpTimeOut = RVC_HTTPTIMEOUT; m_strHttpServerAddr = NULL; m_strAppVersion = NULL; m_strTerminalId = NULL; memset(m_strRecordName, 0, MAX_PATH); m_eBusinessStatus = eInterrupt; } virtual ~CRecorderEntity() {} virtual const char* GetEntityName() const { return "Recorder"; } virtual bool IsService() const { return true; } virtual CServerSessionBase* OnNewSession(const char* pszRemoteEntityName, const char* pszClass); virtual void OnPreStart(CAutoArray strArgs, CSmartPointer pTransactionContext); virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer pTransactionContext); ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError); ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError); bool InitRecorder(); bool ReleaseRecorder(); virtual void OnStarted(); virtual void Debug(record_loglevel elevel, const char* fmt, ...); virtual void vDebug(record_loglevel elevel, const char* str, va_list list); virtual int GetRecordCamera(); virtual void OnRecordFailed(eRvcRecordFailedCase eCase, const char* pszMessage, bool bRecordDevFault); virtual void OnRecordEntityExcption(); virtual void OnRecordFinished(); virtual void OnASectionFinished(const char* pszMessage, int iSerialNum, bool bfinished); virtual int GetCameraState(); virtual void OnLog(const CAutoArray& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel, const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID, const CAutoArray& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo); void StartRecord(const char* videofilename); void StopRecord(); bool GetStartFlag() { return m_bStarted; } void SetRecordSessionID(const char* strRecordID); void GetRecordSessionID(char* strRecordID, size_t uLen); private: virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName); virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer pTransactionContext); DeviceTypeEnum RvcGetDeviceType(); int HandleSaveVideoRecord(const char* videofilename); int GetRecordVideoInfo(const char* videofilename, char* strSession, size_t uSessionLen, int* iSeriesNum, char* strFormat, size_t uFormatLen); int HandleFinishedVideoRecord(const char* videofilename); int SaveExceptionRecordVideos(); int HandleEncryptVideoRecord(const char* videofilename); ErrorCodeEnum LoadEntityConfig(); ErrorCodeEnum PostVideoRecordInfos(); ErrorCodeEnum AddToVideoRecordList(const char* videofilename); ErrorCodeEnum HandleExceptionRecordVideos(); private: DeviceTypeEnum m_eDeviceType; int m_iActiveCamera; int m_iCameraState; CAutoArray m_arrListener; bool m_bStarted; Clibvideorecord* m_pRecorder; CSimpleStringA m_terminalNo; CSimpleStringA m_TempDir; CSimpleStringA m_RecordSaveDir; bool m_bEncFlag; CSimpleStringA m_strHttpServerAddr; CSimpleStringA m_strHttpServerAPI; int m_iHttpTimeOut; CSimpleStringA m_strAppVersion; CSimpleStringA m_strTerminalId; vector m_vRecordList; char m_strRecordName[MAX_PATH]; eRvcBusinessStatus m_eBusinessStatus; }; class RecordServiceSession : public RecorderSerVice_ServerSessionBase { public: explicit RecordServiceSession(CRecorderEntity* pEntity) : m_pEntity(pEntity) {} virtual void Handle_StartTransactionRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StopTransactionRecord(SpReqAnsContext::Pointer ctx); private: CRecorderEntity* m_pEntity; }; }