VMSCommLibF.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. //---------------------------------------------------------------------------
  2. #ifndef VMSCommLibFH
  3. #define VMSCommLibFH
  4. //---------------------------------------------------------------------------
  5. //---------------------------------------------------------------------------
  6. #ifndef __VMSCommLib_EXPORT__
  7. #pragma comment(lib, "VMSCommLib.lib")
  8. #endif // #ifndef __VMSCommLib_EXPORT__
  9. //---------------------------------------------------------------------------
  10. #include <vcl.h>
  11. //COMMON LIBRARY
  12. #include "ITSLogF.h"
  13. #include "ITSNetF.h"
  14. //DM
  15. #include "DMAdoDbF.h"
  16. //CDS
  17. #include "CDSAtmpF.h"
  18. #include "CDSSafeF.h"
  19. #include "CDSColorF.h"
  20. #include "CDSCtlrF.h"
  21. #include "CDSFontF.h"
  22. #include "CDSFormF.h"
  23. #include "CDSIfscF.h"
  24. #include "CDSImageF.h"
  25. #include "CDSItsObjectF.h"
  26. #include "CDSManagerF.h"
  27. #include "CDSParkF.h"
  28. #include "CDSProcessF.h"
  29. #include "VmsFormF.h"
  30. #include "VmsUtilsF.h"
  31. #include "CDSVmsIfscTrafF.h"
  32. //COMMON
  33. #include "ClientSessionF.h"
  34. #include "ClientSessionManagerF.h"
  35. #include "FrmNetworkF.h"
  36. #include "PacketHandllingF.h"
  37. #include "FrmVmsLogF.h"
  38. //THREAD
  39. #include "DbmThreadF.h"
  40. #include "DbmReadThreadF.h"
  41. #include "JobThreadF.h"
  42. #include "LogThreadF.h"
  43. /*
  44. ******************************************************************************
  45. * User Define
  46. ******************************************************************************
  47. */
  48. #define SAFE_DELETE(p) {if (p != NULL) { delete p; p = NULL; }}
  49. #define MAINHANDLE Application->MainForm->Handle
  50. //---------------------------------------------------------------------------
  51. #define MINFO(args...) APP_LogWrite(ITSLog, eLOG_INFO, log_sys, from_main, ##args)
  52. #define MDATA(args...) APP_LogWrite(ITSLog, eLOG_DATA, log_sys, from_main, ##args)
  53. #define MERROR(args...) APP_LogWrite(ITSLog, eLOG_ERROR, log_sys, from_main, ##args)
  54. #define MWARN(args...) APP_LogWrite(ITSLog, eLOG_WARNING, log_sys, from_main, ##args)
  55. #define MDEBUG(args...) APP_LogWrite(ITSLog, eLOG_DEBUG, log_sys, from_main, ##args)
  56. #define MDETAIL(args...) APP_LogWrite(ITSLog, eLOG_DETAIL, log_sys, from_main, ##args)
  57. #define LINFO(args...) LogWrite(eLOG_INFO, ##args)
  58. #define LDATA(args...) LogWrite(eLOG_DATA, ##args)
  59. #define LERROR(args...) LogWrite(eLOG_ERROR, ##args)
  60. #define LWARN(args...) LogWrite(eLOG_WARNING, ##args)
  61. #define LDEBUG(args...) LogWrite(eLOG_DEBUG, ##args)
  62. #define LDETAIL(args...) LogWrite(eLOG_DETAIL, ##args)
  63. #define SINFO(args...) SysLogWrite(eLOG_INFO, ##args)
  64. #define SDATA(args...) SysLogWrite(eLOG_DATA, ##args)
  65. #define SERROR(args...) SysLogWrite(eLOG_ERROR, ##args)
  66. #define SWARN(args...) SysLogWrite(eLOG_WARNING, ##args)
  67. #define SDEBUG(args...) SysLogWrite(eLOG_DEBUG, ##args)
  68. #define SDETAIL(args...) SysLogWrite(eLOG_DETAIL, ##args)
  69. #define __MYFUNC__ (strrchr(__FUNCTION__, ':') ? strrchr(__FUNCTION__, ':')+1 : __FUNCTION__)
  70. #define DBERROR(_class,_error,_sql) \
  71. ITSLog->LogDbError(String(__FUNCTION__),_class,_error,_sql,__FILE__, String(__FUNC__), __LINE__,false); \
  72. ErrorString = __FUNCTION__ + _error
  73. #define LOGMSGLEN 30
  74. #define DDBSTART MDEBUG("DCOM %30.30s: Start", __MYFUNC__)
  75. #define DDBSTOP(x) MDEBUG("DCOM %30.30s: %d EA", __MYFUNC__, x)
  76. #define IDBSTART MINFO ("DCOM %30.30s: Start", __MYFUNC__)
  77. #define IDBSTOP(x) MINFO ("DCOM %30.30s: %d EA", __MYFUNC__, x)
  78. #define WM_THREAD_TERMINATE (WM_USER+0x92) /* Thread 종료 메시지 */
  79. #define WM_PROCESS_STATE (WM_USER+0xA4) /* 프로세스 상태 입력 */
  80. //---------------------------------------------------------------------------
  81. // SendMessageTimeout
  82. #define SEND_LOGMSG(a,b,c,d,e,f,g) ::SendMessageTimeout(a, b, (WPARAM)c, (LPARAM)d, e, f, &g)
  83. //#define SEND_LOGMSG(a,b,c,d,e,f,g) ::PostMessage(a, b, (WPARAM)c, (LPARAM)d)
  84. #define SEND_MSG(x,y,z,p) ::SendMessage(x, y, (WPARAM)z, (LPARAM)p)
  85. #define POST_MSG(x,y,z,p) ::PostMessage(x, y, (WPARAM)z, (LPARAM)p)
  86. #define USER_MSG(x,y,z) ::PostMessage(x, WM_USER, (WPARAM)y, (LPARAM)p)
  87. #define WM_WINDOW_RESTORE (WM_USER+0xA0) /* 중복실행시 기존 윈도우 활성화 */
  88. #define WM_DB_THREAD (WM_USER+0xF0) /* DB 스레드 연계 메시지 */
  89. #define WM_THREAD (WM_USER+0xF1) /* 스레드 연계 메시지 */
  90. #define WM_TCP_CLIENT (WM_USER+0xF2) /* TCP Client */
  91. #define WM_TCP_SERVER (WM_USER+0xF3) /* TCP Client */
  92. #define WM_TCP_THREAD (WM_USER+0xF4)
  93. #define WM_PANEL_REFRESH (WM_USER+0xF5) /* TPanel color refresh */
  94. #define WM_DB_WRITE_THREAD (WM_USER+0xF6) /* DB 스레드 연계 메시지 */
  95. #define WM_TCP_SERVER_STTS (WM_USER+0xB2) // 제어기 접속/해제(통신스레드->메인)
  96. #define WM_TCP_CLIENT_STTS (WM_USER+0xB3) // 제어기 접속/해제(통신스레드->메인)
  97. #define WM_CTLR_STATE_STTS (WM_USER+0xB4) // 제어기 상태정보 업데이트
  98. // 스레드 종료 대기 시간
  99. #define WAIT_THREAD_TERMINATE_TIME 5000 // Wait Thread Terminate Time(5 seconds)
  100. /*
  101. ******************************************************************************
  102. * 스레드로 전달하는 메시지
  103. ******************************************************************************
  104. */
  105. #define WM_EQUIP_STATE_ALL (WM_USER+0xB2) /* 시설물상태 개별 입력 */
  106. #define WM_EQUIP_STATE (WM_USER+0xC2) /* 시설물상태 전체 입력 */
  107. #define WM_DATABASE_CLOSE (WM_USER+0xA0) /* DATABASE CLOSE */
  108. #define WM_DATABASE_REFLASH (WM_USER+0xA1) /* DATABASE REFLASH */
  109. #define WM_DATABASE_OPEN (WM_USER+0xA2) /* DATABASE OPEN */
  110. #define WM_LOG_DISPLAY (WM_USER+0xA3) /* LOG DISPLAY */
  111. #define WM_MASTER_FORM (WM_USER+0xD1) /* 폼정보 변경 */
  112. #define WM_MASTER_IMAGE_SYMBOL (WM_USER+0xD2) /* 폼이미지정보 변경 */
  113. #define WM_MASTER_IMAGE_TRAFFIC (WM_USER+0xD3) /* 폼이미지소통정보 변경 */
  114. #define WM_MASTER_VMS_IFSC (WM_USER+0xD4) /* VMS IFSC 정보 변경 */
  115. #define WM_DATA_SAVE (WM_USER+0xA8) /* 데이터 저장 */
  116. #define WM_GET_ONOFF (WM_USER+0xA9) /* VMS ON/OFF */
  117. #define WM_PROVIDE_PROC (WM_USER+0xAA) /* VMS 교통정보 */
  118. #define WM_PROVIDE_SAVE (WM_USER+0xAB) /* VMS 제공정보 저장 */
  119. #define WM_MAKE_DOWNLOAD_FORM (WM_USER+0xAD) /* VMS 다운로드폼 생성 */
  120. #define WM_SAVE_DOWNLOAD_FORM (WM_USER+0xAE) /* VMS 다운로드폼 저장 */
  121. /*
  122. ******************************************************************************
  123. * User Define
  124. ******************************************************************************
  125. */
  126. typedef struct tagThreadInfo
  127. {
  128. TThread *pThread;
  129. DWORD dwThreadId;
  130. unsigned int nHandle;
  131. bool bRunning;
  132. public:
  133. void Clear()
  134. {
  135. pThread = NULL;
  136. dwThreadId = 0;
  137. nHandle = 0;
  138. bRunning = false;
  139. }
  140. } THREAD_INFO;
  141. //---------------------------------------------------------------------------
  142. typedef struct tagDatabaseInfo
  143. {
  144. String sProvider;
  145. String sServerName;
  146. String sCatalog;
  147. String sUserName;
  148. String sPassword;
  149. String sConnectStr;
  150. public:
  151. void Clear()
  152. {
  153. sProvider = "";
  154. sServerName = "";
  155. sCatalog = "";
  156. sUserName = "";
  157. sPassword = "";
  158. sConnectStr = "";
  159. }
  160. void MakeConnString()
  161. {
  162. sConnectStr = "";
  163. sConnectStr += "Provider=" + sProvider;
  164. sConnectStr += ";Password=" + sPassword;
  165. sConnectStr += ";Persist Security Info=True";
  166. sConnectStr += ";User ID=" + sUserName;
  167. if (sCatalog != "")
  168. {
  169. sConnectStr += ";Initial Catalog=" + sCatalog;
  170. }
  171. sConnectStr += ";Data Source=" + sServerName;
  172. }
  173. } DATABASE_INFO;
  174. typedef enum _e_log_target
  175. {
  176. log_sys,
  177. log_com,
  178. log_stop,
  179. } e_log_taraget;
  180. typedef enum _e_log_from
  181. {
  182. from_main,
  183. from_dbms,
  184. from_srvTcp,
  185. from_cliTcp,
  186. } e_log_from;
  187. typedef struct tagIpcLogMessage
  188. {
  189. int From;
  190. int Target;
  191. int Kind;
  192. int Flag;
  193. bool Write;
  194. TDateTime Tm;
  195. char Type;
  196. void *Obj;
  197. void *Ctlr;
  198. char Msg[MAX_LOG_BUFFER];
  199. int Len;
  200. } IPC_LOG_MESSAGE;
  201. typedef enum _e_dbm_command
  202. {
  203. dbm_job_start, // 0
  204. dbm_status, // 1
  205. dbm_initialize, // 2
  206. dbm_save_unit_stts, // 3
  207. dbm_save_unit_stts_hs, // 4
  208. dbm_save_ctlr_stts, // 5
  209. dbm_save_ctlr_stts_all, // 6
  210. dbm_save_ctlr_stts_hs, // 7
  211. dbm_dnld_form_cycle, // 8
  212. dbm_dnld_form_mode, // 9
  213. dbm_load_onoff_time, // 10
  214. dbm_load_download_job, // 11
  215. dbm_save_form_download, // 12
  216. dbm_provide_result, // 13
  217. dbm_parma_res, // 14
  218. dbm_master_symbol_image, // 15
  219. dbm_master_symbol_traffic, // 16
  220. dbm_master_form, // 17
  221. dbm_master_vms_ifsc, // 18
  222. dbm_check_db_alive, // 19
  223. dbm_dnld_form_init, // 20
  224. dbm_job_write_start,
  225. } e_dbm_command;
  226. //---------------------------------------------------------------------------
  227. #define MAX_VMS_PROVIDE_RESULT 100
  228. typedef enum _e_vms_provide_result
  229. {
  230. provide_form,
  231. provide_download,
  232. param_res,
  233. } e_vms_provide_result;
  234. //---------------------------------------------------------------------------
  235. typedef struct tagVmsProvideRes
  236. {
  237. BYTE Type; /* 저장유형 */
  238. BYTE Count; /* 정보 갯수 */
  239. void *pObj[MAX_VMS_PROVIDE_RESULT];
  240. } VMS_PROVIDE_RESULE;
  241. //---------------------------------------------------------------------------
  242. typedef struct tagCtlrStts
  243. {
  244. int Type;
  245. void *ObjPtr;
  246. } CTLR_STTS;
  247. //---------------------------------------------------------------------------
  248. typedef struct tagIpcDbmMessage
  249. {
  250. e_dbm_command Command;
  251. int Size;
  252. union
  253. {
  254. char Data[1020];
  255. VMS_PROVIDE_RESULE provide;
  256. CTLR_STTS ctlr_stts;
  257. } U;
  258. } IPC_DBM_MESSAGE;
  259. //---------------------------------------------------------------------------
  260. typedef struct tagCommConfig
  261. {
  262. int nCenterPort; // center udp port
  263. short nListenPort; // vms listen port
  264. AnsiString sLocalDomain; // vms server domain
  265. int nClientPort; // vms controller connect port
  266. AnsiString sLoginUser; // vms controller login id
  267. int nConnectWait;
  268. int nCmdTimeOut;
  269. int nWatchDogTime;
  270. int nPollingTime;
  271. void Clear()
  272. {
  273. }
  274. } COMM_CONFIG;
  275. //---------------------------------------------------------------------------
  276. #define Q_CLOSE 0xFFFFFFFE
  277. #define Q_TICK 0xFFFFFFFF
  278. #define MAX_TCP_BUFF SESSION_SEND_BUFFER
  279. typedef enum _e_tcp_msg
  280. {
  281. eTcpConnect,
  282. eTcpClose,
  283. eTcpRecv,
  284. eTcpSend,
  285. eTcpErrorEvent,
  286. eTcpErrorRecv,
  287. eTcpErrorSend,
  288. eTcpSchedule,
  289. eTcpCloseAll,
  290. // VMS 제어 메시지
  291. eVmsStatusReq,
  292. eVmsPowerModuleStautsReq,
  293. eVmsDisplayModuleStatusReq,
  294. eVmsParamReq,
  295. eVmsPixelImage,
  296. eVmsUploadCurrentForm,
  297. eVmsDispalyDefaultForm,
  298. eVmsUploadScheduleForm,
  299. eVmsDisplayFormId,
  300. eVmsStatusControl,
  301. eVmsFormDownload,
  302. eVmsFtpFileDownload,
  303. eVmsScenarioDownload,
  304. eVmsScenarioContinue,
  305. eVmsDownloadSchedule,
  306. eVmsBlank,
  307. eVmsSendPacket,
  308. eVmsStatusReqAll,
  309. #if 1
  310. eVmsLedPowerControl,
  311. eVmsFanPowerControl,
  312. eVmsBrghSet,
  313. eVmsConfigSet,
  314. eVmsTimeControl,
  315. eVmsReset,
  316. #endif
  317. } e_tcp_msg;
  318. typedef struct _ipc_job_message
  319. {
  320. int Type;
  321. DWORD ObjPtr;
  322. int Len;
  323. char Buff[MAX_TCP_BUFF];
  324. } IPC_JOB_MESSAGE;
  325. typedef struct tagAppConfig
  326. {
  327. String sConfigFile;
  328. bool bAppClose;
  329. bool bAppLoad;
  330. bool bThrExit;
  331. bool bThrJobExit;
  332. HANDLE hFinishEvent;
  333. String sTitle;
  334. long lMainWinHandle; /* Main Window Handle */
  335. AnsiString sProcessId; /* Process ID */
  336. int nProcessId;
  337. int nProcessPort;
  338. AnsiString sSystemId; /* System ID */
  339. AnsiString sLogDay;
  340. int nTrafficCycleTime;
  341. int nTrafficBasisTime;
  342. int nSaveFormType;
  343. int nDefaultFillColor;
  344. int nMaxLogLines;
  345. int MaxMemory; /* Max Memory size Mbyte */
  346. int MaxHandle; /* Max Handle count */
  347. int MaxThread; /* Max Thread count */
  348. int MaxGdi; /* Max Gdi count */
  349. bool RcRestart; /* 리소스 오류시 재기동 여부 */
  350. bool DownloadBitmap;
  351. //THREAD_INFO thrDb; /* DB Thread */
  352. DATABASE_INFO db;
  353. COMM_CONFIG comm;
  354. bool IsDbConnectPerJob;
  355. bool IsIpChecking;
  356. int BottomTrafficCycle;
  357. int BottomTrafficMaxCnt;
  358. bool BottomTrafficCenter;
  359. int CngsContCnt;
  360. bool TextTrafficCenter;
  361. bool IsImageSeqSave;
  362. bool IsCheckNewForm;
  363. int PixelValue;
  364. TPixelFormat PixelFormat;
  365. int DbDelayTick;
  366. public:
  367. void Clear()
  368. {
  369. bThrExit = false;
  370. bAppClose = false;
  371. bAppLoad = false;
  372. sTitle = "";
  373. lMainWinHandle = 0;
  374. sProcessId = "";
  375. sLogDay = "";
  376. MaxMemory = 0;
  377. MaxHandle = 0;
  378. MaxThread = 0;
  379. MaxGdi = 0;
  380. //thrDb.Clear();
  381. db.Clear();
  382. comm.Clear();
  383. }
  384. } APP_CONFIG;
  385. typedef struct tagGradeText
  386. {
  387. AnsiString GRADE0;
  388. AnsiString GRADE1;
  389. AnsiString GRADE2;
  390. AnsiString GRADE3;
  391. } GRADE_TEXT;
  392. typedef struct tagParkingText
  393. {
  394. AnsiString GRADE0;
  395. AnsiString GRADE1;
  396. AnsiString GRADE2;
  397. AnsiString GRADE3;
  398. } PARKING_TEXT;
  399. // system informations
  400. typedef struct tagSystemInformation
  401. {
  402. BYTE RunSts; /* 동작 상태 */
  403. BYTE ComSts; /* 통신 상태 */
  404. BYTE DbmSts; /* DB 상태 */
  405. HANDLE hFinishEvent; /* finish event */
  406. DWORD DbmThreadID; /* DB 데이터 처리 스레드 ID */
  407. DWORD LogThreadID; /* LOG 데이터 처리 스레드 ID */
  408. } SYSTEM_INFORMATION;
  409. //---------------------------------------------------------------------------
  410. /*
  411. ******************************************************************************
  412. * Global variable definitions
  413. ******************************************************************************
  414. */
  415. extern SYSTEM_INFORMATION *g_SysInfo;
  416. extern bool LOAD_DB;
  417. extern APP_CONFIG g_AppCfg;
  418. extern LOG_INFO g_LogCfg;
  419. extern TITSLog *ITSLog;
  420. extern TItsNetQ g_logQ;
  421. extern TItsNetQ g_dbmQ;
  422. extern TItsNetQ g_dbmReadQ;
  423. extern TItsNetQ g_jobQ;
  424. #define MAX_LOGQ_BUFF 256
  425. #define MAX_DBMQ_BUFF 256
  426. #define MAX_JOBQ_BUFF 512
  427. extern TItsQBuff<IPC_LOG_MESSAGE, MAX_LOGQ_BUFF> g_logBuff;
  428. extern TItsQBuff<IPC_DBM_MESSAGE, MAX_DBMQ_BUFF> g_dbmBuff;
  429. extern TItsQBuff<IPC_DBM_MESSAGE, MAX_DBMQ_BUFF> g_dbmReadBuff;
  430. extern TItsQBuff<IPC_JOB_MESSAGE, MAX_JOBQ_BUFF> g_jobBuff;
  431. extern String g_sAppDir ; // Application Directory
  432. extern String g_sAppName; // Program name
  433. extern String g_sCfgDir ; // Program Config Directory
  434. extern String g_sLogDir ; // Program Log Directory
  435. extern String g_sTempDir; // Program Temp Directory
  436. extern String g_sImgDir; // Program Image Directory
  437. #define FTP_FORM "FORM"
  438. #define FTP_VIDEO "VIDEO"
  439. #define FTP_STATIC "STATIC"
  440. #define FTP_IMAGE "IMAGE"
  441. extern String g_sFtpHomeDir ; // FTP Home Directory
  442. extern String g_sFtpFormDir ; // FTP Form Directory
  443. extern String g_sFtpVideoDir; // FTP Video Directory
  444. extern String g_sFtpStaticDir; // FTP 정적폼 Directory
  445. extern String g_sFtpImageDir; // FTP Image Directory
  446. extern GRADE_TEXT FIGURE;
  447. extern GRADE_TEXT TEXT;
  448. extern PARKING_TEXT PARKING;
  449. /*
  450. ******************************************************************************
  451. * Global function definitios
  452. ******************************************************************************
  453. */
  454. int APP_LogWrite(void *ALogObj, int ALogKind, int ATarget, int AFrom, char *AFmt, ...);
  455. int APP_PostDbThreadWriteMessage(e_dbm_command ACommand, int ASize=0, void *AData=NULL);
  456. int APP_PostDbThreadReadMessage(e_dbm_command ACommand, int ASize=0, void *AData=NULL);
  457. AnsiString __fastcall APP_GetDbJobName(int nCommand);
  458. #endif