const RId IFileContainer::maxRId() { ++m_lMaxRid; return RId(m_lMaxRid); }
STDMETHODIMP CCoFAViewer::HandleRequest(BSTR dstUserId,ULONG dstSvcId,BSTR srcUserId,ULONG srcSvcId,ULONG rId,ULONG rType,ULONG param,BSTR params) { TRY_CATCH_COM Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest()")); USES_CONVERSION; switch(rType) { case BRT_PING: { Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_PING)")); if(!m_brokerEvents.m_dwCookie) throw MCException("_IBrokerClientEvents has not set. Call IBrokerClient::Init() method at first"); HRESULT result; CComPtr<_IBrokerClientEvents> brokerEvents; if(S_OK!=(result=m_brokerEvents.CopyTo(&brokerEvents))) throw CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),tstring(_T("IBrokerClientEvents obtaining failed in Broker")),result); if(!brokerEvents.p) throw MCException("_IBrokerClientEvents has not marshaled"); brokerEvents->RequestSent(srcUserId,srcSvcId,srcUserId,dstSvcId,rId,rType|BRT_RESPONSE,param,params);//response on ping } break; case BRT_PING|BRT_RESPONSE: { Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_PING|BRT_RESPONSE)")); } break; case BRT_SERVICE|BRT_RESPONSE: { Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_SERVICE|BRT_RESPONSE)")); if(BRR_BPFAILED==param) { if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(Format(BRT_SERVICE_BPFAILED,OLE2T(params)), EFMS_PERMISSION_DENIED); m_commandManager->EnableRequestButton(); } } else if(BRR_ERROR==param) { if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(Format(_T("%s. Request handling failed"),BRT_SERVICE_DECLINED), EFMS_PERMISSION_DENIED); m_commandManager->EnableRequestButton(); } } else if(BRR_DECLINED==param) { if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(BRT_SERVICE_DECLINED, EFMS_PERMISSION_DENIED); m_commandManager->EnableRequestButton(); } } else if(BRR_APPROVED==param) { if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(BRT_SERVICE_APPROVED, EFMS_PERMISSION_RECEIVED); m_commandManager->EnableRequestButton(); } if(!m_brokerEvents.m_dwCookie) throw MCException("_IBrokerClientEvents has not set. Call IBrokerClient::Init() method at first"); HRESULT result; CComPtr<_IBrokerClientEvents> brokerEvents; if(S_OK!=(result=m_brokerEvents.CopyTo(&brokerEvents))) throw CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),tstring(_T("IBrokerClientEvents obtaining failed in Broker")),result); if(!brokerEvents.p) throw MCException("_IBrokerClientEvents has not marshaled"); if((result=brokerEvents->GetSubStream(CComBSTR(BUSERIDPDV_AUTOSET), BSVCIDPDV_AUTOSET, FASSID_MAIN, FASSP_SERVICE))!=S_OK) MLog_Exception(CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),tstring(_T("Service substream obtaining failed")),result)) /// Requesting information for logger init brokerEvents->RequestSent(CComBSTR(BUSERIDPDV_LOCAL),BSVCIDPDV_BROKER,CComBSTR(BUSERIDPDV_AUTOSET),BSVCIDPDV_AUTOSET,RId(),BRT_GET_SERVICE_INFO,0,CComBSTR(_T(""))); } else if(BRR_BUSY==param) { if (NULL != m_commandManager.get()) { //m_commandManager->ShowStatusMessage(BRT_SERVICE_BUSY); m_commandManager->ShowStatusMessage(_T("Another service is waiting for customer approval or installation. Please try again."), EFMS_PERMISSION_DENIED); m_commandManager->EnableRequestButton(); } } else { // TODO: show progress: SCriptEngine response is unknown (code=0x%x) %s"),param,OLE2T(params))); if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(Format(_T("File Manager response is unknown (code=0x%x) %s"),param,OLE2T(params))); m_commandManager->EnableRequestButton(); } MLog_Exception(CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),_T("Responce type is unknown. HandleRequest(%s,0x%x,%s,0x%x,0x%x,0x%x,0x%x,%s)"),OLE2T(dstUserId),dstSvcId,OLE2T(srcUserId),srcSvcId,rId,rType,param,OLE2T(params))); } } break; case BRT_INSTALLATION: Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_INSTALLATION)")); if (NULL != m_commandManager.get()) if(param) m_commandManager->ShowStatusMessage(Format(BRT_INSTALLATION_EXFORMAT,OLE2T(params),param), EFMS_INSTALLATION_PROGRESS); else m_commandManager->ShowStatusMessage(_OLE2T(params), EFMS_INSTALLATION_PROGRESS); break; case BRT_NWL_DISCONNECTED: { Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_NWL_DISCONNECTED)")); PostMessage(m_msgSessionStopped, STREAM_ERROR, 0); } break; case BRT_GET_SERVICE_INFO|BRT_RESPONSE: Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_GET_SERVICE_INFO|BRT_RESPONSE)")); if (NULL != m_commandManager.get()) { tstring sid = _T("unknown"); tstring expertName = _T("unknown"); tstring customerName = _T("unknown"); USES_CONVERSION; std::vector<tstring> info = tokenize(_OLE2T(params), _T(";")); //params="[userId];;[UserName];;[remoteUserId];;[remoteUserName];;[sId]" if (info.size() != 5) Log.Add(_ERROR_,_T("Unknown BRT_GET_SERVICE_INFO response string format %s"),W2T(params)); else { sid = info[4]; customerName = Format(_T("%s[%s]"),info[3].c_str(),info[2].c_str()); expertName = Format(_T("%s[%s]"),info[1].c_str(),info[0].c_str()); } m_commandManager->InitTransferLogging(sid, customerName, expertName); } break; case BRT_CONNECTION: Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_CONNECTION)")); if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(_OLE2T(params), EFMS_PERMISSION_REQUEST_SENT); m_commandManager->EnableRequestButton(FALSE); } break; case BRT_STOP_SERVICE: { Log.Add(_MESSAGE_,_T("CCoFAViewer::HandleRequest(BRT_STOP_SERVICE)")); PostMessage(m_msgSessionStopped, REMOTE_STOP, 0); /// Reporting state to customer's JS if(!m_brokerEvents.m_dwCookie) throw MCException("_IBrokerClientEvents has not set. Call IBrokerClient::Init() method at first"); HRESULT result; CComPtr<_IBrokerClientEvents> brokerEvents; if(S_OK!=(result=m_brokerEvents.CopyTo(&brokerEvents))) throw CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),tstring(_T("IBrokerClientEvents obtaining failed in Broker")),result); if(!brokerEvents.p) throw MCException("_IBrokerClientEvents has not marshaled"); brokerEvents->RequestSent(CComBSTR(BUSERIDPDV_AUTOSET),BSVCIDPDV_JS,CComBSTR(BUSERIDPDV_AUTOSET),BSVCIDPDV_AUTOSET,RId()/*rid*/,BRT_SRV_STATE_CHANGED,ESM_SERVICE_STOPPED/*off*/,CComBSTR(_T("File manager"))); //TODO: treat name carefully } break; default: throw CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),_T("Request type is unknown. HandleRequest(%s,0x%x,%s,0x%x,0x%x,0x%x,0x%x,%s)"),OLE2T(dstUserId),dstSvcId,OLE2T(srcUserId),srcSvcId,rId,rType,param,OLE2T(params)); } CATCH_LOG_COM }
LRESULT CCoFAViewer::OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { TRY_CATCH HRESULT result; if(!m_brokerEvents.m_dwCookie) throw MCException("_IBrokerClientEvents has not set. Call IBrokerClient::Init() method at first"); CComPtr<_IBrokerClientEvents> brokerEvents; if(S_OK!=(result=m_brokerEvents.CopyTo(&brokerEvents))) throw CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),tstring(_T("IBrokerClientEvents obtaining failed in Broker")),result); if(!brokerEvents.p) throw MCException("_IBrokerClientEvents has not marshaled"); brokerEvents->RequestSent(CComBSTR(BUSERIDPDV_LOCAL),BSVCIDPDV_JS,CComBSTR(BUSERIDPDV_AUTOSET),BSVCIDPDV_AUTOSET,RId(),BRT_SELECT_WIDGET,0,CComBSTR(_T("empty"))); return MA_ACTIVATE; CATCH_THROW() }
void CCoFAViewer::OnSendRequestBtn() { TRY_CATCH // Sending accept deny request //tstring& reqParams=Format(BRT_SERVICE_FATEXT, 0/*Permission?*/); tstring& reqParams=Format(BRT_SERVICE_FAFORMAT,BRT_SERVICE_FATEXT,BRT_SERVICE_APPROVE,BRT_SERVICE_DECLINE); if (NULL != m_commandManager.get()) { m_commandManager->ShowStatusMessage(BRT_SERVICE_WAITING_APPROVE, EFMS_PERMISSION_REQUEST_SENT); m_commandManager->EnableRequestButton(FALSE); } if(!m_brokerEvents.m_dwCookie) throw MCException("_IBrokerClientEvents has not set. Call IBrokerClient::Init() method at first"); HRESULT result; CComPtr<_IBrokerClientEvents> brokerEvents; if(S_OK!=(result=m_brokerEvents.CopyTo(&brokerEvents))) throw CExceptionBase(__LINE__,_T(__FILE__),_T(__DATE__),tstring(_T("IBrokerClientEvents obtaining failed in Broker")),result); if(!brokerEvents.p) throw MCException("_IBrokerClientEvents has not marshaled"); brokerEvents->RequestSent(CComBSTR(BUSERIDPDV_AUTOSET),BSVCIDPDV_BROKER,CComBSTR(BUSERIDPDV_AUTOSET),BSVCIDPDV_AUTOSET,RId(),BRT_SERVICE,BST_FAHOST,CComBSTR(reqParams.c_str())); CATCH_LOG() }