VMSCommLibF.h 16 KB

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