VMSCommLibF.h 17 KB

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