123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using System.Threading;
- using System.Diagnostics;
- using Microsoft.Win32;
- using System.IO;
- namespace FPER
- {
- //
- // 진입점 및 공용 이벤트, Enum 선언
- //
- static class Program
- {
- /// <summary>
- /// 해당 응용 프로그램의 주 진입점입니다.
- /// </summary>
- [STAThread]
- static void Main()
- {
- // cyim 2013.10.11 : 데이타베이스 동작 가능 상태 확인
- if (Process_Excute("fbserver") == false || Process_Excute("fbguard") == false)
- {
- MessageBox.Show("Fire Bird 데이타베이스가 실행되지 않았습니다. 프로그램을 종료합니다.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- // cyim 2015.7.29 수신반 모드
- // ini 파일을 열어서 수신반이 될지 수신기가 될지 알아본다
- // 만약 ini 파일이 없다면 기본적으로 수신기 모드로 동작한다
- // 0 : 수신기, 1 : 수신반
- string mode = _Ini.Read_Ini("PROGRAM", "MODE", 1024, Environment.CurrentDirectory + "\\Config.ini");
- // cyim 2016.12.26 : UI 이탈방지 코드 추가 (후킹)
- _Data.Hook_Enable = _Ini.Read_Ini("PROGRAM", "HOOK_ENABLE", 1024, Environment.CurrentDirectory + "\\Config.ini");
- if (mode == "1")
- {
- // cyim 2015.7.29 수신반 모드
- _Data.FireDeskMode = true;
- // 현장명
- _Data.Site_Name = _Ini.Read_Ini("PROGRAM", "SITE_NAME", 1024, Environment.CurrentDirectory + "\\Config.ini");
- // cyim 2016.12.20 : 푸시메세지 연동 기능 추가
- _Data.MOBILE_ENABLE = _Ini.Read_Ini("PROGRAM", "MOBILE_ENABLE", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_ENABLE = _Ini.Read_Ini("PROGRAM", "GCM_ENABLE", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_API_KEY = _Ini.Read_Ini("PROGRAM", "GCM_API_KEY", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_TEST_MODE = _Ini.Read_Ini("PROGRAM", "GCM_TEST_MODE", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_INFO_FIRE = _Ini.Read_Ini("PROGRAM", "GCM_INFO_FIRE", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_INFO_FACILITY = _Ini.Read_Ini("PROGRAM", "GCM_INFO_FACILITY", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_INFO_COMERROR = _Ini.Read_Ini("PROGRAM", "GCM_INFO_COMERROR", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_INFO_BLOCK = _Ini.Read_Ini("PROGRAM", "GCM_INFO_BLOCK", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_INFO_CUT = _Ini.Read_Ini("PROGRAM", "GCM_INFO_CUT", 1024, Environment.CurrentDirectory + "\\Config.ini");
- _Data.GCM_INFO_CHECK = _Ini.Read_Ini("PROGRAM", "GCM_INFO_CHECK", 1024, Environment.CurrentDirectory + "\\Config.ini");
- // cyim 2015.9.30 수신반은 ini 파일을 이용해서 데이타베이스 접속
- string Temp_DATABASE_NAME = _Ini.Read_Ini("PROGRAM", "DATABASE_NAME", 1024, Environment.CurrentDirectory + "\\Config.ini");//rk.GetValue("DATABASE_NAME").ToString();
- _Data.Registry_DATABASE_NAME = Temp_DATABASE_NAME;
- _Data.Registry_DATABASE_NAME_IP = Temp_DATABASE_NAME.Substring(0, Temp_DATABASE_NAME.IndexOf(":"));
- _Data.Registry_DATABASE_NAME_PATH = Temp_DATABASE_NAME.Substring(Temp_DATABASE_NAME.IndexOf(":") + 1);
- }
- else
- {
- //
- // cyim 2015.7.29 수신반 루틴을 위해 외부 파라미터로 동작하도록 수정
- //
- // 레지스트리 값 읽기
- RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\I_FPER_COMM_DAEMON", false);
- if (rk == null)
- {
- MessageBox.Show("레지스트리 읽기 실패!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- else
- {
- // 수신기 아이디
- _Data.Registry_ReceiverID = Convert.ToInt16(rk.GetValue("RECEIVER_ID").ToString());
- // 데이타베이스 정보
- string Temp_DATABASE_NAME = rk.GetValue("DATABASE_NAME").ToString();
- _Data.Registry_DATABASE_NAME = Temp_DATABASE_NAME;
- _Data.Registry_DATABASE_NAME_IP = Temp_DATABASE_NAME.Substring(0, Temp_DATABASE_NAME.IndexOf(":"));
- _Data.Registry_DATABASE_NAME_PATH = Temp_DATABASE_NAME.Substring(Temp_DATABASE_NAME.IndexOf(":") + 1);
- // 모니터데몬 정보
- try
- {
- _Data.Registry_MonitorDaemon_Enable = (rk.GetValue("MAIN_MONITOR_ACTIVE").ToString() == "1") ? true : false;
- _Data.Registry_MonitorDaemon_IP = rk.GetValue("MAIN_MONITOR_SERVER_IP").ToString();
- }
- catch
- {
- // cyim 2015.8.18 레지스트리값 읽기 실패하면 기본값을 강제로 셋팅
- // 모니터 데몬 정보가 현장에서 주로 셋팅할때 레지스트리값이 없으므로 보완한다
- // 단, 기존의 Main Monitor 관련 변수만 셋팅한다
- MessageBox.Show("레지스트리 읽기 실패! 기본값 셋팅 [MAIN_MONITOR_ACTIVE] 합니다. 종료하고 다시 시작해주세요", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
- // 레지스트리에 값을 쓰기
- RegistryKey Set_Rk = Registry.LocalMachine.CreateSubKey("SOFTWARE").CreateSubKey("I_FPER_COMM_DAEMON");
- Set_Rk.SetValue("MAIN_MONITOR_ACTIVE", 0);
- Set_Rk.SetValue("MAIN_MONITOR_SERVER_IP", "192.168.0.1");
- Set_Rk.SetValue("MAIN_MONITOR_SERVER_PORT", 9003);
- Set_Rk.SetValue("MAIN_MONITOR_SERVER_PROCESS_DELAY", 5000);
- Set_Rk.SetValue("MAIN_MONITOR_SERVER_READ_TIMEOUT", 30000);
- return;
- }
- //
- // 중요사항
- //
- // 네트워크 수신기에서 수신기아이디가 2인경우에도 Receiver1 폴더로 접근하도록 되어있다
- // 폴더명과 ODBC 를 바꿔서 설정해야하는 불편함이 있다. 또한 런쳐가 실행되는 경로가 틀려져서 윈도우 부팅후 시작할수가 없다
- // 결국 무조건 수신기 아이디와는 상관없이 폴더명은 Receiver1로 고정되므로 주의해야한다
- // 프로젝트 정보
- _Data.Registry_Project_Directory = rk.GetValue("PROJECT_DIR").ToString();
- }
- }
- //
- // MUTEX 처리
- //
- bool createdNew;
- Mutex dup = new Mutex(true, "__FIRE_UI_MUTEX__", out createdNew);
- if (createdNew)
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- switch (mode)
- {
- // 수신반
- case "1":
- Application.Run(new FireDesk_BigReceiver());
- break;
- // 수신기
- default:
- Application.AddMessageFilter(new AltF4Filter()); // Add a message filter
- Application.Run(new MDIParent(_Data.Registry_ReceiverID, null)); // cyim 2015.7.29 수신반 모드: 평상시에는 레지스트리값으로 아이디를 알아낸다 // cyim 2015.8.4 수신반을 위한 static 클래스 정리
- break;
- }
- dup.ReleaseMutex();
- }
- else
- {
- //MessageBox.Show("Already Program is Running!");// cyim 2015.2.11 중복방지 알림팝업창 제거
- }
- }
- public class AltF4Filter : IMessageFilter
- {
- public bool PreFilterMessage(ref Message m)
- {
- const int WM_SYSKEYDOWN = 0x0104;
- if (m.Msg == WM_SYSKEYDOWN)
- {
- bool alt = ((int)m.LParam & 0x20000000) != 0;
- if (alt && (m.WParam == new IntPtr((int)Keys.F4)))
- Console.WriteLine("ALT+F4 Filtering됨.");
- return true; // eat it!
- }
- return false;
- }
- }
- // 프로세스 실행여부
- public static bool Process_Excute(string ProcessName)
- {
- bool result = false;
- Process[] mProcess = Process.GetProcessesByName(ProcessName);
- if (mProcess.Length == 0) result = false;
- else result = true;
- return result;
- }
- }
- //
- //화면 인터페이스 모드 (GroupUIChange 함수의 인자값)
- //
- public enum UIMode
- {
- input, // 입력 및 수정
- cancel // 보기
- }
- //
- //DATABASE 작업 모드
- //
- public enum QUERYMode
- {
- select, insert, update, delete, InsertAndUpdate
- }
- //
- //TB_COMM의 COMM_LOOP 필드 상수 (고정된값)
- //
- public enum COMMLOOP
- {
- FrontLoop = 1,
- BackLoop = 2, // 사용안함
- IO = 3,
- KEYPAD = 4,
- BroadCast = 5 // 비상방송 5 // cyim 2013.7.10 디자인개선작업 : 수신기설정
- }
- //
- // 명령응답을 처리하는 이벤트선언
- //
- public delegate void dCommandResponse(CmdInfo d);
- //
- // 화면전환을 처리하는 이벤트선언 (예 : 화재발생시)
- //
- public delegate void dCommandFuctionCall(int id);
- //
- // 팝업 우선순위 (낮을수록 높은 등급)
- //
- public enum MappingStatus
- {//2010.10.29,k.s.d, pop up message level chnage.
- FireOn = 0,
- AccumulateOn = 1,
- WriteOn = 2,
- FaultOn = 16,//3, //2011.04.06,k.s.d, pop up message level chnage.
- PhoneOn = 4,
- CommConnectError = 5,
- FireOff = 6,
- WriteOff = 7,
- FaultOff = 17,//8, //2011.04.06,k.s.d, pop up message level chnage.
- FireRecovery = 9,
- AccumulateOff = 10,
- PhoneOff = 11,
- Normal = 12,
- CommConnectNormal = 13,
- ProgramStart = 14,
- ProgramEnd = 15,
- Log = 16, // cyim 2015.2.10 LOG
- DemonInit = 18,// add init message
- }
- //
- // 회로 타입
- //
- /* 'I' : 입력,'O' : 출력 */
- public struct code_InOutType
- {
- public const String Input = "I";
- public const String Output = "O";
- }
- //
- // 미사용
- //
- /* 'G':그룹, 'D':DEVICE */
- public struct code_processType
- {
- public const String Group = "G";
- public const String Device = "D";
- }
- //
- // 필터링 조건 // cyim 2013.10.2 : 발생위치 필터링 기능 추가
- //
- public enum DB_Result_Filter
- {
- None, // 필터링 조건 사용안함
- Device, // 디바이스명만
- Positon, // 발생위치만
- AND // 교집합
- }
- }
|