VDSM300MF.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CenterCommF.h"
  7. #pragma hdrstop
  8. #include "VDSM300MF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "cxButtons"
  12. #pragma link "cxClasses"
  13. #pragma link "cxContainer"
  14. #pragma link "cxControls"
  15. #pragma link "cxCustomData"
  16. #pragma link "cxData"
  17. #pragma link "cxDataStorage"
  18. #pragma link "cxEdit"
  19. #pragma link "cxFilter"
  20. #pragma link "cxGraphics"
  21. #pragma link "cxGrid"
  22. #pragma link "cxGridCustomTableView"
  23. #pragma link "cxGridCustomView"
  24. #pragma link "cxGridLevel"
  25. #pragma link "cxGridTableView"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxRadioGroup"
  31. #pragma link "cxSplitter"
  32. #pragma link "cxStyles"
  33. #pragma link "dxSkinBlack"
  34. #pragma link "dxSkinBlue"
  35. #pragma link "dxSkinsCore"
  36. #pragma link "dxSkinscxPCPainter"
  37. #pragma link "FRAME_VdsStateListF"
  38. #pragma link "cxTextEdit"
  39. #pragma link "cxDropDownEdit"
  40. #pragma link "cxMaskEdit"
  41. #pragma resource "*.dfm"
  42. TVDSM300M *VDSM300M = NULL;
  43. //---------------------------------------------------------------------------
  44. __fastcall TVDSM300M::TVDSM300M(TComponent* Owner)
  45. : TForm(Owner)
  46. {
  47. ITSSkin_Load(this);
  48. CMM_LoadForm(g_sFormsDir, this);
  49. FTitle = Caption;
  50. FReqSeq = 0;
  51. FRAMEVdsStateList1->PnlTop->Visible = false;
  52. FRAMEVdsStateList1->PnlBottom->Visible = false;
  53. }
  54. //---------------------------------------------------------------------------
  55. void __fastcall TVDSM300M::CommClose()
  56. {
  57. try
  58. {
  59. FStopImages.RemoveAll();
  60. TmrControlTimeout->Enabled = false;
  61. CMM_SaveForm(g_sFormsDir, this);
  62. }
  63. catch(...)
  64. {
  65. }
  66. }
  67. //---------------------------------------------------------------------------
  68. void __fastcall TVDSM300M::FormShow(TObject *Sender)
  69. {
  70. Refresh();
  71. FormInit();
  72. TmrShow->Enabled = true;
  73. }
  74. //---------------------------------------------------------------------------
  75. void __fastcall TVDSM300M::FormInit()
  76. {
  77. PnlImage->ParentColor = false;
  78. PnlImage->Color = clBlack;
  79. }
  80. //---------------------------------------------------------------------------
  81. void __fastcall TVDSM300M::TmrShowTimer(TObject *Sender)
  82. {
  83. TmrShow->Enabled = false;
  84. FRAMEVdsStateList1->UpdateList();
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TVDSM300M::BtnCloseClick(TObject *Sender)
  88. {
  89. Close();
  90. }
  91. //---------------------------------------------------------------------------
  92. void __fastcall TVDSM300M::FormClose(TObject *Sender, TCloseAction &Action)
  93. {
  94. CommClose();
  95. VDSM300M = NULL;
  96. Action = caFree;
  97. }
  98. //---------------------------------------------------------------------------
  99. void __fastcall TVDSM300M::FormCloseQuery(TObject *Sender, bool &CanClose)
  100. {
  101. FRAMEVdsStateList1->OnCloseQuery(CanClose);
  102. }
  103. //---------------------------------------------------------------------------
  104. void __fastcall TVDSM300M::OnMainFormMessage(TMessage &Msg)
  105. {
  106. switch (Msg.WParam)
  107. {
  108. case WP_DB_SELECT_OK:
  109. if (Msg.LParam == LP_MSG_FACILITY_STTS)
  110. {
  111. FRAMEVdsStateList1->RefreshStatus();
  112. }
  113. break;
  114. case INT_OP_VDS_STOP_IMAGE_RES:
  115. {
  116. IPC_MSG_DATA *RcvData = (IPC_MSG_DATA*)Msg.LParam;
  117. INT_VDS_STOP_IMAGE_RES *ARes = (INT_VDS_STOP_IMAGE_RES*)&RcvData->Pkt.data.Data[0];;
  118. if (ARes->Error != ERR_VDS_STOP_IMAGE_NORMAL)
  119. {
  120. BtnStopImage->Enabled = true;
  121. TmrControlTimeout->Enabled = false;
  122. FStopImages.RemoveAll();
  123. String sMsg;
  124. sMsg.printf(L"VDS 정지영상 요청중 오류가 발생했습니다.\r\n오류코드: %02X", ARes->Error);
  125. Application->MessageBox(sMsg.c_str(), BtnStopImage->Caption.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  126. break;
  127. }
  128. //reMsg->Lines->Add(String(ARes->Total) + ", " + String(ARes->Current) + ", " + String(FStopImages.Size()));
  129. TVdsStopImage *pImage = new TVdsStopImage();
  130. pImage->Size = ARes->Size;
  131. memcpy(pImage->Data, ARes->Data, ARes->Size);
  132. FStopImages.Push(ARes->Current, pImage);
  133. if ((ARes->Total+1) == FStopImages.Size())
  134. {
  135. BtnStopImage->Enabled = true;
  136. TmrControlTimeout->Enabled = false;
  137. AnsiString sFileName;
  138. sFileName.printf("%s%d.jpg", AnsiString(g_sTempDir).c_str(), ARes->VDS_CTLR_NMBR);
  139. try {
  140. DeleteFile(sFileName);
  141. } catch(Exception &) {}
  142. FILE *fp = fopen(sFileName.c_str(), "wb+");
  143. if (fp)
  144. {
  145. FOR_STL(TVdsStopImage*, pObj, FStopImages)
  146. {
  147. fwrite(pObj->Data, pObj->Size, 1, fp);
  148. }
  149. fclose(fp);
  150. }
  151. Image1->Picture->LoadFromFile(sFileName);
  152. FStopImages.RemoveAll();
  153. }
  154. }
  155. break;
  156. default:
  157. break;
  158. }
  159. }
  160. //---------------------------------------------------------------------------
  161. void __fastcall TVDSM300M::BtnResetClick(TObject *Sender)
  162. {
  163. TVdsCtlr *pObj = VdsCtlrManager->FLists.Find(EdNmbr->Text);
  164. if (!pObj) return;
  165. String sTitle = BtnReset->Caption;
  166. String sMsg = "";
  167. if (pObj->STATE.Comm != vds_normal)
  168. {
  169. sMsg = lblText3->Caption;//"현재 통신이 비정상인 VDS는 선택하실 수 없습니다.\r\n통신상태가 정상인 VDS를 선택하십시요.";
  170. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  171. return;
  172. }
  173. int nCmdIdx;
  174. nCmdIdx = 2;
  175. sMsg = lblText6->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VDS에 VDS 제어기 리셋 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  176. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  177. int result;
  178. String sCmdUser = g_pLOGIN->sUserId;
  179. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  180. // 제어기 리셋
  181. INT_VDS_RESET_REQ VdsReset;
  182. BYTE MsgSeq;
  183. memset(&VdsReset, 0x00, sizeof(VdsReset));
  184. MsgSeq = (BYTE)0x20;
  185. memcpy(VdsReset.CmdTime, AnsiString(sCmdTime).c_str(), INT_VDS_MAX_DATETIME); /* 명령수행시각 */
  186. memcpy(VdsReset.OperId, AnsiString(sCmdUser).c_str(), INT_VDS_MAX_OPER_ID); /* 운영자 ID */
  187. VdsReset.VDS_CTLR_NMBR = pObj->VDS_CTLR_NMBR.ToIntDef(0);
  188. result = CComm_VdsResetReq(&VdsReset, MsgSeq);
  189. if (VERR_NONE == result)
  190. {
  191. //VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V03", "Reset", "1", sCmdUser);
  192. }
  193. else
  194. {
  195. //VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V03", "Reset", "0", sCmdUser);
  196. }
  197. sMsg = lblText7->Caption;//"VDS로 제어기 리셋 명령을 요청하였습니다.";
  198. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  199. }
  200. //---------------------------------------------------------------------------
  201. void __fastcall TVDSM300M::BtnStopImageClick(TObject *Sender)
  202. {
  203. TVdsCtlr *pObj = VdsCtlrManager->FLists.Find(EdNmbr->Text);
  204. if (!pObj) return;
  205. String sTitle = BtnStopImage->Caption;
  206. String sMsg = "";
  207. if (pObj->STATE.Comm != vds_normal)
  208. {
  209. sMsg = lblText3->Caption;//"현재 통신이 비정상인 VDS는 선택하실 수 없습니다.\r\n통신상태가 정상인 VDS를 선택하십시요.";
  210. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  211. return;
  212. }
  213. String sCmraNo = ITSUtil_GetCode(CbVDS_CMRA_NO->Text); // 카메라 번호
  214. if (CbVDS_CMRA_NO->ItemIndex < 0)
  215. {
  216. sMsg = cxLabel4->Caption;
  217. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  218. return;
  219. }
  220. FStopImages.RemoveAll();
  221. int result;
  222. String sCmdUser = g_pLOGIN->sUserId;
  223. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  224. if (Image1->Picture)
  225. {
  226. Image1->Picture->Assign(NULL);
  227. }
  228. // VDS 카메라 정지영상 요청
  229. INT_VDS_STOP_IMAGE_REQ VdsImage;
  230. BYTE MsgSeq;
  231. memset(&VdsImage, 0x00, sizeof(VdsImage));
  232. MsgSeq = (BYTE)0x30;
  233. memcpy(VdsImage.CmdTime, AnsiString(sCmdTime).c_str(), INT_VDS_MAX_DATETIME); /* 명령수행시각 */
  234. memcpy(VdsImage.OperId, AnsiString(sCmdUser).c_str(), INT_VDS_MAX_OPER_ID); /* 운영자 ID */
  235. VdsImage.VDS_CTLR_NMBR = pObj->VDS_CTLR_NMBR.ToIntDef(0);
  236. VdsImage.CameraNo = (BYTE)sCmraNo.ToIntDef(0);
  237. result = CComm_VdsStopImageReq(&VdsImage, MsgSeq);
  238. BtnStopImage->Enabled = false;
  239. TmrControlTimeout->Tag = 1;
  240. TmrControlTimeout->Enabled = true;
  241. sMsg = cxLabel5->Caption;//"VDS로 제어기 리셋 명령을 요청하였습니다.";
  242. //Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  243. }
  244. //---------------------------------------------------------------------------
  245. void __fastcall TVDSM300M::FRAMEVdsStateList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  246. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  247. {
  248. if (!ACellViewInfo) return;
  249. int nRow = FRAMEVdsStateList1->TvList->DataController->FocusedRecordIndex;
  250. if( nRow <= -1 )
  251. return;
  252. String NMBR = "";
  253. String ID = "";
  254. String NAME = "";
  255. bool bCmdEnabled = false;
  256. int nMemPtr = FRAMEVdsStateList1->TvList->DataController->Values[nRow][FRAMEVdsStateList1->Column99->Index];
  257. TVdsCtlr* pObj = (TVdsCtlr*)nMemPtr;
  258. if (pObj)
  259. {
  260. NMBR = pObj->VDS_CTLR_NMBR;
  261. ID = pObj->VDS_CTLR_ID;
  262. NAME = pObj->VDS_NM;
  263. if (pObj->STATE.Comm == vds_normal)
  264. {
  265. bCmdEnabled = true;
  266. }
  267. }
  268. EdNmbr->Text = NMBR;
  269. EdVdsId->Text = ID;
  270. EdVdsNm->Text = NAME;
  271. BtnReset->Enabled = bCmdEnabled;
  272. BtnStopImage->Enabled = bCmdEnabled;
  273. CbVDS_CMRA_NO->Properties->Items->Clear();
  274. TVdsCtlr *pVds;
  275. pVds = VdsCtlrManager->FLists.Find(NMBR);
  276. if (!pVds) return;
  277. FOR_STL(TVdsCmra*, pCmra, pVds->FCmras)
  278. {
  279. String sId = String(pCmra->VDS_CMRA_NO);
  280. String sNm = pCmra->VDS_CMRA_NM;
  281. CbVDS_CMRA_NO->Properties->Items->Add("[" + sId + "] " + sNm);
  282. }
  283. CbVDS_CMRA_NO->ItemIndex = 0;
  284. if (Image1->Picture)
  285. {
  286. Image1->Picture->Assign(NULL);
  287. }
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TVDSM300M::TmrControlTimeoutTimer(TObject *Sender)
  291. {
  292. TmrControlTimeout->Enabled = false;
  293. if (TmrControlTimeout->Tag == 1)
  294. {
  295. String sMsg = cxLabel6->Caption;
  296. Application->MessageBox(sMsg.c_str(), BtnStopImage->Caption.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  297. FStopImages.RemoveAll();
  298. BtnStopImage->Enabled = true;
  299. }
  300. }
  301. //---------------------------------------------------------------------------