#pragma once #include "SpIni.h" #include "EventCode.h" #include "Event.h" #include "InteractiveControl_msg_g.h" #include "InteractiveControl_server_g.h" using namespace InteractiveControl; #include "../mod_localmediaplay/LocalMediaPlay_msg_g.h" #include "../mod_localmediaplay/LocalMediaPlay_client_g.h" using namespace LocalMediaPlay; #include "../mod_assistantchannel/AssistantChannel_client_g.h" #include "../mod_assistantchannel/chan_protocol.h" using namespace AssistantChannel; #include "../mod_SalesRecorder/SalesRecorder_client_g.h" #include "../mod_SalesRecorder/SalesRecorder_def_g.h" using namespace SalesRecorder; #include "../mod_sipphone/SIPPhone_client_g.h" using namespace SIPPhone; #include "../mod_mediacontroller/MediaController_client_g.h" using namespace MediaController; #include "../mod_recorder/Recorder_client_g.h" using namespace Recorder; #include "../mod_counterconnector/CounterConnector_client_g.h" using namespace CounterConnector; enum eRecordDeviceState{ eNormal, eMicStarting, eEnvCamStarting, eOptCamStarting, eEwsCamStarting, eMicBreakDown, eEnvCamError, eOptCamError, eEwsCamError, eAllError }; class CITCtrlEntity; class ChannelClient : public ChannelService_ClientBase { public: ChannelClient(CITCtrlEntity *pEntity); virtual void OnMessage(ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer pData); virtual void OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer pData); }; class LocalPlayClient : public PlayService_ClientBase { public: LocalPlayClient(CITCtrlEntity *pEntity); }; class SalesRecordClient : public SalesRecorderSerVice_ClientBase { public: SalesRecordClient(CITCtrlEntity* pEntity); }; class SipPhoneClient : public PhoneService_ClientBase { public: SipPhoneClient(CITCtrlEntity* pEntity); }; class MediaControlClient : public MediaService_ClientBase { public: MediaControlClient(CITCtrlEntity* pEntity); }; class RecordClient : public RecorderSerVice_ClientBase { public: RecordClient(CITCtrlEntity* pEntity); }; class ConnectClient : public ConnectService_ClientBase { public: ConnectClient(CITCtrlEntity* pEntity); }; class CITCtrlEntity : public CEntityBase, public ISysVarListener, public ILogListener, public IBroadcastListener, public ITimerListener { public: CITCtrlEntity() : m_pChannelClient(NULL), m_pPlayClient(NULL), m_pSalesRecordClient(NULL), m_pSipPhoneClient(NULL), m_pMediaCtlClient(NULL), m_pRecordClient(NULL), m_bConnected(FALSE), m_bSalesRecording(FALSE),m_bNoticePlaying(FALSE), m_bDeskToPadFlag(true), m_bConnectAssist(FALSE){ m_bAdvOnFlag = false; m_iRecordMode = 0; m_bRecording = FALSE; m_pConnectClient = NULL; } virtual ~CITCtrlEntity() {} virtual const char *GetEntityName() const { return "InteractiveControl"; } virtual bool IsService()const{return true;} void OnAudioPlayRet(const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, LocalMediaPlay::AudioPlayRet &evt); virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszParam*/); virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext); virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext); virtual void OnStarted(); DeviceTypeEnum RvcGetDeviceType(); ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError); ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError); void BcastCustomerState(const char *pszValue,const char *pszOldValue,const char *pszEntityName); void BcastSessionid(const char *sessionid,const char *pszEntityName); void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName); void SyncMenuTree(int tree, int path); ErrorCodeEnum SendAgentText(CSimpleStringW strText); void SetMenuTree(CSimpleStringW strMenuTree); void SetMenuTreePath(CSimpleStringW strMenuPath); ErrorCodeEnum SendFrontSyncData(int id, CSimpleStringW strContent); ErrorCodeEnum SendH5SyncData(CSimpleStringW strContent); void SetConnected(BOOL bConnected); void OnReceivePacket(int type,int sub_type, const char *data, int size); void SendAnswer(int sub_type, ErrorCodeEnum Error); void SendAnswertoMobile(CSimpleStringW packet); ErrorCodeEnum StartPlayVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight, DWORD dwTimeout); ErrorCodeEnum StartPlayAudio(CSimpleStringW AudioNames, DWORD dwTimeout); ErrorCodeEnum StartPlayImage(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight, DWORD dwTimeout); ErrorCodeEnum StopPlayVideo(int nCfgInx, DWORD dwTimeout); ErrorCodeEnum StopPlayAudio(DWORD dwTimeout); ErrorCodeEnum StopPlayImage(int nCfgInx, DWORD dwTimeout); ErrorCodeEnum GetLocalVideoVolume(int nCfgInx, int &nVolume, DWORD dwTimeout); ErrorCodeEnum GetLocalAudioVolume(int& nVolume, DWORD dwTimeout); ErrorCodeEnum SetLocalVideoVolume(int nCfgInx, int nVolume, DWORD dwTimeout); ErrorCodeEnum SetLocalAudioVolume(int nVolume, DWORD dwTimeout); ErrorCodeEnum SendBusinessDesktopCmd(CSimpleStringA xapName, CSimpleStringA command); ErrorCodeEnum GetHandfreeVolume(int iType, int& nVolume, DWORD dwTimeout); ErrorCodeEnum SetHandfreeVolume(int iType, int nVolume, DWORD dwTimeout); ErrorCodeEnum GetPickupVolume(int iType, int& nVolume, DWORD dwTimeout); ErrorCodeEnum SetPickupVolume(int iType, int nVolume, DWORD dwTimeout); 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); ErrorCodeEnum StartEwsCamera(CSimpleStringA &errMsg); ErrorCodeEnum StopEwsCamera(); ErrorCodeEnum PlayVideo(CSimpleStringA strVideoName); ErrorCodeEnum StartPlaySalesRecordVideo(CSimpleStringA strVideoName, int iWndX, int iWndY, int iWndWidth, int iWndHeight); ErrorCodeEnum StopShowVideo(CSimpleStringA strVideoName); ErrorCodeEnum SaveVideo(CSimpleStringA strVideoName); ErrorCodeEnum DeleteVideo(CSimpleStringA strVideoName); ErrorCodeEnum StartRemoteRecord(CSimpleStringA strVideoName); ErrorCodeEnum StopRecord(CSimpleStringA strVideoName); ErrorCodeEnum AppendWaterMark(CSimpleStringW strVideoName, CSimpleStringW strWaterMark); eRecordDeviceState GetRecordDeviceState(); void AdverPlayManage(const char* pszValue, const char* pszOldValue); ErrorCodeEnum LoadEntityConfig(); bool IsSupportTransRecordDeviceType(); int GetRecordMode() { return m_iRecordMode; } ErrorCodeEnum StartTransactionRecord(CSimpleStringA strVideoName); ErrorCodeEnum StopTransactionRecord(CSimpleStringA strVideoName); ErrorCodeEnum HangupCall(); ErrorCodeEnum GetAudioDeviceInfo(int& iDeviceCount, CSimpleStringA& strAudioDev, int iAudioType, DWORD dwTimeout); ErrorCodeEnum GetVideoDeviceInfo(int& iDeviceCount, CSimpleStringA& strVideoDev, DWORD dwTimeout); ErrorCodeEnum GetMediaDeviceInfo(CSimpleStringA& strHandfreeIn, CSimpleStringA& strHandfreeOut, CSimpleStringA& strPickUpIn, CSimpleStringA& strPickUpOut, CSimpleStringA& strEnvCamera, CSimpleStringA& strOptCamera, DWORD dwTimeout); ErrorCodeEnum GetPickUpStatus(int& iStatus, DWORD dwTimeout); private: ErrorCodeEnum ConnectAssistChannel(); virtual void OnTimeout(DWORD dwTimerID); bool IsPlayerEntityAvailable(); ErrorCodeEnum ConnectToLocalPlayer(bool blogevt = true); bool IsPlayerConnectSessionOK(); void FreePlayClient(); bool IsSalesRecordEntityAvailable(); ErrorCodeEnum ConnectToSalesRecord(bool blogevt = true); bool IsSalesRecordConnectSessionOK(); void FreeSalesRecordClient(); bool IsSipPhoneEntityAvailable(); ErrorCodeEnum ConnectToSipPhone(bool blogevt = true); bool IsSipPhoneConnectSessionOK(); void FreeSipPhoneClient(); bool IsMediaCtrEntityAvailable(); ErrorCodeEnum ConnectMediaCtr(bool blogevt = true); bool IsMediaCtrConnectSessionOK(); void FreeMediaCtrClient(); void OnSalesRecordingFailed(const char* pszFailedMsg); bool IsRecordEntityAvailable(); ErrorCodeEnum ConnectToRecord(bool blogevt = true); bool IsRecordConnectSessionOK(); void FreeRecordClient(); bool IsCounterConnectorEntityAvailable(); ErrorCodeEnum ConnectCounterConnector(bool blogevt = true); bool IsCounterConnectSessionOK(); void FreeCounterClient(); SP_BEGIN_MSG_DISPATCH_MAP(CITCtrlEntity) SP_BEGIN_ENTITY_MSG("LocalMediaPlay") #ifdef RVC_OS_WIN SP_MSG_HANDLE_NS(LocalMediaPlay, AudioPlayRet, OnAudioPlayRet) #else case eMsg_AudioPlayRet:\ if (eMsgSig_AudioPlayRet == dwMessageSignature) { \ LocalMediaPlay::AudioPlayRet t; \ ErrorCodeEnum Error = SpBuffer2Object(Buffer, t); \ if (Error == Error_Succeed)\ OnAudioPlayRet(pszEntityName, dwMessageId, dwMessageSignature, t); \ } else { \ LOG_TRACE("%s signature mismatched!", "AudioPlayRet"); \ }\ break; #endif SP_END_ENTITY_MSG() SP_END_MSG_DISPATCH_MAP() private: CSimpleStringA m_SessionID; BOOL m_bConnected; CSimpleStringW m_strMenuTree; CSimpleStringW m_strMenuPath; ChannelClient* m_pChannelClient; LocalPlayClient* m_pPlayClient; SalesRecordClient* m_pSalesRecordClient; SipPhoneClient* m_pSipPhoneClient; MediaControlClient* m_pMediaCtlClient; RecordClient* m_pRecordClient; ConnectClient* m_pConnectClient; CAutoArray m_arrListener; CUUID m_uidLocalMediaListenser; int m_nSysCallType;//0:普通模式,1:p2p模式 BOOL m_bConnectAssist; BOOL m_bConnectPlayer; int m_iRecordMode; public: DeviceTypeEnum m_eDeviceType; BOOL m_bSalesRecording; bool m_bDeskToPadFlag; bool m_bAdvOnFlag; BOOL m_bNoticePlaying; BOOL m_bRecording; }; class UIServiceSession : public UIService_ServerSessionBase { public: UIServiceSession(CITCtrlEntity *pEntity) : m_pEntity(pEntity) {} virtual void Handle_SetUIState(SpOnewayCallContext::Pointer ctx); virtual void Handle_SendAgentText(SpReqAnsContext::Pointer ctx); virtual void Handle_SetMenuTree(SpOnewayCallContext::Pointer ctx); virtual void Handle_SetMenuPath(SpOnewayCallContext::Pointer ctx); virtual void Handle_SendFrontSyncData(SpOnewayCallContext::Pointer ctx); virtual void Handle_SendH5SyncData(SpOnewayCallContext::Pointer ctx); virtual void Handle_StartRecordVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_StopRecordVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_ShowVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_SaveVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_DeleteVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_StartPhotograph(SpOnewayCallContext::Pointer ctx); virtual void Handle_StopPhotograph(SpOnewayCallContext::Pointer ctx); virtual void Handle_StartPlayVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_StartPlayAudio(SpReqAnsContext::Pointer ctx); virtual void Handle_StartPlayImage(SpReqAnsContext::Pointer ctx); virtual void Handle_StopPlayVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_StopPlayAudio(SpReqAnsContext::Pointer ctx); virtual void Handle_StopPlayImage(SpReqAnsContext::Pointer ctx); virtual void Handle_SendOperateState(SpOnewayCallContext::Pointer ctx); virtual void Handle_HideOnlineVideo(SpOnewayCallContext::Pointer ctx); virtual void Handle_ShowOnlineVideo(SpOnewayCallContext::Pointer ctx); virtual void Handle_AnswerPacket(SpReqAnsContext::Pointer ctx); virtual void Handle_GetLocalVideoVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SetLocalVideoVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_GetLocalAudioVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SetLocalAudioVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SendBusinessDesktopCmd(SpReqAnsContext::Pointer ctx); virtual void Handle_HideLocalVideo(SpOnewayCallContext::Pointer ctx); virtual void Handle_ShowLocalVideo(SpOnewayCallContext::Pointer ctx); virtual void Handle_HidePersonArea(SpOnewayCallContext::Pointer ctx); virtual void Handle_ShowPersonArea(SpOnewayCallContext::Pointer ctx); virtual void Handle_VideoAppendWaterMark(SpReqAnsContext::Pointer ctx); virtual void Handle_StartRemoteRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StopRemoteRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StartSalesRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StartRecordPreview(SpReqAnsContext::Pointer ctx); virtual void Handle_AjustVideoPreviewSize(SpReqAnsContext::Pointer ctx); virtual void Handle_StartSalesVideoRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StopShowVideo(SpReqAnsContext::Pointer ctx); virtual void Handle_StartPlaySalesRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_GetHandfreeOutVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SetHandfreeOutVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_GetPickupOutVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SetPickupOutVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_StartPlayNotice(SpReqAnsContext::Pointer ctx); virtual void Handle_StopPlayNotice(SpReqAnsContext::Pointer ctx); virtual void Handle_GetRecordMode(SpReqAnsContext::Pointer ctx); virtual void Handle_StartTransactionRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_StopTransactionRecord(SpReqAnsContext::Pointer ctx); virtual void Handle_GetCallState(SpReqAnsContext::Pointer ctx); virtual void Handle_HangupCall(SpOnewayCallContext::Pointer ctx); virtual void Handle_GetTransactionRecordState(SpReqAnsContext::Pointer ctx); virtual void Handle_GetHandfreeInVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SetHandfreeInVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_GetPickupInVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_SetPickupInVolume(SpReqAnsContext::Pointer ctx); virtual void Handle_GetAudioInDevices(SpReqAnsContext::Pointer ctx); virtual void Handle_GetAudioOutDevices(SpReqAnsContext::Pointer ctx); virtual void Handle_GetCameraInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_GetMediaDeviceInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_GetPickUpStatus(SpReqAnsContext::Pointer ctx); private: CITCtrlEntity *m_pEntity; };