#pragma once #include "SpBase.h" #include "SpIni.h" #include "libvideorecord/libvideorecord.h" #include "EventCode.h" #include "../mod_recorder/recordinfo.h" #include "SalesRecorder_server_g.h" #include "SalesRecorder_msg_g.h" #include "HealthManager_client_g.h" #include "HealthManager_def_g.h" #ifndef RVC_SALES_RECORD_SUFFIX #define RVC_SALES_RECORD_SUFFIX "S_" #endif // !RVC_SALES_RECORD_SUFFIX using namespace SalesRecorder; using namespace HealthManager; namespace SalesRecorder { typedef struct { char CustCardNo[24]; char CustName[32]; char ProductCode[32]; char ProductName[128]; char SapID[12]; char CustManagerName[32]; char Reserved1[128]; char Reserved2[128]; } RecordSubTitle; class CSalesRecorderEntity : public CEntityBase, public CHostApi, public ILogListener, public ISysVarListener, public ITimerListener { public: CSalesRecorderEntity() : m_pRecorder(NULL), m_bStarted(false) { ZeroMemory(m_SalesVideoName, MAX_PATH); } virtual ~CSalesRecorderEntity() { /*empty implementation*/ } virtual const char *GetEntityName() const { return "SalesRecorder"; } const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } virtual bool IsService() const{ return true; } virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass); virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext); ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError); virtual void OnStarted(); virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext); ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError); virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer pTransactionContext); virtual int GetRecordCamera(); virtual int GetCameraState(); virtual void Debug(record_loglevel elevel, const char* fmt, ...); virtual void vDebug(record_loglevel elevel, const char* str, va_list list); 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 void OnTimeout(DWORD dwTimerID); virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName); 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); #if defined(RVC_OS_WIN) int GetSystemMemoryUsage(); double GetSystemCpuUsage(); ErrorCodeEnum HandleVideoAppendWatermark(const char* pszVideoName, const char* pszWaterMark); #else bool InitSalesRecorder(); bool ReleaseSalesRecorder(); ErrorCodeEnum HandleVideoAppendWatermark(const char* pszVideoName, const wchar_t* pszWaterMark); #endif //RVC_OS_WIN void StartRecord(const char* pszVideoName, int videoquality, SubtitleParam* subtitleParam = NULL, bool bWholeSection = false, bool bSessionManage = false, eRvcRecordType eRecordType = eSingleSide); void StartOnSiteSalesRecord(const int fps, const char* pszVideoName, int videoquality, SubtitleParam* subtitleParam, bool bWholeSection, bool bSessionManage, eRvcRecordType eRecordType); void DeleteAllVideo(const char* pszVideoName); ErrorCodeEnum DeleteVideo(const char* pszVideoName); bool GetStandardQualityOnSiteSalesRecorder(); bool GetHighQualityOnSiteSalesRecorder(); ErrorCodeEnum StopRecord(); ErrorCodeEnum HandleStopRecord(const char* pszMessage); ErrorCodeEnum SaveVideo(const char * pszVideoName); // 获取终端准入状态(这个系统变量为A是表示准入通过) CSimpleStringA GetTerminalStage(); ErrorCodeEnum HandleSaveVideo(); ErrorCodeEnum HandleDeleteVideo(); void HandleReturnMenu(); ErrorCodeEnum HandleStartRecord(const char *pszMessage, const bool bRemoteRecord); ErrorCodeEnum HandleSalesRecordEntityException(const char* pszMessage); ErrorCodeEnum RealSelfCheck(); void UploadTempPathVideos(); ErrorCodeEnum SetRecordAudioQuality(int iAudioQuality); ErrorCodeEnum SetRecordAudioNsPolicy(int iNsPolicy); ErrorCodeEnum SetRecordAudioChannles(int iAudioChannles); DeviceTypeEnum RvcGetDeviceType(); int HandleEncryptVideoRecord(const char* videofilename); ErrorCodeEnum SetRecordCamera(int iCamera); ErrorCodeEnum GetEntityConfig(); int GetMaxDiskPercent(); private: DeviceTypeEnum m_eDeviceType; int m_iActiveCamera; int m_iCameraState; bool m_bNeedRestart; bool m_bWholeSection; int m_iRecordCamera; #ifdef RVC_OS_WIN __int64 m_xIdlePre, m_xKernelPre, m_xUserPre; #endif // RVC_OS_WIN CAutoArray m_arrListener; char m_SalesVideoName[MAX_PATH]; bool m_bStarted; Clibvideorecord *m_pRecorder; CSimpleStringA m_terminalNo; CSimpleStringA m_TempDir; CSimpleStringA m_RecordSaveDir; bool m_last_disk_overtop; int m_max_disk_percent; eAudioOutPutType m_eAudioOutQuality; bool m_bIsAudioNsOn; int m_iAudioNsPolicy; int m_iAudioChannels; bool m_bEncFlag; int m_iRemoteRecordType; }; class SalesRecordServiceSession : public SalesRecorderSerVice_ServerSessionBase { public: explicit SalesRecordServiceSession(CSalesRecorderEntity* pEntity) : m_pEntity(pEntity) {} virtual void Handle_GetOFLVideoRecords(SpReqAnsContext::Pointer ctx); virtual void Handle_CheckVideoDiskStatus(SpReqAnsContext::Pointer ctx); virtual void Handle_PlayVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_SaveVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_StopRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_SetAudioTransFlag(SpReqAnsContext::Pointer ctx); virtual void Handle_StopShowVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_PlaySalesRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StartRemoteRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_DeleteVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_AppendWatermark(SpReqAnsContext::Pointer ctx); virtual void Handle_SetRecordCamera(SpReqAnsContext::Pointer ctx); private: CSalesRecorderEntity* m_pEntity; }; }