// pac3Plug.cpp: implementation of the CPac3Plug class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "pac3Plug.h" #include "se_rbac.h" //#include "se_btl.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ///////////////////////////////////////////////////////////////////////// extern "C" __declspec(dllexport) void StartBroadcast(PASelectParam * pParam, void *pPlugin) { /* char s1[36]; unsigned int tmpV = pParam->stationNo[0] + (unsigned int)pParam->stationNo[1] * 256 + (unsigned int)pParam->stationNo[2] * 65536 + (unsigned int)pParam->stationNo[3] * 16777216; itoa(tmpV, s1, 2); m_logger->WriteFmtStrWithTime_L3("Station Select Low : %s", s1); tmpV = pParam->stationNo[4] + (unsigned int)pParam->stationNo[5] * 256 + (unsigned int)pParam->stationNo[6] * 65536 + (unsigned int)pParam->stationNo[7] * 16777216; itoa(tmpV, s1, 2); m_logger->WriteFmtStrWithTime_L3("Station Select High : %s", s1); tmpV = pParam->zone[0] + (unsigned int)pParam->zone[1] * 256; itoa(tmpV, s1, 2); m_logger->WriteFmtStrWithTime_L3("Zone Select : %s", s1); */ CPlugPAC3 *pPlug = (CPlugPAC3 *)pPlugin; if (NULL == pPlug) return; uint32 stationNo_low = 0; uint32 stationNo_High = 0; uint16 zoneV = 0; uint i; for (i=0; i<4+4; i++)//WYF 20190322 修正bug { uint32 tmpV = pParam->stationNo[i]; if (i < 4) { tmpV = tmpV << (i*8); stationNo_low += tmpV; } else { int j = i - 4; tmpV = tmpV << (j*8); stationNo_High += tmpV; } } if (stationNo_low == 0 && stationNo_High == 0) return; zoneV = pParam->zone[0] + (uint16)(pParam->zone[1]) * 256; if (zoneV == 0) return; pPlug->m_csiServer.PA_BeginSelect(); pPlug->m_csiServer.PA_Login(pPlug->m_nKeyID); pPlug->m_csiServer.PA_SelectZone(stationNo_low, stationNo_High, zoneV); int nRet = pPlug->m_csiServer.PA_Mike(); } extern "C" __declspec(dllexport) void StopBroadcast(PASelectParam * pParam, void *pPlugin) { CPlugPAC3 *pPlug = (CPlugPAC3 *)pPlugin; if (NULL == pPlug) return; uint32 stationNo_low = 0; uint32 stationNo_High = 0; uint16 zoneV = 0; uint i; for (i=0; i<4+4; i++)//WYF 20190322 修正bug { uint32 tmpV = pParam->stationNo[i]; if (i < 4) { tmpV = tmpV << (i*8); stationNo_low += tmpV; } else { int j = i - 4; tmpV = tmpV << (j*8); stationNo_High += tmpV; } } if (stationNo_low == 0 && stationNo_High == 0) return; zoneV = pParam->zone[0] + (uint16)(pParam->zone[1]) * 256; if (zoneV == 0) return; pPlug->m_csiServer.PA_BeginSelect(); pPlug->m_csiServer.PA_Login(pPlug->m_nKeyID); pPlug->m_csiServer.PA_SelectZone(stationNo_low, stationNo_High, zoneV); int nRet = pPlug->m_csiServer.PA_Stop(1); } ////////////////////////////////////////////////////////////////////// // Construction/Destruction CPlugPAC3::CPlugPAC3(LPVOID lpParam) : m_hDll(NULL), m_flushTime(1000), m_nTimerGetStatus(0) { memset(&m_paStatus, 0, sizeof(PAStatus)); m_logger = new Logger("PAC3", "plugin_paC3.log"); // 初始化权限数据 uint32 nPLevel[AOJ_K_MAX_CTRLPRIO]; // 0-Switch;1-PTZ;2-PA char szRoleName[256]; RBAC_Initialize(); AOJ_Initialize(); RBAC_GetUserRoleDescription(NULL, NULL, NULL, szRoleName); RBAC_GetRolePLevel(szRoleName, nPLevel); m_nKeyID = nPLevel[2]; memset(m_rdbPara, 0 , sizeof(m_rdbPara)); } CPlugPAC3::~CPlugPAC3() { //if (0 != m_nTimerGetStatus) //{ // ::KillTimer(this->m_hWnd, m_nTimerGetStatus); // m_nTimerGetStatus = 0; //} if (NULL != m_hDll) { PAUIDLL_CloseDialog CloseDialog = (PAUIDLL_CloseDialog)GetProcAddress(m_hDll, "CloseDialog"); if (NULL != CloseDialog) CloseDialog(m_hWndFather); FreeLibrary(m_hDll); } if (m_logger != NULL) { delete m_logger; m_logger = NULL; } } BOOL CPlugPAC3::Create(CWnd * fatherWnd, RECT rect, UINT id, UINT length, LPVOID pExtData) { // m_logger->WriteFmtStrWithTime_L3("fatherWnd=0x%08X, rect=(%d, %d, %d, %d), id=%d, length=%d, pExtData=0x%08X", // fatherWnd, rect.left, rect.top, rect.right, rect.bottom, // id, length, pExtData); //CWnd::Create(NULL, NULL, WS_CHILD, CRect(0, 0, 0, 0), fatherWnd, id); if (fatherWnd == NULL) return FALSE; m_hWndFather = fatherWnd->m_hWnd; iniGroupInfo(); #ifdef _DEBUG strcat(m_dllName, "d.dll"); #else strcat(m_dllName, ".dll"); #endif m_hDll = LoadLibrary(m_dllName); if (NULL == m_hDll) return FALSE; getExeFuncAddr(); /* RBAC_Initialize(); AOJ_Initialize(); RBAC_GetUserRoleDescription(NULL, NULL, NULL, szRoleName); RBAC_GetRolePLevel(szRoleName, nPLevel); m_nKeyID = nPLevel[2]; */ if (NULL != m_hDll) { PAUIDLL_ShowDialog ShowDialog = (PAUIDLL_ShowDialog)GetProcAddress(m_hDll, "ShowDialog"); if (NULL != ShowDialog) { UIParamSet uiParam; uiParam.hParent = m_hWndFather; uiParam.pos_x = rect.left; uiParam.pos_y = rect.top; uiParam.width = rect.right-rect.left; uiParam.height = rect.bottom-rect.top; ShowDialog(&uiParam, &m_paParamSet, &m_paAreaSet, this); } } //m_nTimerGetStatus = ::SetTimer(this->m_hWnd, TIMERID_GetStatus, m_flushTime, GetStatusProc); return TRUE; } BOOL CPlugPAC3::MovePlugRect(RECT rect) { /* if (NULL != m_hDll) { PAUIDLL_MoveDialog MoveDialog = (PAUIDLL_MoveDialog)GetProcAddress(m_hDll, "MoveDialog"); if (MoveDialog) { UIParamSet uiParam; uiParam.hParent = m_hWndFather; uiParam.pos_x = rect.left; uiParam.pos_y = rect.top; uiParam.width = rect.right-rect.left; uiParam.height = rect.bottom-rect.top; MoveDialog(&uiParam); } } */ return TRUE; } void CPlugPAC3::Draw(CDC *pDC, RECT rect) { } BOOL CPlugPAC3::ShowProperty(void *pData, int *len) { return TRUE; } void * CPlugPAC3::GetExData() { return NULL; } UINT CPlugPAC3::GetExDataLength() { return 0; } /* void CPlugPAC3::SetParam(int paramID, void *pData) { if (0 != paramID) return; if (NULL != m_pDlg) m_pDlg->SetParam(pData); } */ void CPlugPAC3::iniGroupInfo() { // int nRE = SEDB_StartDB(); // RBAC_Initialize(); memset(&m_paParamSet, 0, sizeof(PAParamSet)); SEDB_CMDINFO cmdinfo; char cmdbuf[1256] = {0}; sprintf(cmdinfo.table, "%s.dbo.%s", "SEMODEL", "TB1001_GROUP"); strcpy(cmdbuf, "select "); char * fieldCodes[] = {"F1001_GROUPCODE", "F1001_GROUPDESC", "F1001_GROUPNO"}; //201=车站 int i; for (i=0; i'0' ");//不排序order by F1001_GROUPNO");//数据库里面有可能会有组代码为0的车站,需要过滤 CSE_DBOption dboption; dboption.BeginSelectRcdSet(cmdbuf); int grpNum = dboption.GetRcdCount(); if (grpNum <= 0) { dboption.EndSelectRcdSet(); return; } m_paParamSet.groupNum = grpNum > MaxNum_Group ? MaxNum_Group : grpNum; for (i=0; i m_paParamSet.broadcastTime) { m_paParamSet.stopBroadBtnLockTime = 2; } } void CPlugPAC3::getExeFuncAddr() { m_paParamSet.funcStartMike = StartBroadcast; m_paParamSet.funcStopMike = StopBroadcast; m_paParamSet.funcUpdateUiState = UpdateUiState; } //void CALLBACK GetStatusProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime) extern "C" __declspec(dllexport) void UpdateUiState(void *pPlugin) { CPlugPAC3 *pPlug = (CPlugPAC3 *)pPlugin; if (NULL == pPlug) return; memset(pPlug->m_paStatus.broadcast_status, 0, sizeof(pPlug->m_paStatus.broadcast_status)); pPlug->m_paStatus.channel_status = 0; CRdbCltAccess sqlPaDataGet; SREALDB_VAR rdbData; BOOL bValue = FALSE; int jj = 0, valNum = 0, byte_index = 0, tmp = 0; BYTE bit_index = 0; BYTE * p = NULL; sqlPaDataGet.SetUserPwd("guest", ""); int allNum = pPlug->m_paParamSet.groupNum + pPlug->m_paParamSet.chanNum; valNum = sqlPaDataGet.SendGetDataPara(allNum, pPlug->m_rdbPara); //站点 for (jj = 0; jj < valNum; jj++) { tmp = sqlPaDataGet.GetVal(jj, &rdbData); if (tmp < 0 || tmp >= allNum) { continue; } bValue = (rdbData.m_val.intval == 1) ? TRUE : FALSE; if (tmp < pPlug->m_paParamSet.groupNum) { byte_index = tmp / 8; bit_index = tmp % 8; p = (BYTE *)(&(pPlug->m_paStatus.broadcast_status[byte_index])); Utility::SetValueToW(p, bit_index, bValue); } else { tmp -= pPlug->m_paParamSet.groupNum; p = (BYTE *)(&(pPlug->m_paStatus.channel_status)); bit_index = tmp % 8; Utility::SetValueToW(p, bit_index, bValue); } } /* CRdbSqlAccess sqlAccessDI; sqlAccessDI.OptTbl(DAC_TBLNAME_DI); sqlAccessDI.ClearOldCond(); sqlAccessDI.SelectCol("PointCode"); sqlAccessDI.SelectCol("Value"); BYTE bAppSysID = 11; sqlAccessDI.SetCond("AppSysId", REALDB_UCHAR, &bAppSysID); // 广播 sqlAccessDI.SetUserPwd("guest", ""); int nRet = sqlAccessDI.ExecSelect(); if (0 == nRet) { int nCount = sqlAccessDI.GetRcdCount(); char point_code[MaxLen_CODE]; for (int i=0; im_paParamSet.groupNum; j++) { if (0 == strcmp(pCurCPlugPAC3->m_paParamSet.groupsInfo[j].status_code, point_code)) { int byte_index = j / 8; BYTE bit_index = j % 8; BYTE * p = (BYTE *)(&(pCurCPlugPAC3->m_paStatus.broadcast_status[byte_index])); Utility::SetValueToW(p, bit_index, bValue); break; } } for (j=0; jm_paParamSet.chanNum; j++) { if (0 == strcmp(pCurCPlugPAC3->m_paParamSet.chansInfo[j].code, point_code)) { BYTE bit_index = j % 8; BYTE * p = (BYTE *)(&(pCurCPlugPAC3->m_paStatus.channel_status)); Utility::SetValueToW(p, bit_index, bValue); break; } } } } */ if (NULL != pPlug->m_hDll) { PAUIDLL_SetStatus SetStatusValue = (PAUIDLL_SetStatus)GetProcAddress(pPlug->m_hDll, "SetStatus"); if (SetStatusValue) { SetStatusValue(pPlug->m_hWndFather, &(pPlug->m_paStatus)); } } }