//--------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include #include //--------------------------------------------------------------------------- #include "AppGlobalF.h" #include "VmsDataTypeF.h" #include "FrmMainF.h" #include "DMCOMMF.h" #include "CommThread.h" #include "FrmOptionF.h" #include "FrmSysLogF.h" #include "FrmVmsInfoF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "IdAntiFreeze" #pragma link "IdAntiFreezeBase" #pragma link "IdBaseComponent" #pragma link "IdComponent" #pragma link "IdUDPBase" #pragma link "IdUDPServer" #pragma resource "*.dfm" TFrmMain *FrmMain; //--------------------------------------------------------------------------- __fastcall TFrmMain::TFrmMain(TComponent* Owner) : TForm(Owner) { ::CoInitialize(NULL); FServerRun = false; FTickState = 0; g_AppCfg.bAppLoad = false; g_AppCfg.bAppClose = false; Caption = " " + g_AppCfg.sTitle + " "; VmsManager = new TVmsCtlrManager(); ImageManager = new TCDSImageManager(); FormManager = new TCDSFormManager(); IfscManager = new TCDSIfscManager(); //int size1 = sizeof(INT_VMS_FORM_DOWNLOAD); //int size2 = sizeof(INT_VMS_FORM_DOWNLOAD_REQ); //ShowMessage(String(size1)); //ShowMessage(String(size2)); } //--------------------------------------------------------------------------- void __fastcall TFrmMain::FormCreate(TObject *Sender) { Application->ShowMainForm = false; try { Application->Icon->LoadFromResourceName(((unsigned int)HInstance), "MAINICON"); } catch(...) { ShowMessage("LoadFromResourceName failed"); } SYS_WritePidFile((long)Handle); g_AppCfg.lMainWinHandle = (long)Handle; FrmSysLog = new TFrmSysLog(pnlLog); FrmSysLog->Parent = pnlLog; FrmSysLog->Show(); FrmVmsInfo = new TFrmVmsInfo(pnlVms); FrmVmsInfo->Parent = pnlVms; FrmVmsInfo->Show(); Application->ShowMainForm = true; } //--------------------------------------------------------------------------- bool __fastcall TFrmMain::StartJobThread() { TCommThread *pCommThread = new TCommThread(); m_CommThreadID = pCommThread->ThreadID; m_CommHandle = pCommThread->Handle; if (m_CommThreadID == NULL) { LERROR("CommThread initialization fail"); return false; } LINFO("Job thread started."); return true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::FormShow(TObject *Sender) { StartJobThread(); CheckResource((g_AppCfg.MaxMemory * 1024), g_AppCfg.MaxHandle, g_AppCfg.MaxThread, g_AppCfg.MaxGdi); //CheckManagerApp(); tmrAppState->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::FormCloseQuery(TObject *Sender, bool &CanClose) { if (!g_AppCfg.bAppClose) { String strMsg; strMsg = Caption + "\r\n\r\nAre you sure you want to exit the program?\r\nIf the Process Manager is running the program will be restarted automatically!!!"; //if (Application->MessageBox(strMsg.c_str(), L"Confirm program exit", MB_YESNO|MB_ICONQUESTION) == IDYES) { FServerRun = false; g_AppCfg.bThrExit = true; g_AppCfg.bAppClose = true; } CanClose = false; APP_EXIT = true; } } //--------------------------------------------------------------------------- void __fastcall TFrmMain::FormClose(TObject *Sender, TCloseAction &Action) { CommClose(); ::CoUninitialize(); Action = caFree; FrmMain = NULL; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::CommClose() { try { SYS_WriteConfigInfo("LOG", "LOGDAY", Now().FormatString("dd"), g_AppCfg.sConfigFile); if (IdUDPCenterServer->Active == true) { IdUDPCenterServer->Active = false; for (int ii = 0; ii < IdUDPCenterServer->Bindings->Count; ii++) { IdUDPCenterServer->Bindings->Items[ii]->Free(); } } if (VmsManager) { VmsManager->FLists.Lock(); FOR_STL(TVmsCtlr*, pObj, VmsManager->FLists) { //SAFE_DELETE(pObj->FLogFile); } VmsManager->FLists.UnLock(); } //SAFE_DELETE(VmsManager); if (ImageManager) { } //SAFE_DELETE(ImageManager); } catch(Exception &e) { } } //--------------------------------------------------------------------------- bool __fastcall TFrmMain::InitApplication(void) { String sTitle, sMsg; int nResult; LINFO("Program initialize start..."); m_bAction = state_normal; m_bComm = state_error; m_bDB = state_normal; FTickState = 0; FServerRun = true; FCheckSafeAlarm = 0; CommUtil_MakeBasisTime(m_szOnOffTimer, VMS_CHECK_TIME, 0); CommUtil_MakeBasisTime(m_szTraffTimer, g_AppCfg.nTrafficCycleTime, g_AppCfg.nTrafficBasisTime); m_trfSendTimer = Now()-1; LINFO("VMS Information initialize...: %s", m_szTraffTimer); g_SysInfo->State.CommThreadID = m_CommThreadID; LINFO("Center communication initialize..."); //Åë½ÅÃʱâÈ­¸¦ ÃÖÃÊ ¼öÇàÇÑ ÈÄ µðºñÀо ó¸® nResult = VComm_Initialize((long)Handle, g_AppCfg.sSystemId, "VMS", g_AppCfg.comm.nCenterPort, g_AppCfg.sLogDay); if (VERR_NONE != nResult) { sMsg.printf(L"Center communication initialize failed: error %d", nResult); LERROR(AnsiString(sMsg).c_str()); return false; } if (!DMCOMM->DbConnect(g_AppCfg.db.sConnectStr)) { sTitle = "Process initialize failed..."; sMsg = "Database connect failed.\r\nProgram exit.\r\n"; //sMsg += DMComm->ErrorString; LERROR(AnsiString(sMsg).c_str()); return false; } //¼¾Åͳ»ºÎUDPÅë½ÅÆ÷Æ®Á¤º¸ Àоî¿À±â(½Ã¼³¹°°ü¸®¼­¹ö Åë½Å) //INI¿¡µµ Àû¾î³ùÀ¸´Ï±î... ½ÇÆÐÇØµµ ³Ñ¾î°¡ÀÚ DMCOMM->GetOldProcessInfo(); if (DMCOMM->GetVmsInfo() != VERR_NONE) { DMCOMM->DbClose(); sTitle = "Process initialize failed..."; sMsg = "VMS information initialize failed.\r\nProgram exit.\r\n"; //sMsg += DMComm->ErrorString; LERROR(AnsiString(sMsg).c_str()); return false; } if (DMCOMM->GetVmsIfscInfo() != VERR_NONE) { DMCOMM->DbClose(); sTitle = "Process initialize failed..."; sMsg = "VMS IFSC information initialize failed.\r\nProgram exit.\r\n"; //sMsg += DMComm->ErrorString; LERROR(AnsiString(sMsg).c_str()); return false; } if (DMCOMM->GetProcessInfo() != SYS_ERR_NONE) { DMCOMM->DbClose(); sTitle = "Process initialize failed..."; sMsg = "Center communication process load failed.\r\nProgram exit.\r\n"; //sMsg += DMComm->ErrorString; LERROR(AnsiString(sMsg).c_str()); return false; } if (DMCOMM->GetVmsImage() != VERR_NONE) { DMCOMM->DbClose(); sTitle = "Process initialize failed..."; sMsg = "VMS image information initialize failed.\r\nProgram exit.\r\n"; //sMsg += DMComm->ErrorString; LERROR(AnsiString(sMsg).c_str()); return false; } if (DMCOMM->LoadVmsForm() != VERR_NONE) { DMCOMM->DbClose(); sTitle = "Process initialize failed..."; sMsg = "VMS form information initialize failed.\r\nProgram exit.\r\n"; //sMsg += DMComm->ErrorString; LERROR(AnsiString(sMsg).c_str()); return false; } DMCOMM->DbClose(); if (!OpenCenterComm()) { LERROR("³»ºÎÅë½ÅÇÁ·Î¼¼½º ÃʱâÈ­ ½ÇÆÐ. ÇÁ·Î±×·¥À» Á¾·áÇÕ´Ï´Ù."); return false; } LoadOldVmsInfo(); LoadFtpVmsInfo(); LoadFontVmsInfo(); LoadStatusAutoVmsInfo(); LoadBitmapVmsInfo(); //À̹ÌÁö·Î ÀúÀåÇÏ´Â °æ¿ì¿¡ ´ëÇÑ Ftp´Ù¿î·Îµå 󸮿©ºÎ È®ÀÎ VmsIterator it; for(it=VmsManager->FLists.FMapObject.begin(); it != VmsManager->FLists.FMapObject.end(); ++it) { TVmsCtlr *pObj = (TVmsCtlr*)it->second; if (pObj->FBmpDownload) { if (pObj->FIsOldProtocol) { //ÀÌÀü ¹öÀüÁß ·¹µµ°ÍÀÌ ¾Æ´Ñ°æ¿ì´Â ¸ðµÎ ftp¸¦ »ç¿ëÇÔ pObj->FIsFtpDownload = true; } } else { //FtpVMS.inf¿¡ µî·ÏµÈ VMS¸¸ FTP·Î ´Ù¿î·ÎµåÇÏ¸é µÈ´Ù } } FrmVmsInfo->UpdateVmsList(); #if 0 if (VERR_NONE != VComm_Open(g_AppCfg.comm.nCenterPort)) #else /* 20180927*/ if (VERR_NONE != VComm_Open()) #endif { sMsg.printf(L"Center communication open failed: error %d", nResult); LERROR(AnsiString(sMsg).c_str()); return false; } SendInitial(); ProvideEvent(provide_event, NULL, NULL); //Åë½Å¼­¹ö ½ÃÀÛ tbConnectClick(this); LINFO("Program initialize success...[Completed]"); return true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::tmrAppStateTimer(TObject *Sender) { tmrAppState->Enabled = false; plTime->Caption = Now().DateTimeString(); if (!g_AppCfg.bAppLoad) { if (!InitApplication()) { g_AppCfg.bAppClose = true; TerminateApplication(); Sleep(500); Close(); return; } // ÃʱâÈ­ÀÛ¾÷¿Ï·á CheckResource((g_AppCfg.MaxMemory * 1024), g_AppCfg.MaxHandle, g_AppCfg.MaxThread, g_AppCfg.MaxGdi); g_AppCfg.bAppLoad = true; // ÇÁ·Î±×·¥ÀÌ ·ÎµùµÇ¾úÀ½À» È®ÀÎ tmrAppState->Interval = 1000; // ÇÁ·Î±×·¥ »óÅÂÁ¡°ËÁÖ±â=1ÃÊ tmrAppState->Enabled = true; return; } if (g_AppCfg.bAppClose) { // ÀÀ¿ëÇÁ·Î±×·¥ Á¾·á g_AppCfg.bThrExit = true; Sleep(500); TerminateApplication(); Close(); return; } g_AppCfg.lMainWinHandle = (long)Handle; UpdateProcessStatePanel(); if (!(++FTickState % 5)) { DMCOMM->MonitoringVms(FServerRun); DMCOMM->MonitoringVmsClient(FServerRun); CheckCommState(); //Åë½Å»óÅÂÁ¤º¸ üũ } if (!(FTickState % 60)) { //1ºÐÁֱ⠻óÅÂÁ¤º¸¸¦ ¾÷µ¥ÀÌÆ® ÇÑ´Ù. if (!(FSendMsg & SEND_MSG_PROCESS)) { SendProcessState(); } if (!(FSendMsg & SEND_MSG_EQUIP)) { SendDbThreadMessage(WM_EQUIP_STATE_ALL, NULL, NULL); } if (m_bDB != state_normal) { SendDbThreadMessage(WM_DATABASE_REFLASH, NULL, NULL); } if (CheckResource((g_AppCfg.MaxMemory * 1024), g_AppCfg.MaxHandle, g_AppCfg.MaxThread, g_AppCfg.MaxGdi)) { LERROR("Resource error"); AutoClose(); } } if (CheckBasisTime(m_szOnOffTimer, VMS_CHECK_TIME, 0)) { SendDbThreadMessage(WM_GET_ONOFF, NULL, NULL); SendDbThreadMessage(WM_DOWNLOAD_PROC, NULL, NULL); } if (CheckBasisTime(m_szTraffTimer, g_AppCfg.nTrafficCycleTime, g_AppCfg.nTrafficBasisTime)) { if (CommUtil_TimeDiff(m_trfSendTimer) > 10)//g_AppCfg.nTrafficCycleTime) { /* ÀÌÀü¿¡ ÆûÀ» ´Ù¿î·ÎµåÇϰí 10ÃÊ Áö³ª¾ß ´ÙÀ½ ÆûÀ» ´Ù¿î·Îµå ÇÒ¼ö ÀÖµµ·Ï ÇÔ */ LINFO("*** VMS Traffic Timer Acitve: %s, %s", AnsiString(Now().FormatString("yyyymmddhhnnss")).c_str(), m_szTraffTimer); ProvideEvent(provide_event, NULL, NULL); FCheckSafeAlarm = 0; } else { LINFO("*** VMS Traffic Timer Acitve Skip......: %s, %s", AnsiString(Now().FormatString("yyyymmddhhnnss")).c_str(), m_szTraffTimer); } } CheckProvideSave(); if (FCheckSafeAlarm++ >= 19) { //LINFO("*** FCheckSafeAlarm......: %s, %s", AnsiString(Now().FormatString("yyyymmddhhnnss")).c_str(), m_szTraffTimer); SendDbThreadMessage(WM_CHECK_SAFE_ALARM, NULL, NULL); FCheckSafeAlarm = 0; } tmrAppState->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::AutoClose() { g_AppCfg.bAppClose = true; //Close(); } //--------------------------------------------------------------------------- void __fastcall TFrmMain::tbConnectClick(TObject *Sender) { FServerRun = true; g_AppCfg.bThrExit = false; tbConnect->Enabled = false; tbDisconnect->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::tbDisconnectClick(TObject *Sender) { FServerRun = false; g_AppCfg.bThrExit = true; tbDisconnect->Enabled = false; DMCOMM->TerminateVms(); Sleep(500); DMCOMM->TerminateVms(); DMCOMM->TerminateVmsClient(); tbConnect->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::tbOptionsClick(TObject *Sender) { FrmOption = new TFrmOption(this); FrmOption->Left = FrmMain->Left + 80; FrmOption->Top = FrmMain->Top + 80; FrmOption->ShowModal(); if (FrmOption->FUpdate) { try { ITSLog->FLogCfg = g_LogCfg; FDbLog->FLogCfg = g_LogCfg; VmsIterator it; for(it=VmsManager->FLists.FMapObject.begin(); it != VmsManager->FLists.FMapObject.end(); ++it) { TVmsCtlr *pObj = (TVmsCtlr*)it->second; if (!pObj->FDispLog) { pObj->FCLog->FLogCfg = g_LogCfg; pObj->FSLog->FLogCfg = g_LogCfg; } } } catch(Exception &e) { } } delete FrmOption; FrmOption = NULL; } //--------------------------------------------------------------------------- int __fastcall TFrmMain::ChangePosition(TVmsFormObj *AVmsObj) { TLabel *pLabel = NULL; int nWidth; if (AVmsObj->TextData == "") return VERR_NONE; try { pLabel = new TLabel(NULL); if (pLabel == NULL) return VERR_OTHER; try { pLabel->AutoSize = true; pLabel->Font->Name = CodeToFont(AVmsObj->TextFontName); pLabel->Font->Size = AVmsObj->TextFontSize; pLabel->Caption = AVmsObj->TextData; if (AVmsObj->TextFontBold) pLabel->Font->Style = TFontStyles() << fsBold; else pLabel->Font->Style = TFontStyles(); nWidth = AVmsObj->Width - pLabel->Width; //if (nWidth > 0) { switch(AVmsObj->TextAlign) { case text_align_right: AVmsObj->PosX += nWidth; break; case text_align_center: AVmsObj->PosX += (nWidth / 2); break; } } if (AVmsObj->PosX < 0) { AVmsObj->PosX = 0; } } catch(Exception &e) { } } __finally { SAFE_DELETE(pLabel); } return VERR_NONE; } //--------------------------------------------------------------------------- int __fastcall TFrmMain::MakeVmsDownloadForm() { int nFormCnt; int nSaveVmsCnt, nSaveFormCnt; TCDSForm *pCDSForm; TVmsForm *pVmsForm; TVmsFormObj *pVmsObj; VMS_SCHEDULE_INFO *pSch; VMS_SCHEDULE_DETL *pSchUnit; LINFO("MakeVmsDownloadForm: Start"); //CheckResource((g_AppCfg.MaxMemory * 1024), g_AppCfg.MaxHandle, g_AppCfg.MaxThread, g_AppCfg.MaxGdi); //LINFO("MakeVmsDownloadForm: Memory_S(%u)", FMemSize); nSaveVmsCnt = 0; nSaveFormCnt= 0; //VMS½ºÄÉÁÙ¿¡ ´ëÇÏ¿© ´Ù¿î·Îµå ÆûÀ» »ý¼ºÇÑ´Ù. VmsIterator it; for(it=VmsManager->FLists.FMapObject.begin(); it != VmsManager->FLists.FMapObject.end(); ++it) { TVmsCtlr *pObj = (TVmsCtlr*)it->second; if (pObj->Server.UseFlag != bit_enable) continue; if (!pObj->FProvide) continue; nSaveVmsCnt++; //¿î¿µ¸ðµå º¯°æ pObj->RSTATE.OprMode = pObj->CTLMODE->Control; pSch = pObj->SCHEDULE; pObj->CTLMODE->MaxDisplayForm = pSch->Count; if (pObj->CTLMODE->MaxDisplayForm > pObj->VMS_MAX_PHSE_NUM) { LWARN("VMS Form Max count over1: %s, %d EA", pObj->VmsNo.c_str(), pObj->CTLMODE->MaxDisplayForm); pObj->CTLMODE->MaxDisplayForm = pObj->VMS_MAX_PHSE_NUM; } if (pObj->CTLMODE->MaxDisplayForm > INT_MAX_VMS_FORM) { LWARN("VMS Form Max count over2: %s, %d EA", pObj->VmsNo.c_str(), pObj->CTLMODE->MaxDisplayForm); pObj->CTLMODE->MaxDisplayForm = INT_MAX_VMS_FORM; } try { pObj->pForms->Lock(); //ÃÖ´ë Á¦°ø ¸Þ½ÃÁö °¹¼ö¸¸Å­ »ý¼º for (int ii = 0; ii < pSch->Count && ii < pObj->CTLMODE->MaxDisplayForm; ii++) { nFormCnt = pObj->pForms->Count(); pSchUnit = &pSch->Unit[ii]; AnsiString sFormId = pSchUnit->VMS_FORM_ID; pCDSForm = FormManager->FLists.Find(sFormId); if (!pCDSForm) { LERROR("VMS Schedule Form Not found: VmsNmbr(%s), FormId(%s) %d", pObj->VmsNo.c_str(), sFormId.c_str(), ii); continue; } //¼ÒÅëÁ¤º¸ Ç¥ÃâÆû ÀÎ °æ¿ì Ç¥ÃâÇÒ ±¸°£ÀÇ ¼ÒÅëÁ¤º¸°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì //ÆûÀ» »ý¼ºÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. switch(pCDSForm->VMS_FORM_TYPE_CD) { case enFormKindTrfImg: { // TODO: µµÇü½Ä Á¦°ø±¸°£ Áß ¹Ý ÀÌ»ó Á¤º¸°¡ ¾øÀ¸¸é ÇØ´ç ÆûÀº Ç¥ÃâÇÏÁö ¾Êµµ·Ï ¼öÁ¤, 20220905 bool noIfscData = false; FOR_STL(TCDSFormObj*, pCDSObj, pCDSForm->FLists) { if (pCDSObj->VMS_FORM_OBJECT_TYPE_CD == 3) { //¼ÒÅëÁ¤º¸¹è°æÀ̹ÌÁö AnsiString ImageId = pCDSObj->SYMBLIB_NMBR+"0"; TCDSImage *pSymbol = ImageManager->FLists.Find(ImageId); int noDataCount = 0; int halfIfsc = 0; int totalIfsc = 0; if (pSymbol) { totalIfsc = pSymbol->FLists.Size(); halfIfsc = (int)(totalIfsc / 2.0); FOR_STL(TCDSImageCell*, pCell, pSymbol->FLists) { TCDSIfsc *pTmpIfsc = IfscManager->FLists.Find(pCell->VMS_IFSC_ID); if (pTmpIfsc) { if (pTmpIfsc->CMTR_GRAD_CD == "0") { noDataCount++; } } else { noDataCount++; } } if (noDataCount >= halfIfsc) { noIfscData = true; } } break; } } if (noIfscData) { LWARN("VMS Schedule Traffic Shape Form No Traffic: VmsNmbr(%s), FormId(%s)", pObj->VmsNo.c_str(), sFormId.c_str()); continue; } } break; case enFormKindTrfRow1:// = 11, // ¼ÒÅë»óȲ(1´Ü) case enFormKindTrfRow2:// = 12, // ¼ÒÅë»óȲ(2´Ü) case enFormKindTrfRow3:// = 13, // ¼ÒÅë»óȲ(3´Ü) case enFormKindTrfRow4:// = 14, // ¼ÒÅë»óȲ(4´Ü) { int ss; bool bNoData = false; AnsiString sVmsIfscId[4]; for (ss = 0; ss < 4; ss++) { sVmsIfscId[ss] = ""; } int emptyIfscIdCount = 0; sVmsIfscId[0] = pSchUnit->FRST_VMS_IFSC_ID; sVmsIfscId[1] = pSchUnit->SECD_VMS_IFSC_ID; sVmsIfscId[2] = pSchUnit->THIR_VMS_IFSC_ID; sVmsIfscId[3] = pSchUnit->FOUR_VMS_IFSC_ID; AnsiString noDataIfscId; // TODO: ¼ÒÅëÁ¤º¸°¡ Çϳª¶óµµ·Î ¾øÀ¸¸é ÇØ´ç ÆûÀº Ç¥ÃâÇÏÁö ¾Êµµ·Ï ¼öÁ¤, 20220905 for (ss = 0; ss < 4; ss++) { if (sVmsIfscId[ss] == "") { emptyIfscIdCount++; continue; } TCDSIfsc *pTmpIfsc = IfscManager->FLists.Find(sVmsIfscId[ss]); if (pTmpIfsc) { // TODO, 20220905 #if 0 if (pTmpIfsc->CMTR_GRAD_CD != "0") { bNoData = false; } #endif if (pTmpIfsc->CMTR_GRAD_CD == "0") { //LWARN("VMS Schedule Form No Traffic: VmsNmbr(%s), FormId(%s), IFSC_ID(%s)", pObj->VmsNo.c_str(), sFormId.c_str(), sVmsIfscId[ss].c_str()); noDataIfscId = sVmsIfscId[ss]; bNoData = true; break; } } else { // TODO, 20220905 LERROR("VMS Schedule Traffic Form Not Found IFSC ID: VmsNmbr(%s), FormId(%s), IFSC_ID(%s)", pObj->VmsNo.c_str(), sFormId.c_str(), sVmsIfscId[ss].c_str()); bNoData = true; break; } } if (bNoData) { LWARN("VMS Schedule Traffic Form No Traffic: VmsNmbr(%s), FormId(%s), IFSC_ID(%s)", pObj->VmsNo.c_str(), sFormId.c_str(), noDataIfscId.c_str()); continue; } if (emptyIfscIdCount == 4) { LWARN("VMS Schedule Traffic Form Not Assign IFSC_ID: VmsNmbr(%s), FormId(%s)", pObj->VmsNo.c_str(), sFormId.c_str()); continue; } } break; } nSaveFormCnt++; //Æû»ý¼º //pVmsForm = new TVmsForm(); pVmsForm = pObj->pForms->AddForm(); pVmsForm->ScenarioSeq = nFormCnt; /* Æû Ç¥Ãâ¼ø¼­ */ pVmsForm->FormId = pCDSForm->VMS_FORM_ID; /* Æû ID */ pVmsForm->DisplayTime = pSchUnit->DSPL_HH; /* Ç¥Ãâ½Ã°£(ÃÊ) */ pVmsForm->DisplayMode = AnsiString(pCDSForm->VMS_MSG_DSPL_MTHD_CD); /* Ç¥Ãâ±â´É */ pVmsForm->DisplayDir = AnsiString(pCDSForm->VMS_MSG_DSPL_DRCT_CD); /* Ç¥Ãâ¹æÇâ */ pVmsForm->FormKind = pCDSForm->VMS_FORM_TYPE_CD; /* Æû Á¾·ù */ pVmsForm->BkColor = pCDSForm->VMS_FORM_BCKG_HUE_CD; /* ¹è°æ»ö»ó */ pVmsForm->Width = pObj->WIDTH; /* Æû³ÐÀÌ */ pVmsForm->Height = pObj->HEIGHT; /* Æû³ôÀÌ */ pVmsForm->SvcRes = false; pVmsForm->FtpRes = false; //pObj->pForms->AddFormA(pVmsForm); pVmsForm->Lock(); //Æû°´Ã¼»ý¼º FOR_STL(TCDSFormObj*, pCDSObj, pCDSForm->FLists) { if (pVmsForm->Count() >= MAX_VMS_OBJ_LIST) { continue; } //µµÇü½Ä ¹è°æ¼ÒÅëÁ¤º¸ ÆûÀÎ °æ¿ì ÇÏ´Ü¿¡ Ç¥ÃâÇÒ Á¤º¸°¡ ¾ø´Â °æ¿ì //ÇÏ´Ü ¼ÒÅëÁ¤º¸ °´Ã¼´Â »ý¼ºÇÏÁö ¾Êµµ·Ï ÇÏÀÚ. if (pVmsForm->FormKind == enFormKindTrfImg) { switch(pCDSObj->VMS_FORM_OBJECT_TYPE_CD) { case 0: //¹®ÀÚ¿­ case 1: //½Éº¼ case 2: //À̹ÌÁö //N:ÀϹÝ(¸ðµÎÇ¥ÃâÇϴ°Í) //T:¼ÒÅëÁ¤º¸(¼ÒÅëÁ¤º¸°¡ ÀÖ´Â °æ¿ì¿¡¸¸ Ç¥ÃâÇϴ°Í) //F:ÇϴܰíÁ¤(¼ÒÅëÁ¤º¸°¡ ¾ø´Â °æ¿ì¿¡¸¸ Ç¥ÃâÇϴ°Í) if (pSchUnit->VMS_IFSC_ID == "") { //Ç¥ÃâÇÒ ¼ÒÅëÁ¤º¸°¡ ¾ø´Â °æ¿ì if (pCDSObj->TRFC_FILL_CD == "T") continue; // } else { //Ç¥ÃâÇÒ ¼ÒÅëÁ¤º¸°¡ ÀÖ´Â °æ¿ì if (pCDSObj->TRFC_FILL_CD == "F") continue; // } break; case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: if (pSchUnit->VMS_IFSC_ID == "") continue; //ÇÏ´Ü¿¡ Ç¥ÃâÇÒ Á¤º¸Á¦°ø±¸°£ÀÌ ¾ø´Â °æ¿ìÀÓ break; #if 0 case 1://½Éº¼(¼ÒÅëÁ¤º¸ ½ÃÁ¡ Á¾Á¡ »çÀÌ È­»ìÇ¥) #if 1 if (pCDSObj->VMS_DSPL_TXT.Trim() == "->") if (pSchUnit->VMS_IFSC_ID == "") continue; //ÇÏ´Ü¿¡ Ç¥ÃâÇÒ Á¤º¸Á¦°ø±¸°£ÀÌ ¾ø´Â °æ¿ìÀÓ #else if (pSchUnit->VMS_IFSC_ID == "") continue; //ÇÏ´Ü¿¡ Ç¥ÃâÇÒ Á¤º¸Á¦°ø±¸°£ÀÌ ¾ø´Â °æ¿ìÀÓ #endif break; #endif default: break; } } pVmsObj = pVmsForm->AddFormObject(); pVmsObj->IFSC_ID = ""; switch(pCDSObj->VMS_FORM_OBJECT_TYPE_CD) { case 1: //À̹ÌÁö ½Éº¼ pVmsObj->ObjectKind = graphicID_object_data; //¿ä°Ç ´Ù¿î·ÎµåµÇ¾î ÀÖ´Â °æ¿ìÀε¥ ´Ù¿î·Îµå»ó°ü¾øÀÌ Ç¥ÃâµÇµµ·ÏÇϱâÀ§ÇÔ //pVmsObj->ObjectKind = graphic_object_data; break; case 2: //ÆÄÀÏÀ̹ÌÁö pVmsObj->ObjectKind = graphicID_object_data; break; case 3: //¼ÒÅëÁ¤º¸¹è°æÀ̹ÌÁö pVmsObj->ObjectKind = graphic_object_data; break; case 17: //¼ÒÅëÁ¤º¸À̹ÌÁö1 case 27: //¼ÒÅëÁ¤º¸À̹ÌÁö2 case 37: //¼ÒÅëÁ¤º¸À̹ÌÁö3 case 47: //¼ÒÅëÁ¤º¸À̹ÌÁö4 pVmsObj->ObjectKind = graphicID_object_data; break; default: pVmsObj->ObjectKind = text_object_data; break; } pVmsObj->ObjectType = pCDSObj->VMS_FORM_OBJECT_TYPE_CD; //NUMBER(3) N VMS FORM OBJECT À¯Çü ÄÚµå pVmsObj->TextFontName = pCDSObj->VMS_FONT_TYPE_CD; //NUMBER(3) N VMS ±Û²Ã À¯Çü ÄÚµå //TODO pVmsObj->StrTextFontName = CodeToFont(pVmsObj->TextFontName); pVmsObj->TextFontColor = pCDSObj->VMS_FONT_HUE_CD; //NUMBER(9) N VMS ±Û²Ã »ö»ó ÄÚµå pVmsObj->TextFontBold = pCDSObj->VMS_FONT_STYL_CD; //NUMBER(3) Y VMS ±Û²Ã ¹æ½Ä ÄÚµå pVmsObj->TextFontSize = pCDSObj->VMS_FONT_SIZE; //NUMBER(3) Y 0 VMS ±Û²Ã Å©±â pVmsObj->TextAlign = pCDSObj->VMS_FONT_ALIGN; //NUMBER(1) Y 0 VMS Ç¥Ãâ ¹®ÀÚ¿­Á¤¿­¹æ½Ä(0:LEFT,1:RIGHT,2:CENTER) pVmsObj->TextData = pCDSObj->VMS_DSPL_TXT; //VARCHAR2(200) Y VMS Ç¥Ãâ ÅØ½ºÆ® pVmsObj->PosX = pCDSObj->VMS_DSPL_XCRDN; //NUMBER(5) Y VMS Ç¥Ãâ XÁÂÇ¥ pVmsObj->PosY = pCDSObj->VMS_DSPL_YCRDN; //NUMBER(5) Y VMS Ç¥Ãâ YÁÂÇ¥ pVmsObj->Width = pCDSObj->VMS_DSPL_WIDTH; //NUMBER(5) Y 0 VMS Ç¥Ãâ ³ÐÀÌ pVmsObj->Height = pCDSObj->VMS_DSPL_HEIGHT; //NUMBER(5) Y 0 VMS Ç¥Ãâ ³ôÀÌ pVmsObj->IsBlinking = pCDSObj->VMS_DSPL_BLINKING; //NUMBER(1) Y 0 VMS Ç¥Ãâ Á¡¸ê ¿©ºÎ(0:Áö¼Ó, 1:Á¡¸ê) pVmsObj->BkColor = pCDSObj->VMS_DSPL_BKCOLOR; //NUMBER(1) Y 0 VMS Ç¥Ãâ ¹è°æ»ö»óÄÚµå pVmsObj->ObjectSize = pCDSObj->VMS_DSPL_SIZE; //NUMBER(7) Y 0 VMS Ç¥Ãâ Å©±â(¹®ÀÚ:¹®ÀÚ±æÀÌ,À̹ÌÁö:À̹ÌÁöÀüüũ±â) pVmsObj->ImageId = pCDSObj->SYMBLIB_NMBR+"0"; //NUMBER(4) N 0 ½É¹ú¶óÀ̺귯¸® ¹øÈ£ pVmsObj->ImageType = "0"; //Bitmap if (pVmsObj->ObjectKind != text_object_data) { if (pVmsObj->NewImage() != NULL) { try { pVmsObj->pImageData->Picture->Bitmap->Canvas->Lock(); try { pVmsObj->pImageData->Picture->Assign(pCDSObj->pImage->Picture); } catch(Exception &e) { LERROR("SaveMemoryStream1: %s[%s] - %s", pVmsForm->FormId.c_str(), pVmsObj->ImageId.c_str(), AnsiString(e.Message).c_str()); } } __finally { pVmsObj->pImageData->Picture->Bitmap->Canvas->Unlock(); pVmsObj->pImageStream->Clear(); pVmsObj->pImageStream->Position = 0; pVmsObj->pImageData->Picture->Graphic->SaveToStream((Classes::TStream*)pVmsObj->pImageStream); } } } //Æû°´Ã¼ À¯Çüº° Fill In if (pVmsObj->ObjectType == 0) //°íÁ¤¹®ÀÚ¿­ { #if 0 if (pObj->FBmpDownload == false && pObj->FIsOldProtocol == false) { //½Å±ÔVMSÀÎ °æ¿ì ùÀÚ¸®°¡ 0 Àΰæ¿ì ÇØ´ç ¹®ÀÚ¸¦ Ç¥ÃâÇÏÁö ¸øÇÔ if (pVmsObj->TextData != "") { if (pVmsObj->TextData.SubString(1,1) == "0") { pVmsObj->TextData = " " + pVmsObj->TextData; pVmsObj->PosX = pVmsObj->PosX - 5; } } } #endif ChangePosition(pVmsObj); } else if (pVmsObj->ObjectType == 101 || //Àç³­¾ÈÀü¹®ÀÚ 1¿­ pVmsObj->ObjectType == 102 || //Àç³­¾ÈÀü¹®ÀÚ 2¿­ pVmsObj->ObjectType == 103 //Àç³­¾ÈÀü¹®ÀÚ 3¿­ ) { VMS_SAFE_DETL *pEvt = pSchUnit->SAFE; if (pEvt) { switch(pVmsObj->ObjectType) { case 101: //Àç³­¾ÈÀü¹®ÀÚ 1¿­ pVmsObj->TextData = pEvt->MSG_LN_1; break; case 102: //Àç³­¾ÈÀü¹®ÀÚ 2¿­ pVmsObj->TextData = pEvt->MSG_LN_2; break; case 103: //Àç³­¾ÈÀü¹®ÀÚ 3¿­ pVmsObj->TextData = pEvt->MSG_LN_3; break; } } ChangePosition(pVmsObj); } else if (pVmsObj->ObjectType == 1 || //½Éº¼ pVmsObj->ObjectType == 2 ) //ÆÄÀÏÀ̹ÌÁö { ; //󸮾øÀ½ } else if (pVmsObj->ObjectType == 17 || //¼ÒÅëÁ¤º¸À̹ÌÁö1 pVmsObj->ObjectType == 27 || //¼ÒÅëÁ¤º¸À̹ÌÁö2 pVmsObj->ObjectType == 37 || //¼ÒÅëÁ¤º¸À̹ÌÁö3 pVmsObj->ObjectType == 47 ) //¼ÒÅëÁ¤º¸À̹ÌÁö4 { if (!pVmsObj->pImageData) continue; TCDSImage *pSymbol = ImageManager->FLists.Find(pVmsObj->ImageId); if (!pSymbol) continue; try { int X, Y; switch(pVmsObj->ObjectType) { case 17: pVmsObj->IFSC_ID = pSchUnit->FRST_IMG_IFSC_ID; break; case 27: pVmsObj->IFSC_ID = pSchUnit->SECD_IMG_IFSC_ID; break; case 37: pVmsObj->IFSC_ID = pSchUnit->THIR_IMG_IFSC_ID; break; case 47: pVmsObj->IFSC_ID = pSchUnit->FOUR_IMG_IFSC_ID; break; } FOR_STL(TCDSImageCell*, pCell, pSymbol->FLists) { TCDSIfsc *pTmpIfsc = IfscManager->FLists.Find(pVmsObj->IFSC_ID); if (pTmpIfsc) { X = pCell->POSX; Y = pCell->POSY; pVmsObj->ImageId = pCDSObj->SYMBLIB_NMBR + pTmpIfsc->CMTR_GRAD_CD; try { pVmsObj->pImageData->Picture->Bitmap->Canvas->Lock(); pVmsObj->pImageData->Picture->Bitmap->Canvas->Brush->Color = GradeToFillColor(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0)); TColor clColor = pVmsObj->pImageData->Picture->Bitmap->Canvas->Pixels[X][Y]; pVmsObj->pImageData->Picture->Bitmap->Canvas->FloodFill(X, Y, clColor, fsSurface); } __finally { pVmsObj->pImageData->Picture->Bitmap->Canvas->Unlock(); } } } pVmsObj->pImageStream->Clear(); pVmsObj->pImageStream->Position = 0; pVmsObj->pImageData->Picture->Graphic->SaveToStream((Classes::TStream*)pVmsObj->pImageStream); } catch(Exception &e) { LERROR("SaveMemoryStreamX: %s[%s] - %s", pVmsForm->FormId.c_str(), pVmsObj->ImageId.c_str(), AnsiString(e.Message).c_str()); } } else if (pVmsObj->ObjectType == 3) //¼ÒÅëÁ¤º¸ ¹è°æÀ̹ÌÁö { if (!pVmsObj->pImageData) continue; TCDSImage *pSymbol = ImageManager->FLists.Find(pVmsObj->ImageId); if (!pSymbol) continue; try { int X, Y; FOR_STL(TCDSImageCell*, pCell, pSymbol->FLists) { TCDSIfsc *pTmpIfsc = IfscManager->FLists.Find(pCell->VMS_IFSC_ID); if (pTmpIfsc) { X = pCell->POSX; Y = pCell->POSY; try { pVmsObj->pImageData->Picture->Bitmap->Canvas->Lock(); pVmsObj->pImageData->Picture->Bitmap->Canvas->Brush->Color = GradeToFillColor(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0)); TColor clColor = pVmsObj->pImageData->Picture->Bitmap->Canvas->Pixels[X][Y]; pVmsObj->pImageData->Picture->Bitmap->Canvas->FloodFill(X, Y, clColor, fsSurface); } __finally { pVmsObj->pImageData->Picture->Bitmap->Canvas->Unlock(); } } } pVmsObj->pImageStream->Clear(); pVmsObj->pImageStream->Position = 0; pVmsObj->pImageData->Picture->Graphic->SaveToStream((Classes::TStream*)pVmsObj->pImageStream); } catch(Exception &e) { LERROR("SaveMemoryStream2: %s[%s] - %s", pVmsForm->FormId.c_str(), pVmsObj->ImageId.c_str(), AnsiString(e.Message).c_str()); } } else if (pVmsObj->ObjectType == 61 || //±¸°£¸í pVmsObj->ObjectType == 62 || //½ÃÁ¡¸í pVmsObj->ObjectType == 63 || //Á¾Á¡¸í pVmsObj->ObjectType == 64 || //µ¹¹ßÁ¾·ù pVmsObj->ObjectType == 65 ) //´ëÀÀ¹®±¸ { //µ¹¹ß¹®¾ÈÀÎ °æ¿ìÀÓ pVmsObj->TextData = " "; VMS_EVENT_DETL *pEvt = pSchUnit->EVENT; if (pEvt) { switch(pVmsObj->ObjectType) { case 61: pVmsObj->TextData = pEvt->VMS_IFSC_NM; break; //±¸°£¸í(»ç¿ë¾ÈÇÔ) case 62: pVmsObj->TextData = pEvt->STRT_LCTN_NM; break; //VMSµ¹¹ß½ÃÁ¡¸í case 63: pVmsObj->TextData = pEvt->END_LCTN_NM; break; //VMSµ¹¹ßÁ¾Á¡¸í case 64: pVmsObj->TextData = pEvt->VMS_INCD_DETL_NM; break; //VMSµ¹¹ß¼¼ºÎÀ¯Çü¸í case 65: pVmsObj->TextData = pEvt->OCRR_LCTN_NM; break; //´ëÀÀ¹®±¸(»ç¿ë¾ÈÇÔ-¹ß»ýÀå¼Ò·Î ÀϴܳÖÀ½) } } if (pVmsObj->TextData == "") pVmsObj->TextData = " "; ChangePosition(pVmsObj); //TB_VMS_FORM_OBJECT_TYPE Å×ÀÌºí¿¡ À¯ÇüÃß°¡Çϰí //µ¹¹ßÈ­¸é¿¡¼­ ÇÊ¿äÇÑ Ç׸ñ Ãß°¡, TB_INCD_OCRR_VMS Å×ÀÌºí¿¡ Ä÷³Ãß°¡ÇؾßÇÔ } else if (pVmsObj->ObjectType == 71 || //¹ß»ýÀå¼Ò pVmsObj->ObjectType == 72 || //ÇØ´çµµ·Î pVmsObj->ObjectType == 73 || //ÅëÁ¦½ÃÁ¡¸í pVmsObj->ObjectType == 74 || //ÅëÁ¦Á¾Á¡¸í pVmsObj->ObjectType == 75 || //00Â÷·Î Â÷´Ü pVmsObj->ObjectType == 76 || //00¿ù00ÀÏ ~ 00¿ù00ÀÏ pVmsObj->ObjectType == 77 ) //´ëÀÀ¹®±¸ { //°ø»ç/Çà»ç¹®¾È ÀÓ pVmsObj->TextData = " "; VMS_EVENT_DETL *pEvt = pSchUnit->EVENT; if (pEvt) { switch(pVmsObj->ObjectType) { case 71: pVmsObj->TextData = pEvt->OCRR_LCTN_NM; break; //¹ß»ýÀå¼Ò case 72: pVmsObj->TextData = pEvt->VMS_IFSC_NM; break; //ÇØ´çµµ·Î case 73: pVmsObj->TextData = pEvt->STRT_LCTN_NM; break; //ÅëÁ¦½ÃÁ¡¸í case 74: pVmsObj->TextData = pEvt->END_LCTN_NM; break; //ÅëÁ¦Á¾Á¡¸í case 75: { int nLane = pEvt->INCD_CLSR_LANE.ToIntDef(0); if (nLane == 111111) pVmsObj->TextData = "Â÷·Î Â÷´Ü"; else if (nLane > 0) pVmsObj->TextData = "ÀϺΠÂ÷´Ü"; else pVmsObj->TextData = " "; } break; //00Â÷·Î Â÷´Ü case 76: //00¿ù00ÀÏ ~ 00¿ù00ÀÏ { String sFrom = pEvt->INCD_STRT_DT.SubString(5,2) + "¿ù" + pEvt->INCD_STRT_DT.SubString(7,2) + "ÀÏ"; String sTo = pEvt->INCD_END_PRAR_DT.SubString(5,2) + "¿ù" + pEvt->INCD_END_PRAR_DT.SubString(7,2) + "ÀÏ"; //¹®ÀÚ¿­ ¸Ç ¾ÕÀÌ '0'À¸·Î ½ÃÀÛÇÏ´Â °æ¿ì VMS¿¡¼­ Ç¥ÃâµÇÁö ¾ÊÀ½ //if (g_AppCfg.DownloadBitmap == false) if (pObj->FBmpDownload == false) { if (sFrom.SubString(1,1) == "0") { sFrom = " " + sFrom; pVmsObj->PosX = pVmsObj->PosX - 5; } } pVmsObj->TextData = sFrom + " ~ " + sTo; } break; case 77: pVmsObj->TextData = pEvt->OCRR_LCTN_NM; break; //´ëÀÀ¹®±¸(»ç¿ë¾ÈÇÔ-¹ß»ýÀå¼Ò·Î ÀϴܳÖÀ½) } } if (pVmsObj->TextData == "") pVmsObj->TextData = " "; ChangePosition(pVmsObj); } else if (pVmsObj->ObjectType == 81 || //µ¹¹ßÁ¾·ù pVmsObj->ObjectType == 82 || //ÇØ´çµµ·Î pVmsObj->ObjectType == 83 || //¿ìȸµµ·Î pVmsObj->ObjectType == 84 ) //¹ß»ýÀå¼Ò { pVmsObj->TextData = " "; VMS_EVENT_DETL *pEvt = pSchUnit->EVENT; if (pEvt) { switch(pVmsObj->ObjectType) { case 81: pVmsObj->TextData = pEvt->VMS_INCD_DETL_NM; break; //µ¹¹ßÁ¾·ù case 82: pVmsObj->TextData = pEvt->VMS_IFSC_NM; break; //ÇØ´çµµ·Î case 83: pVmsObj->TextData = pEvt->VMS_IFSC_NM; break; //¿ìȸµµ·Î case 84: pVmsObj->TextData = pEvt->OCRR_LCTN_NM; break; //¹ß»ýÀå¼Ò } } if (pVmsObj->TextData == "") pVmsObj->TextData = " "; ChangePosition(pVmsObj); } else { //°´Ã¼°¡ °¡º¯(¼ÒÅëÁ¤º¸ Ç¥Ãâ) ÀÎ °æ¿ì °¡º¯¹®ÀÚ¸¦ ¼³Á¤ÇÏÀÚ.... AnsiString VMS_IFSC_ID = ""; switch(pVmsObj->ObjectType) { case 11: case 12: case 13: case 14: case 15: case 16: case 18: case 19: VMS_IFSC_ID = pSchUnit->FRST_VMS_IFSC_ID; if (pVmsForm->FormKind == enFormKindTrfImg) { VMS_IFSC_ID = pSchUnit->VMS_IFSC_ID; } else if (pVmsForm->FormKind == enFormKindCongest && pVmsObj->ObjectType == 18) { VMS_IFSC_ID = pSchUnit->VMS_IFSC_ID; } break; case 21: case 22: case 23: case 24: case 25: case 26: case 28: VMS_IFSC_ID = pSchUnit->SECD_VMS_IFSC_ID; break; case 31: case 32: case 33: case 34: case 35: case 36: case 38: VMS_IFSC_ID = pSchUnit->THIR_VMS_IFSC_ID; break; case 41: case 42: case 43: case 44: case 45: case 46: case 48: VMS_IFSC_ID = pSchUnit->FOUR_VMS_IFSC_ID; break; case 91: case 92: VMS_IFSC_ID = pCDSObj->VMS_IFSC_ID; //ÃàÅëÇà½Ã°£/Ãà¼ÒÅë»óȲ(°íÁ¤) break; case 93: case 94: case 95: case 96: VMS_IFSC_ID = pSchUnit->VMS_IFSC_ID; break; default: continue; } pVmsObj->TextData = " "; TCDSIfsc *pTmpIfsc = IfscManager->FLists.Find(VMS_IFSC_ID); if (pTmpIfsc) { switch(pVmsObj->ObjectType) { case 11: case 21: case 31: case 41: //±¸°£¸í pVmsObj->TextData = pTmpIfsc->VMS_IFSC_NM; break; case 12: case 22: case 32: case 42: case 93://½ÃÁ¡¸í pVmsObj->TextData = pTmpIfsc->DSPL_STRT_NODE_NM; break; case 13: case 23: case 33: case 43: case 94://Á¾Á¡¸í pVmsObj->TextData = pTmpIfsc->DSPL_END_NODE_NM; break; case 14: case 24: case 34: case 44: case 92: case 95://¼ÒÅë»óȲ #if 0 pVmsObj->TextData = GradeToString(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0), pVmsForm->FormKind); #else if (pObj->VmsType == "VUTP") //µµÇü½ÄÀÎ °æ¿ì pVmsObj->TextData = GradeToString(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0), enFormKindTrfImg); else pVmsObj->TextData = GradeToString(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0), pVmsForm->FormKind); #endif pVmsObj->TextFontColor = GradeToColorCode(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0)); break; case 19: //¼ÒÅë»óȲ(°¡º¯) { AnsiString sGradText = GradeToString(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0), pVmsForm->FormKind); if (pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0) == grade_smoothness) { sGradText.printf("¼ÒÅë¿øÈ° ¾à %d ºÐ", pTmpIfsc->TRVL_HH); } pVmsObj->TextData = sGradText; pVmsObj->TextFontColor = GradeToColorCode(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0)); } break; case 15: case 25: case 35: case 45: case 91: case 96://ÅëÇà½Ã°£ #if 0 pVmsObj->TextData = AnsiString(pTmpIfsc->TRVL_HH); #else { AnsiString sFmt = pCDSObj->VMS_DSPL_TXT; if (sFmt.Pos("0")) { sFmt = StringReplace(sFmt, "0000", "%4d", TReplaceFlags() << rfReplaceAll); sFmt = StringReplace(sFmt, "000", "%3d", TReplaceFlags() << rfReplaceAll); sFmt = StringReplace(sFmt, "00", "%2d", TReplaceFlags() << rfReplaceAll); sFmt = StringReplace(sFmt, "0", "%d", TReplaceFlags() << rfReplaceAll); pVmsObj->TextData.printf(sFmt.c_str(), pTmpIfsc->TRVL_HH); } else { pVmsObj->TextData = AnsiString(pTmpIfsc->TRVL_HH); } } #endif pVmsObj->TextFontColor = GradeToColorCode(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0)); break; case 16: case 26: case 36: case 46://ÅëÇà¼Óµµ pVmsObj->TextData = AnsiString(pTmpIfsc->SPED); pVmsObj->TextFontColor = GradeToColorCode(pTmpIfsc->CMTR_GRAD_CD.ToIntDef(0)); break; case 17: case 27: case 37: case 47: //¹æÇâÀ̹ÌÁö...??? break; case 18: case 28: case 38: case 48: pVmsObj->TextData = pTmpIfsc->SPOT_NM; break; } ChangePosition(pVmsObj); } } } //FOR_STL(Æû°´Ã¼»ý¼º) pVmsForm->UnLock(); } //for(ÃÖ´ë Á¦°ø ¸Þ½ÃÁö °¹¼ö¸¸Å­ »ý¼º) } __finally { pObj->pForms->UnLock(); } } //iterator(VMSÀüü·çÇÁ) LINFO("MakeVmsDownloadForm: End. (VMS: %d EA, Forms %d EA)", nSaveVmsCnt, nSaveFormCnt); LINFO("MakeVmsDatabaseForm: Start"); nSaveVmsCnt = 0; nSaveFormCnt= 0; //µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÒ ÆûÀ» »ý¼ºÇÑ´Ù. for(it=VmsManager->FLists.FMapObject.begin(); it != VmsManager->FLists.FMapObject.end(); ++it) { TVmsCtlr *pObj = (TVmsCtlr*)it->second; if (pObj->Server.UseFlag != bit_enable) continue; if (!pObj->FProvide) continue; nSaveFormCnt += MakeVmsDatabaseForm(pObj); nSaveVmsCnt++; } LINFO("MakeVmsDatabaseForm: End. (VMS: %d EA, Forms %d EA)", nSaveVmsCnt, nSaveFormCnt); return VERR_NONE; } //--------------------------------------------------------------------------- int __fastcall TFrmMain::MakeVmsDatabaseForm(TVmsCtlr *AObj) { int nResult = VERR_OTHER; int nSelCnt = 0; if (!AObj) return VERR_MEMORY_ALLOC; int nFormCnt = AObj->pForms->Count(); if (nFormCnt == 0) return VERR_NONE; try { try { AObj->pForms->Lock(); String PHASE; for (int ii = 0; ii < nFormCnt; ii++) { TVmsForm *pForm = AObj->pForms->GetItem(ii); int nObjCnt; try { pForm->pBitmap->Canvas->Lock(); pForm->FormClear(CodeToColor(pForm->BkColor)); nObjCnt = pForm->Count(); for (int jj = 0; jj < nObjCnt; jj++) { TVmsFormObj *pFormObj = pForm->GetItem(jj); switch(pFormObj->ObjectType) { case 1: //½Éº¼ case 2: //À̹ÌÁö case 17: //¼ÒÅëÁ¤º¸À̹ÌÁö1 case 27: //¼ÒÅëÁ¤º¸À̹ÌÁö2 case 37: //¼ÒÅëÁ¤º¸À̹ÌÁö3 case 47: //¼ÒÅëÁ¤º¸À̹ÌÁö4 case 3: //¼ÒÅëÁ¤º¸¹è°æÀ̹ÌÁö pForm->pBitmap->Canvas->Draw(pFormObj->PosX, pFormObj->PosY, pFormObj->pImageData->Picture->Graphic); break; default://±âŸ ¹®ÀÚ¿­ pForm->pBitmap->Canvas->Brush->Color = CodeToColor(pFormObj->BkColor); pForm->pBitmap->Canvas->Font->Color = CodeToColor(pFormObj->TextFontColor); pForm->pBitmap->Canvas->Font->Name = CodeToFont(pFormObj->TextFontName); pForm->pBitmap->Canvas->Font->Size = pFormObj->TextFontSize; if (pFormObj->TextFontBold) pForm->pBitmap->Canvas->Font->Style = TFontStyles() << fsBold; else pForm->pBitmap->Canvas->Font->Style = TFontStyles(); pForm->pBitmap->Canvas->TextOutA(pFormObj->PosX, pFormObj->PosY, pFormObj->TextData); break; } } try { pForm->pStream->Clear(); pForm->pStream->Position = 0; pForm->pBitmap->SaveToStream(pForm->pStream); } catch(Exception &e) { LERROR("SaveMemoryStream3: %s", AnsiString(e.Message).c_str()); } try { //pForm->pBitmap->SaveToFile(g_sFormDir + AObj->VmsId + "\\" + AObj->VmsId + "_" + PHASE); //FTP´Ù¿î·Îµå ÇÏ´Â °æ¿ì ÆûÀ» FTPµð·ºÅ丮¿¡ ÀúÀåÇØ¾ßÇÔ if (AObj->FIsFtpDownload) { String DefForm, RunForm; DefForm.printf(L"%s9%d.bmp", String(AObj->VmsDownId).c_str(), ii); RunForm.printf(L"%s%02d.bmp", String(AObj->VmsDownId).c_str(), ii); if (AObj->CTLMODE->Control == 'B') { pForm->pBitmap->SaveToFile(g_sFtpDir + DefForm); // TODO: ¿ø·¡ ÁÖ¼®À̾úÀ½. À§¿¡ ÀúÀå³»¿ëÀÌ /// ¾Æ·¡´Â Á¶°Ç »ó°ü¾øÀÌ ÀúÀåÇÏ´Â °ÍÀ̾ú°í } else { pForm->pBitmap->SaveToFile(g_sFtpDir + RunForm); } } } catch(Exception &e) { LERROR("SaveMemoryStream-SaveToFile: %s", AnsiString(e.Message).c_str()); } nSelCnt++; } __finally { pForm->pBitmap->Canvas->Unlock(); } } nResult = VERR_NONE; } catch(Exception &e) { LERROR("SaveMemoryStream4: %s", AnsiString(e.Message).c_str()); } } __finally { AObj->pForms->UnLock(); } return nSelCnt; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::OnWMUserMessage(TMessage &Msg) { ReplyMessage(0); if ((int)Msg.WParam == WM_MAKE_DOWNLOAD_FORM) { int nResult = MakeVmsDownloadForm(); SendDbThreadMessage(WM_SAVE_DOWNLOAD_FORM, NULL, NULL); return; } if ((int)Msg.WParam == WM_MAKE_SAFE_ALARM) { LINFO("*** SAFE ALARM Occured..."); ProvideEvent(provide_event, NULL, NULL); return; } if ((int)Msg.WParam == WM_WINDOW_RESTORE) { Application->Restore(); Application->BringToFront(); } if ((int)Msg.WParam == WM_DATABASE_CLOSE) { m_bDB = state_error; } if ((int)Msg.WParam == WM_DATABASE_OPEN) { m_bDB = state_normal; } if ((int)Msg.WParam == WM_THREAD_TERMINATE) { Sleep(500); AutoClose(); } } //--------------------------------------------------------------------------- void __fastcall TFrmMain::OnVmsThreadMessage(TMessage &Msg) { TVmsCtlr *pObj = (TVmsCtlr*)Msg.LParam; switch(Msg.WParam) { case WM_VMS_SERVER_STTS: FrmVmsInfo->UpdateServerState((int)pObj); SendDbThreadMessage(WM_EQUIP_STATE, Msg.LParam, 1); break; case WM_VMS_CLIENT_STTS: FrmVmsInfo->UpdateClientState((int)pObj); break; case WM_VMS_STATE_STTS: FrmVmsInfo->UpdateClientState((int)pObj); SendDbThreadMessage(WM_EQUIP_STATE, Msg.LParam, 0); break; } } //--------------------------------------------------------------------------- void __fastcall TFrmMain::OnUdpDataRecvMessage(TMessage &Msg) { int nResult; IPCUDPMESSAGESTRUCT *RcvData = (IPCUDPMESSAGESTRUCT*)Msg.LParam; INT_SENDER *Sender = &RcvData->Sender; INT_PACKET *Pkt = &RcvData->Pkt; INT_HEAD *head = &Pkt->head; INT_DATA *data = &Pkt->data; char *pData = &data->Data[2]; BYTE OpCode = (BYTE)data->Data[0]; LINFO("OPR Client Req: %s.%d", VComm_ulong2ip(Sender->IP), Sender->Port); if (head->OPCode == INT_OP_COMM_COMMON) { switch(OpCode) { case INT_OP_VMS_POWER_CTL: { INT_VMS_POWER_CTL_REQ *pReq = (INT_VMS_POWER_CTL_REQ*)pData; LINFO("VmsPowerCtlReq: %.*s %s, %s, %d", INT_VMS_MAX_DATETIME, pReq->CmdTime, pReq->VmsId, pReq->OperId, pReq->Command); if ((nResult = SendVmsThreadMessage(pReq->VmsId, RcvData, OpCode, (char*)pReq)) != VERR_NONE) { //ClientResponse(SEND_NACK, &Req, result, NULL); } } break; case INT_OP_VMS_LUMINANCE_CTL: { INT_VMS_LUMINANCE_REQ *pReq = (INT_VMS_LUMINANCE_REQ*)pData; LINFO("VmsLuminanceReq: %.*s %s, %s, %d", INT_VMS_MAX_DATETIME, pReq->CmdTime, pReq->VmsId, pReq->OperId, pReq->Luminance); if ((nResult = SendVmsThreadMessage(pReq->VmsId, RcvData, OpCode, (char*)pReq)) != VERR_NONE) { //ClientResponse(SEND_NACK, &Req, result, NULL); } } break; case INT_OP_VMS_RESET: { INT_VMS_RESET_REQ *pReq = (INT_VMS_RESET_REQ*)pData; LINFO("VmsResetReq: %.*s %s, %s", INT_VMS_MAX_DATETIME, pReq->CmdTime, pReq->VmsId, pReq->OperId); if ((nResult = SendVmsThreadMessage(pReq->VmsId, RcvData, OpCode, (char*)pReq)) != VERR_NONE) { //ClientResponse(SEND_NACK, &Req, result, NULL); } } break; case INT_OP_VMS_PARA_SET: { INT_VMS_PARA_SET_REQ *pReq = (INT_VMS_PARA_SET_REQ*)pData; LINFO("VmsParaSetReq: %.*s %s, %s", INT_VMS_MAX_DATETIME, pReq->CmdTime, pReq->VmsId, pReq->OperId); LINFO("VmsParaSetReq: %d.%d,%d,%d,%d,%d,%d", pReq->SchMsgTime, pReq->ModuleTemp, pReq->FanTemp, pReq->HeaterTemp, pReq->ModuleFail, pReq->RetryCount, pReq->TimeOut); if ((nResult = SendVmsThreadMessage(pReq->VmsId, RcvData, OpCode, (char*)pReq)) != VERR_NONE) { //ClientResponse(SEND_NACK, &Req, result, NULL); } } break; case INT_OP_VMS_MODE: { INT_VMS_MODE_REQ *pReq = (INT_VMS_MODE_REQ*)pData; #if 0 LINFO("VmsModeSetReq: %.*s %s, %s, %c", INT_VMS_MAX_DATETIME, pReq->CmdTime, pReq->VmsId, pReq->OperId, pReq->Mode); #else LINFO("VmsModeSetReq: %.*s %s, %s, %d EA", INT_VMS_MAX_DATETIME, pReq->CmdTime, pReq->OperId, pReq->Count); #endif //ProvideEvent(provide_mode, pReq->VmsId, pReq->Mode); ProvideEvent(provide_mode, (BYTE*)pReq, NULL); } break; case INT_OP_VMS_STATE_REQ: LINFO("VmsStateReq"); DMCOMM->SendEquipStateAllProc(); break; case INT_OP_VMS_IMAGE_SYMBOL: LINFO("VmsImageSymbolUpdate"); SendDbThreadMessage(WM_MASTER_IMAGE_SYMBOL, NULL, NULL); break; case INT_OP_VMS_IMAGE_TRAFFIC: LINFO("VmsImageTrafficUpdate"); SendDbThreadMessage(WM_MASTER_IMAGE_TRAFFIC, NULL, NULL); break; case INT_OP_VMS_FORM_UPDATE: LINFO("VmsFormUpdate"); SendDbThreadMessage(WM_MASTER_FORM, NULL, NULL); break; case INT_OP_VMS_IFSC_UPDATE: LINFO("VmsIfscUpdate"); SendDbThreadMessage(WM_MASTER_VMS_IFSC, NULL, NULL); break; } } } //--------------------------------------------------------------------------- void __fastcall TFrmMain::TerminateApplication(void) { LERROR("Program terminated start"); /* ¿¬°á ¼ÒÄÏ Á¾·á */ DMCOMM->TerminateVms(); Sleep(500); DMCOMM->TerminateVms(); DMCOMM->TerminateVmsClient(); SendTerminal(); if (m_CommThreadID != NULL) { g_SysInfo->State.hFinishEvent = CreateEvent(NULL, FALSE, FALSE, ""); if (g_SysInfo->State.hFinishEvent == NULL) { LERROR("Create thread finish event fail"); } if (!PostThreadMessage(m_CommThreadID, WM_QUIT, NULL, NULL)) { LDEBUG("PostThreadMessage fail:%d", GetLastError()); } m_CommThreadID = NULL; if (g_SysInfo->State.hFinishEvent != NULL) { DWORD dwWaitResult; dwWaitResult = WaitForSingleObject(g_SysInfo->State.hFinishEvent, 5000); if (dwWaitResult != WAIT_OBJECT_0) { LERROR("Wait finish event fail"); } CloseHandle(g_SysInfo->State.hFinishEvent); } } VComm_Close(); LERROR("Program terminated end"); } //--------------------------------------------------------------------------- void __fastcall TFrmMain::UpdateProcessStatePanel() { TColor clState; clState = clGreen; if (m_bAction != vms_normal) clState = clRed; if (plStateAction->Color != clState) plStateAction->Color = clState; if (m_bComm == state_normal) clState = clGreen; else if (m_bComm == state_unknown) clState = clGray; else clState = clRed; if (plStateComm->Color != clState) plStateComm->Color = clState; if (m_bDB == state_normal) clState = clGreen; else if (m_bDB == state_unknown) clState = clGray; else clState = clRed; if (plStateDb->Color != clState) plStateDb->Color = clState; } //--------------------------------------------------------------------------- int __fastcall TFrmMain::SendDbThreadMessage(UINT Msg, int wParam, int lParam) { int result = VERR_OTHER; if (m_CommThreadID != NULL) { if (PostThreadMessage(m_CommThreadID, Msg, (WPARAM)wParam, (LPARAM)lParam)) { result = VERR_NONE; } else { result = VERR_INTERNAL; } } return result; } //--------------------------------------------------------------------------- int __fastcall TFrmMain::SendDbThreadDataMessage(UINT Msg, void *pData, int iLen) { int result = VERR_OTHER; char *p; if (m_CommThreadID != NULL) { p = new char[iLen]; if (p != NULL) { try { memcpy(p, pData, iLen); if (PostThreadMessage(m_CommThreadID, Msg, (WPARAM)p, NULL)) { result = VERR_NONE; Sleep(50); } else { result = VERR_INTERNAL; } } __finally { if (result != VERR_NONE) delete []p; } } else { result = VERR_MEMORY_ALLOC; } } return result; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::ClientResponse(int Flag, REQ_INFO_STRUCT *pReq, int error, void *pData) { #ifdef CENTERCOMM BYTE ErrCode; int sResult; switch(error) { case SYS_ERR_NONE: break; case SYS_ERR_OTHER: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_INTERNAL: ErrCode = INT_ERROR_SYSTEM; break; case SYS_ERR_MEMORY: ErrCode = INT_ERROR_SYSTEM; break; case SYS_ERR_DATABASE: ErrCode = INT_ERROR_SYSTEM; break; case SYS_ERR_RESET: ErrCode = INT_ERROR_SYSTEM; break; case SYS_ERR_START: ErrCode = INT_ERROR_SYSTEM; break; case SYS_ERR_OFFLINE: ErrCode = INT_ERROR_OFFLINE; break; case SYS_ERR_NO_RES: ErrCode = INT_ERROR_NO_RESPONSE; break; case SYS_ERR_ACCESS: ErrCode = INT_ERROR_PROCESS; break; case SYS_ERR_INVALID: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_UNKNOWN: ErrCode = INT_ERROR_UNKNOWN_CODE; break; case SYS_ERR_WRITE_LENGTH: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_PACKET_SIZE_LARGE: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_INVALID_TAG: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_CRC: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_LENGTH: ErrCode = INT_ERROR_LENGTH; break; case SYS_ERR_ADDRESS: ErrCode = INT_ERROR_ADDRESS; break; case SYS_ERR_HEADER_OPTIONS: ErrCode = INT_ERROR_HEADER; break; case SYS_ERR_UNKNOWN_COMMAND: ErrCode = INT_ERROR_UNKNOWN_OPCODE; break; case SYS_ERR_RECEIVE_TIMEOUT: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_DATA_SIZE: ErrCode = INT_ERROR_DISCORD; break; case SYS_ERR_MISMATCH: ErrCode = INT_ERROR_OTHER; break; case SYS_ERR_INVALID_PARA: ErrCode = INT_ERROR_INVALID_DATA; break; case SYS_ERR_MOVEMENT: ErrCode = INT_ERROR_MOVEMENT; break; case SYS_ERR_UNAUTHORIZED: ErrCode = INT_ERROR_UNAUTHORIZED; break; default: ErrCode = INT_ERROR_OTHER; break; } if (Flag == SEND_ACK) { INT_ACK_RES Ack; memset(&Ack, 0x00, sizeof(Ack)); Ack.OPCode.Type = INT_TYPE(pReq->OpCode); Ack.OPCode.Kind = INT_KIND(pReq->OpCode); Ack.MsgSeq = pReq->MsgSeq; if ((sResult = AckRes(&Ack, pReq->ProcessID)) != UDP_ERR_NONE) { LERROR("AckRes fail %d", sResult); } } else if (Flag == SEND_NACK) { INT_NACK_RES Nack; memset(&Nack, 0x00, sizeof(Nack)); Nack.OPCode.Type = INT_TYPE(pReq->OpCode); Nack.OPCode.Kind = INT_KIND(pReq->OpCode); Nack.MsgSeq = pReq->MsgSeq; Nack.ErrCode = ErrCode; if ((sResult = NackRes(&Nack, pReq->ProcessID)) != UDP_ERR_NONE) { LERROR("NackRes fail %d", sResult); } } #endif } //--------------------------------------------------------------------------- bool __fastcall TFrmMain::CheckBasisTime(char *p, int Cycle, int Basis) { char cTime[15]; CommUtil_MakeBasisTime(cTime, Cycle, Basis); if (memcmp(p, cTime, 14) != 0) { memcpy(p, cTime, 14); return true; } return false; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::ProvideEvent(int Type, BYTE *pVmsId, BYTE Mode) { int result; PROVIDE_STRUCT Pro; memset(&Pro, 0x00, sizeof(Pro)); Pro.Type = Type; if (pVmsId) { INT_VMS_MODE_REQ *pReq = (INT_VMS_MODE_REQ*)pVmsId; Pro.Count = pReq->Count; memcpy(Pro.Unit, pReq->Unit, sizeof(Pro.Unit)); } else { m_trfSendTimer = Now(); } #if 0 switch(Type) { case provide_event: Pro.Type = Type; break; case provide_mode: Pro.Type = Type; //memcpy(Pro.VmsId, pVmsId, VMS_ID_SIZE); //Pro.Mode = Mode; INT_VMS_MODE_REQ *pReq break; default: return; } #endif if ((result = SendDbThreadDataMessage(WM_PROVIDE_PROC, &Pro, sizeof(Pro))) != SYS_ERR_NONE) { LERROR("SendDbThreadDataMessage Error %d", result); } } //--------------------------------------------------------------------------- void __fastcall TFrmMain::CheckProvideSave() { SAVE_STRUCT ProvideSave; SAVE_STRUCT DownLoadSave; memset(&ProvideSave, 0x00, sizeof(ProvideSave)); memset(&DownLoadSave, 0x00, sizeof(DownLoadSave)); ProvideSave.Type = save_provide; ProvideSave.Count = 0; DownLoadSave.Type = save_download; DownLoadSave.Count = 0; VmsIterator it; for(it=VmsManager->FLists.FMapObject.begin(); it != VmsManager->FLists.FMapObject.end(); ++it) { TVmsCtlr *pObj = (TVmsCtlr*)it->second; if (pObj->Server.UseFlag != bit_enable) continue; if ((pObj->DOWNLOAD->SaveFlag == false) && (CommUtil_TimeDiff(pObj->DOWNLOAD->dTimer) > VMS_DOWNLOAD_TIMEOUT)) { DownLoadSave.pObj[DownLoadSave.Count++] = (void *)pObj; pObj->DOWNLOAD->SaveFlag = true; } if ((pObj->CTLMODE->SaveFlag == false) && (CommUtil_TimeDiff(pObj->CTLMODE->pTimer) > VMS_PROVIDE_TIMEOUT)) { ProvideSave.pObj[ProvideSave.Count++] = (void *)pObj; pObj->CTLMODE->SaveFlag = true; } } if (ProvideSave.Count != 0) { SendDbThreadDataMessage(WM_PROVIDE_SAVE, &ProvideSave, sizeof(ProvideSave)); } if (DownLoadSave.Count != 0) { SendDbThreadDataMessage(WM_PROVIDE_SAVE, &DownLoadSave, sizeof(DownLoadSave)); } } //--------------------------------------------------------------------------- bool __fastcall TFrmMain::CheckResource(size_t MaxMemory, DWORD MaxHandle, DWORD MaxThread, DWORD MaxGdi) { bool result; HANDLE hProcess; PROCESS_MEMORY_COUNTERS pmc; size_t uSize; DWORD HandleCount, ThreadCount, GdiCount; HANDLE hProcessSnap; PROCESSENTRY32 pe32; DWORD ProcessId; result = false; uSize = 0; HandleCount = 0; ThreadCount = 0; GdiCount = 0; hProcess = GetCurrentProcess(); if (hProcess != NULL) { if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) ) { uSize = pmc.WorkingSetSize/1024; if ((MaxMemory != 0) && (uSize > MaxMemory)) { LERROR("Memory usage exceeds standards!!!...[%d][%d]", MaxMemory, uSize); result = true; } } if ( GetProcessHandleCount( hProcess, &HandleCount) ) { if ((MaxHandle != 0) && (HandleCount > MaxHandle)) { LERROR("Window handle exceed standards!!!...[%d][%d]", MaxHandle, HandleCount); result = true; } } ProcessId = GetCurrentProcessId(); if ((hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 )) != INVALID_HANDLE_VALUE) { pe32.dwSize = sizeof( PROCESSENTRY32 ); if ( Process32First( hProcessSnap, &pe32 ) ) { do { if (pe32.th32ProcessID == ProcessId) { ThreadCount = pe32.cntThreads; if ((MaxThread != 0) && (ThreadCount > MaxThread)) { LERROR("Criteria exceeded thread!!!...[%d][%d]", MaxThread, ThreadCount); result = true; } break; } } while( Process32Next( hProcessSnap, &pe32 ) ); } CloseHandle( hProcessSnap ); } GdiCount = GetGuiResources( hProcess, GR_GDIOBJECTS); if ((MaxGdi != 0) && (GdiCount > MaxGdi)) { LERROR("GDI Objects exceeding standards!!!...[%d][%d]", MaxGdi, GdiCount); result = true; } CloseHandle( hProcess ); } try { FMemSize = uSize; plMemory->Caption = FormatFloat("##,##0", uSize) ;// + " KB"; plHandle->Caption = FormatFloat("##,##0", HandleCount);// + " EA"; plThread->Caption = FormatFloat("##,##0", ThreadCount);// + " EA"; plGdi->Caption = FormatFloat("##,##0", GdiCount) ;// + " EA"; } catch (Exception &e) {} return result; } //--------------------------------------------------------------------------- int TFrmMain::LogWrite(int ALogKind, char *AFmt, ...) { va_list ap; int cnt = 0; char szFmtData[MAX_LOG_BUFFER]; AnsiString sLogKind; bool bLog = false; switch(ALogKind) { case eLOG_INFO : bLog = g_LogCfg.Info; sLogKind = " [INF] "; break; case eLOG_DATA : bLog = g_LogCfg.Data; sLogKind = " [DAT] "; break; case eLOG_ERROR : bLog = g_LogCfg.Error; sLogKind = " [ERR] "; break; case eLOG_WARNING: bLog = g_LogCfg.Warning; sLogKind = " [WAN] "; break; case eLOG_DEBUG : bLog = g_LogCfg.Debug; sLogKind = " [DBG] "; break; case eLOG_DETAIL : bLog = g_LogCfg.Detail; sLogKind = " [DET] "; break; } if (!bLog) return -1; try { va_start(ap, AFmt); cnt = vsprintf(szFmtData, AFmt, ap); va_end(ap); ITSLog->LogWrite(NULL, ALogKind, szFmtData); IPC_LOG_MESSAGE *pLog = &FLogMsg;//new IPC_LOG_MESSAGE; if (pLog) { pLog->Kind = ALogKind; pLog->Flag = 0; pLog->Len = strlen(szFmtData); pLog->Tm = Now(); memset(pLog->Msg, 0x00, sizeof(pLog->Msg)); sprintf(pLog->Msg, "%sMAIN %s", sLogKind.c_str(), szFmtData); DWORD dwResult = 0; LRESULT lResult = SEND_LOGMSG(FrmSysLog->Handle, WM_LOG_DISPLAY, pLog, NULL, SMTO_NORMAL, 2000, dwResult); if (lResult == 0) { dwResult = GetLastError(); if (dwResult == ERROR_TIMEOUT) { } //SAFE_DELETE(pLog); } } } catch(Exception &e) { } return cnt; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::Panel16DblClick(TObject *Sender) { CheckResource((g_AppCfg.MaxMemory * 1024), g_AppCfg.MaxHandle, g_AppCfg.MaxThread, g_AppCfg.MaxGdi); } //--------------------------------------------------------------------------- void __fastcall TFrmMain::plStateDbDblClick(TObject *Sender) { SendDbThreadMessage(WM_MASTER_IMAGE_SYMBOL, NULL, NULL); Sleep(500); SendDbThreadMessage(WM_MASTER_FORM, NULL, NULL); Sleep(500); SendDbThreadMessage(WM_MASTER_VMS_IFSC, NULL, NULL); } //--------------------------------------------------------------------------- void __fastcall TFrmMain::plStateActionDblClick(TObject *Sender) { ProvideEvent(provide_event, NULL, NULL); } //--------------------------------------------------------------------------- void __fastcall TFrmMain::LoadOldVmsInfo() { //LINFO("Old Protocol Version VMS Information Loading..."); TStringList *slFile = NULL; String sCfgFile = g_sCfgDir + "OldVMS.inf"; try { slFile = new TStringList; slFile->Clear(); slFile->LoadFromFile(sCfgFile); int ii; unsigned int hn, ln; BYTE chn, cln, val; char szData[2048]; BYTE RxBuff[VMS_MAX_PACKET_SIZE]; int RxLen; RxLen = 0; memset(RxBuff, 0x00, sizeof(RxBuff)); for (ii = 0; ii < slFile->Count; ii++) { AnsiString sVmsId = slFile->Strings[ii].Trim(); if (sVmsId == "") continue; if (sVmsId == "\r\n") continue; TVmsCtlr *pObj = FindVms(sVmsId); if (pObj) { pObj->FIsOldProtocol = true; //LINFO("%s : ÀÌÀü ¹öÀü ÇÁ·ÎÅäÄÝ »ç¿ë", sVmsId.c_str()); } else { //LINFO("%s : ÀÌÀü ¹öÀü ÇÁ·ÎÅäÄÝ »ç¿ë(ãÀ»¼ö ¾øÀ½)", sVmsId.c_str()); } } } catch(Exception &e) { LERROR("LoadOldVmsInfo Exception: %s", AnsiString(e.Message).c_str()); } delete slFile; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::LoadFtpVmsInfo() { //LINFO("FTP Download VMS Information Loading..."); TStringList *slFile = NULL; String sCfgFile = g_sCfgDir + "FtpVMS.inf"; try { slFile = new TStringList; slFile->Clear(); slFile->LoadFromFile(sCfgFile); int ii; unsigned int hn, ln; BYTE chn, cln, val; char szData[2048]; BYTE RxBuff[VMS_MAX_PACKET_SIZE]; int RxLen; RxLen = 0; memset(RxBuff, 0x00, sizeof(RxBuff)); for (ii = 0; ii < slFile->Count; ii++) { AnsiString sVmsId = slFile->Strings[ii].Trim(); if (sVmsId == "") continue; if (sVmsId == "\r\n") continue; TVmsCtlr *pObj = FindVms(sVmsId); if (pObj) { pObj->FIsFtpDownload = true; pObj->FBmpDownload = true; //FTP·Î ´Ù¿î·Îµå ÇÏ´Â °æ¿ì À̹ÌÁö·Î Àü¼ÛµÇ¾î¾ßÇÔ //LINFO("%s : FTP Downloaod »ç¿ë", sVmsId.c_str()); } else { //LINFO("%s : FTP Downloaod »ç¿ë(ãÀ»¼ö ¾øÀ½)", sVmsId.c_str()); } } } catch(Exception &e) { LERROR("LoadFtpVmsInfo Exception: %s", AnsiString(e.Message).c_str()); } delete slFile; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::LoadFontVmsInfo() { //LINFO("Protocol Font Name VMS Information Loading..."); TStringList *slFile = NULL; String sCfgFile = g_sCfgDir + "FontNameVMS.inf"; try { slFile = new TStringList; slFile->Clear(); slFile->LoadFromFile(sCfgFile); int ii; unsigned int hn, ln; BYTE chn, cln, val; char szData[2048]; BYTE RxBuff[VMS_MAX_PACKET_SIZE]; int RxLen; RxLen = 0; memset(RxBuff, 0x00, sizeof(RxBuff)); for (ii = 0; ii < slFile->Count; ii++) { AnsiString sVmsId = slFile->Strings[ii].Trim(); if (sVmsId == "") continue; if (sVmsId == "\r\n") continue; TVmsCtlr *pObj = FindVms(sVmsId); if (pObj) { pObj->FIsProtolFontName = true; //LINFO("%s : Font Name Protocol »ç¿ë", sVmsId.c_str()); } else { //LINFO("%s : Font Name Protocol »ç¿ë(ãÀ»¼ö ¾øÀ½)", sVmsId.c_str()); } } } catch(Exception &e) { LERROR("LoadFontVmsInfo Exception: %s", AnsiString(e.Message).c_str()); } delete slFile; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::LoadStatusAutoVmsInfo() { //LINFO("Status Auto Notify VMS Information Loading..."); TStringList *slFile = NULL; String sCfgFile = g_sCfgDir + "StatusAutoVMS.inf"; try { slFile = new TStringList; slFile->Clear(); slFile->LoadFromFile(sCfgFile); int ii; unsigned int hn, ln; BYTE chn, cln, val; char szData[2048]; BYTE RxBuff[VMS_MAX_PACKET_SIZE]; int RxLen; RxLen = 0; memset(RxBuff, 0x00, sizeof(RxBuff)); for (ii = 0; ii < slFile->Count; ii++) { AnsiString sVmsId = slFile->Strings[ii].Trim(); if (sVmsId == "") continue; if (sVmsId == "\r\n") continue; TVmsCtlr *pObj = FindVms(sVmsId); if (pObj) { pObj->FIsStatusAuto = true; //LINFO("%s : Status Auto »ç¿ë", sVmsId.c_str()); } else { //LINFO("%s : Status Auto »ç¿ë(ãÀ»¼ö ¾øÀ½)", sVmsId.c_str()); } } } catch(Exception &e) { LERROR("LoadStatusAutoVmsInfo Exception: %s", AnsiString(e.Message).c_str()); } delete slFile; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::LoadBitmapVmsInfo() { //LINFO("Bitmap Form VMS Information Loading..."); TStringList *slFile = NULL; String sCfgFile = g_sCfgDir + "BitmapVMS.inf"; try { slFile = new TStringList; slFile->Clear(); slFile->LoadFromFile(sCfgFile); int ii; unsigned int hn, ln; BYTE chn, cln, val; char szData[2048]; BYTE RxBuff[VMS_MAX_PACKET_SIZE]; int RxLen; RxLen = 0; memset(RxBuff, 0x00, sizeof(RxBuff)); for (ii = 0; ii < slFile->Count; ii++) { AnsiString sVmsId = slFile->Strings[ii].Trim(); if (sVmsId == "") continue; if (sVmsId == "\r\n") continue; TVmsCtlr *pObj = FindVms(sVmsId); if (pObj) { pObj->FBmpDownload = true; //LINFO("%s : Bitmap Form »ç¿ë", sVmsId.c_str()); } else { //LINFO("%s : Bitmap Form »ç¿ë(ãÀ»¼ö ¾øÀ½)", sVmsId.c_str()); } } } catch(Exception &e) { LERROR("LoadBitmapVmsInfo Exception: %s", AnsiString(e.Message).c_str()); } delete slFile; } //--------------------------------------------------------------------------- TVmsCtlr* __fastcall TFrmMain::FindVms(AnsiString AVmsId) { VmsIterator it; for(it=VmsManager->FLists.FMapObject.begin(); it != VmsManager->FLists.FMapObject.end(); ++it) { TVmsCtlr *pObj = (TVmsCtlr*)it->second; if (pObj->VmsId.AnsiCompare(AVmsId) == 0) { return pObj; } } return NULL; } //--------------------------------------------------------------------------- bool __fastcall TFrmMain::OpenCenterComm() { try { IdUDPCenterServer->DefaultPort = g_AppCfg.nProcessPort; IdUDPCenterServer->IPVersion = Id_IPv4; IdUDPCenterServer->BroadcastEnabled = true; IdUDPCenterServer->ThreadedEvent = true; IdUDPCenterServer->Active = true; } catch(Exception &e) { LERROR("OpenCenterComm Error: [%s]", AnsiString(e.ClassName()+e.Message).c_str()); return false; } return true; } //--------------------------------------------------------------------------- void __fastcall TFrmMain::IdUDPCenterServerUDPRead(TIdUDPListenerThread *AThread, TBytes AData, TIdSocketHandle *ABinding) { BYTE szRcvBuf[MAX_OLD_PACKET]; AnsiString sPeerIp = AnsiString(ABinding->PeerIP).c_str(); int nPeerPort = ABinding->PeerPort; int nRcvLen = AData.get_length(); #if 0 LINFO("Center Recv Data: [%s.%d] %d Bytes", sPeerIp.c_str(), nPeerPort, nRcvLen); #endif if (nRcvLen > MAX_OLD_PACKET) { LERROR("Center Recv Data: [%s.%d] %d Bytes - Packet OverFlow", sPeerIp.c_str(), nPeerPort, nRcvLen); return; } memset(szRcvBuf, 0x00, sizeof(szRcvBuf)); memcpy(szRcvBuf, &AData[0], nRcvLen); OLD_PROT_HEAD *pHead = (OLD_PROT_HEAD*)szRcvBuf; if (pHead->OpCodeType != 0x01 && pHead->OpCodeKind != 0x01) { LERROR("Center Recv Unknown Request: Type[%02X], Kind[%02X]", pHead->OpCodeType, pHead->OpCodeKind); return; } BYTE szRes[30]; memset(szRes, 0x00, sizeof(szRes)); #define VMS_NODE_ID 0x03 #define VMS_TASK_ID 0x01 szRes[ 0] = pHead->MsgSeq; //MsgSeq szRes[ 1] = 0x00; //MsgCL szRes[ 2] = 0x00; //ResFlag szRes[ 3] = VMS_NODE_ID; //NodeId szRes[ 4] = VMS_TASK_ID; //TaskId szRes[ 5] = 0x01; //TaskSeqNo szRes[ 6] = 0x01; //OpType szRes[ 7] = 0x02; //OpKind szRes[ 8] = 0x00; //Length szRes[ 9] = 0x03; //Length szRes[10] = (m_bDB == state_normal) ? 0x01 : 0x00; //DB szRes[11] = (VmsManager->Normal == 0) ? 0x00 : 0x01; //Åë½Å szRes[12] = 0x01; //µ¿ÀÛ //DB»óÅÂ(0:Àå¾Ö 1:Á¤»ó 2:ÇØ´ç ¾øÀ½), Åë½Å»óÅÂ(0:Àå¾Ö 1:Á¤»ó 2:ÇØ´ç ¾øÀ½), µ¿ÀÛ»óÅÂ(0 : Standby 1 : Active 2 : Change) if (IdUDPCenterServer->Bindings == NULL) { LERROR("Center Communication Error"); } else { int nSendLen = 13; TBytes sendBytes; sendBytes.Length = nSendLen; ZeroMemory(&sendBytes[0], nSendLen); CopyMemory(&sendBytes[0], szRes, nSendLen); IdUDPCenterServer->SendBuffer(String(sPeerIp), (WORD)nPeerPort, Id_IPv4, sendBytes); LINFO("Center Response Program Run State: [%s.%d] %d Bytes Send", sPeerIp.c_str(), nPeerPort, nSendLen); } } //---------------------------------------------------------------------------