VMSCommLibF.h 15 KB

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