123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #include "stdafx.h"
- #include "SpBase.h"
- #include "sysvar.h"
- #include "mod_assistantchannel/AssistantChannel_client_g.h"
- using namespace AssistantChannel;
- #include "mod_assistantchannel/chan_protocol.h"
- #define LOG_EVT_SELFCHECK_ASSISTANTCHANNEL_IDLE 0x50500001 //协助通道重启
- class CAgentInterpreterEntity;
- class CamSwitchChannelClient : public ChannelService_ClientBase
- {
- public:
- CamSwitchChannelClient(CAgentInterpreterEntity *pEntity);
- virtual void OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer<IReleasable> pData);
- virtual void OnMessage(ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer<IReleasable> pData);
- };
- // code:0x906
- class CAgentInterpreterEntity : public CEntityBase,public ILogListener
- {
- public:
- CAgentInterpreterEntity() : m_iCurrentOp(ACM_CAMSWITCH_AUTO) {}
- virtual ~CAgentInterpreterEntity() {}
- virtual const char *GetEntityName() const { return "AgentInterpreter"; }
- virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- ErrorCodeEnum Error = __OnStart(Error_Succeed);
- pTransactionContext->SendAnswer(Error);
- }
- virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- ErrorCodeEnum Error = __OnClose(Error_Succeed);
- pTransactionContext->SendAnswer(Error);
- }
- ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError)
- {
- ErrorCodeEnum Error;
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- int i = 0;
- m_arrListener.Init(1);
- pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_SELFCHECK_ASSISTANTCHANNEL_IDLE,NULL,false);
- //m_iCurrentOp = ACM_CAMSWITCH_AUTO;
- ChangeSysvar(ACM_CAMSWITCH_AUTO); // change to auto state anyway when started
- m_pCamSwitchChannel = new CamSwitchChannelClient(this);
- Error = m_pCamSwitchChannel->Connect();
- if (Error != Error_Succeed) {
- m_pCamSwitchChannel->SafeDelete();
- return Error;
- }
- {
- ChannelService_BeginState_Sub Sub;
- Error = m_pCamSwitchChannel->BeginState(Sub);
- if (Error != Error_Succeed) {
- LOG_TRACE("BeginState biz channel failed!");
- m_pCamSwitchChannel->GetFunction()->CloseSession();
- m_pCamSwitchChannel = NULL;
- }
- }
- {
- ChannelService_BeginRecv_Sub Sub;
- Sub.type = ACM_TYPE_CAMSWITCH;
- Error = m_pCamSwitchChannel->BeginRecv(Sub);
- if (Error != Error_Succeed) {
- m_pCamSwitchChannel->GetFunction()->CloseSession();
- m_pCamSwitchChannel = NULL;
- return Error;
- }
- }
- return Error_Succeed;
- }
- virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
- const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
- const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage)
- {
- if (dwUserCode == LOG_EVT_SELFCHECK_ASSISTANTCHANNEL_IDLE)
- {
- Dbg("recv LOG_EVT_SELFCHECK_ASSISTANTCHANNEL_IDLE");
- if (m_pCamSwitchChannel!=NULL)
- {
- m_pCamSwitchChannel->GetFunction()->CloseSession();
- m_pCamSwitchChannel = NULL;
- Dbg("Close AssistChannel Session ");
- }
- if (m_pCamSwitchChannel == NULL)
- {
- Dbg("ReConnection AssistChannel Session");
- m_pCamSwitchChannel = new CamSwitchChannelClient(this);
- ErrorCodeEnum Error = m_pCamSwitchChannel->Connect();
- if (Error != Error_Succeed)
- {
- m_pCamSwitchChannel->SafeDelete();
- Dbg("AssistChannelClient connect fail!");
- }
- if (Error == Error_Succeed)
- {
- ChannelService_BeginRecv_Sub Sub;
- Sub.type = ACM_TYPE_CAMSWITCH;
- Error = m_pCamSwitchChannel->BeginRecv(Sub);
- if (Error != Error_Succeed)
- {
- m_pCamSwitchChannel->GetFunction()->CloseSession();
- m_pCamSwitchChannel = NULL;
- }
- }
- if (Error == Error_Succeed)
- {
- ChannelService_BeginState_Sub Sub;
- Error = m_pCamSwitchChannel->BeginState(Sub);
- if (Error != Error_Succeed)
- {
- LOG_TRACE("BeginState biz channel failed!");
- m_pCamSwitchChannel->GetFunction()->CloseSession();
- m_pCamSwitchChannel = NULL;
- }
- }
- }
- }
- }
- ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError)
- {
- CSmartPointer<IEntityFunction> spFunction = GetFunction();
- for (int i = 0; i < m_arrListener.GetCount(); ++i)
- {
- spFunction->UnsubscribeLog(m_arrListener[i]);
- }
- if (m_pCamSwitchChannel) {
- m_pCamSwitchChannel->GetFunction()->CloseSession();
- m_pCamSwitchChannel = NULL;
- }
- return Error_Succeed;
- }
- ErrorCodeEnum SwitchCamera(int op)
- {
- if (m_iCurrentOp != op) {
- ChangeSysvar(op);
- m_iCurrentOp = op;
- }
- return Error_Succeed;
- }
- void ChangeSessionState(int on)
- {
- if (!on) {
- if (m_iCurrentOp != ACM_CAMSWITCH_AUTO) {
- ChangeSysvar(ACM_CAMSWITCH_AUTO);
- m_iCurrentOp = ACM_CAMSWITCH_AUTO;
- }
- }
- }
- private:
- ErrorCodeEnum ChangeSysvar(int op)
- {
- if (op == ACM_CAMSWITCH_AUTO) {
- Dbg("agent --> cam switch to auto");
- GetFunction()->SetSysVar(SYSVAR_AGENTCAMERASWITCH, AGENTCAMERASWITCH_AUTO);
- } else if (op == ACM_CAMSWITCH_ENV) {
- Dbg("agent --> cam switch to env");
- GetFunction()->SetSysVar(SYSVAR_AGENTCAMERASWITCH, AGENTCAMERASWITCH_ENV);
- } else if (op == ACM_CAMSWITCH_OPT) {
- Dbg("agent --> cam switch to opt");
- GetFunction()->SetSysVar(SYSVAR_AGENTCAMERASWITCH, AGENTCAMERASWITCH_OPT);
- } else {
- _ASSERT(0);
- }
- return Error_Succeed;
- }
- private:
- CamSwitchChannelClient *m_pCamSwitchChannel;
- int m_iCurrentOp;
- CAutoArray<CUUID> m_arrListener;
- };
- CamSwitchChannelClient::CamSwitchChannelClient( CAgentInterpreterEntity *pEntity ) : ChannelService_ClientBase(pEntity)
- {
- }
- void CamSwitchChannelClient::OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer<IReleasable> pData)
- {
- if (Error == Error_Succeed) {
- CAgentInterpreterEntity *pEntity = static_cast<CAgentInterpreterEntity*>(m_pEntityBase);
- if (Msg.state == eChannelState_Idle) {
- pEntity->ChangeSessionState(0);
- } else if (Msg.state == eChannelState_Connected) {
- pEntity->ChangeSessionState(1);
- }
- }
- }
- void CamSwitchChannelClient::OnMessage( ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer<IReleasable> pData )
- {
- LOG_FUNCTION();
- if (Error == Error_Succeed) {
- CAgentInterpreterEntity *pEntity = static_cast<CAgentInterpreterEntity*>(m_pEntityBase);
- pEntity->SwitchCamera(Msg.sub_type);
- }
- }
- SP_BEGIN_ENTITY_MAP()
- SP_ENTITY(CAgentInterpreterEntity)
- SP_END_ENTITY_MAP()
|