#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 "SelfChecker_client_g.h" #include "SelfChecker_def_g.h" #ifndef RVC_SALES_RECORD_SUFFIX #define RVC_SALES_RECORD_SUFFIX "S_" #endif // !RVC_SALES_RECORD_SUFFIX using namespace SalesRecorder; using namespace SelfChecker; 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; 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); private: CSalesRecorderEntity *m_pEntity; }; class SelfChekerClient:public SelfCheckerService_ClientBase { public: explicit SelfChekerClient(CSalesRecorderEntity*pEntity); }; #ifdef RVC_OS_WIN class CSalesRecorderEntity : public CEntityBase, public CHostApi, public ILogListener,public ISysVarListener, public ITimerListener { public: CSalesRecorderEntity() : m_pRecorder(NULL), m_bStarted(false), m_loglevel(RECORD_LOG_INFO), m_lowestlevel(RECORD_LOG_DEBUG), m_eRecordType(eWMV) { ZeroMemory(m_SalesVideoName, MAX_PATH); } #else class CSalesRecorderEntity : public CEntityBase, public CHostApi, public ILogListener, public ISysVarListener, public ITimerListener { public: CSalesRecorderEntity() : m_pRecorder(NULL), m_bStarted(false), m_loglevel(RECORD_LOG_INFO), m_lowestlevel(RECORD_LOG_DEBUG) { ZeroMemory(m_SalesVideoName, MAX_PATH); } #endif // RVC_OS_WIN 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 GetActiveCamera(); 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 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) void StartRecord(const char* wmvfilename, int videoquality, int audioOutBitRate, SubtitleParam* subtitleParam = NULL, BOOL bWholeSection = FALSE, BOOL bSessionManage = FALSE, eRvcRecordType eRecordType = eSingleSide); void StartPhone2PadRecord(const int fps, const char* wmvfilename, int videoquality, int audioOutBitRate, SubtitleParam* subtitleParam, BOOL bWholeSection, BOOL bSessionManage, eRvcRecordType eRecordType); void StartOnSiteSalesRecord(const int fps, const char* videofilename, int videoquality, int audioOutBitRate, SubtitleParam* subtitleParam, BOOL bWholeSection, BOOL bSessionManage, eRvcRecordType eRecordType); void DeleteAllVideo(const char* wmvfilename); ErrorCodeEnum DeleteVideo(const char* wmvfilename); void HandleUkeyPullout(); int GetSystemMemoryUsage(); double GetSystemCpuUsage(); ErrorCodeEnum HandleSetAudioTransmissionFlag(bool bFlag); ErrorCodeEnum HandleVideoAppendWatermark(const char* pszVideoName, const char* pszWaterMark); #else void StartRecord(const char* videofilename, int videoquality, int audioOutBitRate, SubtitleParam* subtitleParam = NULL, BOOL bWholeSection = FALSE, BOOL bSessionManage = FALSE, eRvcRecordType eRecordType = eSingleSide); void StartOnSiteSalesRecord(const int fps, const char* videofilename, int videoquality, int audioOutBitRate, SubtitleParam* subtitleParam, BOOL bWholeSection, BOOL bSessionManage, eRvcRecordType eRecordType); ErrorCodeEnum DeleteVideo(const char* videofilename); bool SecureClientConnect(); void SecureClientRelease(); ErrorCodeEnum HandleVideoAppendWatermark(const char* pszVideoName, const wchar_t* pszWaterMark); bool InitSalesRecorder(); bool ReleaseSalesRecorder(); #endif //RVC_OS_WIN bool GetStandardQualityOnSiteSalesRecorder(); bool GetHighQualityOnSiteSalesRecorder(); ErrorCodeEnum StopRecord(); ErrorCodeEnum HandleStopRecord(const char* pszMessage); ErrorCodeEnum ShowVideo(const char *videofilename); ErrorCodeEnum PlaySalesRecordVideo(const char *videofilename, int iWndX, int iWndY, int iWndWidth, int iWndHeight); ErrorCodeEnum SaveVideo(const char *videofilename); // 获取终端准入状态(这个系统变量为A是表示准入通过) CSimpleStringA GetTerminalStage(); ErrorCodeEnum HandleDisplayVideo(); 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(); ErrorCodeEnum HandleStopShowVideo(); ErrorCodeEnum HandlePlaySalesRecordVideo(int iWndX, int iWndY, int iWndWidth, int iWndHeight); ErrorCodeEnum PostSalesRecordInfos(); ErrorCodeEnum AddToSalesRecordList(const char* videopath, const char* strfilename, unsigned long ufilesize); private: DeviceTypeEnum m_eDeviceType; int m_iActiveCamera; int m_iCameraState; bool m_bNeedRestart; #ifdef RVC_OS_WIN BOOL m_bWholeSection; BOOL m_bApplyHighQuality; __int64 m_xIdlePre, m_xKernelPre, m_xUserPre; eVideoFormat m_eRecordType; #else bool m_bWholeSection; bool m_bApplyHighQuality; #endif // RVC_OS_WIN CAutoArray m_arrListener; char m_SalesVideoName[MAX_PATH]; int m_nSysCallType; 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; int m_audio_samplerate; int m_audio_out_bitrate; record_loglevel m_loglevel; record_loglevel m_lowestlevel; eAudioOutPutType m_eAudioOutQuality; bool m_bIsAudioNsOn; int m_iAudioNsPolicy; int m_iAudioChannels; bool m_bPostOn; CSimpleStringA m_strHttpServerAddr; CSimpleStringA m_strHttpServerAPI; int m_iHttpTimeOut; CSimpleStringA m_strAppVersion; CSimpleStringA m_strTerminalId; vector m_vRecordList; eRvcBusinessStatus m_eBusinessStatus; friend class SalesRecordServiceSession; }; }