| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878 | using System;using System.Collections.Generic;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;/// 시스템 구조 Ver2012-07-20////// 원래는 레지스트리에 있는 정보를 가지고 접근해야되지만 지금은 우선 프로그램안의 xml 파일에서 정보를 읽어와서 시스템을 구성한다/// 주의할 점은 실행하는 프로그램 경로와 저장하고 열기하는 프로젝트의 경로를 따로 관리하게 되므로 아래를 참조바람/// /// Program_Configuration.xml (옵션이므로 향후 제거될 수 있다)/// => 맨처음 프로그램이 실행하는 경우 제일 먼저 기초데이터를 이파일로 불러들인다. 최근 사용한 프로젝트명, 데이타베이스 접속 정보 등이 여기 저장되어있다. /// => 위치는 실행 프로그램 exe 파일과 동일하다/// /// 프로젝트 폴더/// => 메뉴->시스템->환경옵션 메뉴에서 선택한 경로에서 프로젝트 관리하도록 한다. /// => 주의할 점! 프로젝트 폴더안에 DB 폴더 안에는 미리 데이타베이스를 복사해야 한다. 차후에는 데이타베이스를 직접 생성할수 있도록 구현해야된다 (현재는 데이타베이스 읽기만 가능하므로)/// => 결국 반드시 프로그램 실행 전에 모든 프로젝트가 데이타베이스에 저장 완료되어 있다는 가정하에서 프로그램이 구동된다////// 수신기 아이디/// => 수신기 아이디는 1로서 각각 데이타베이스에 저장된다 (전제이다. 데이타베이스에 1이 아닌 다른 값이 들어가지는 않는다)/// => UI에 표시될 수신기 아이디는 각각 숫자로 1씩 증가하여 관리된다/// => 수신기 아이디에 따라 접근하는 데이타베이스 폴더는 달라지므로 폴더 패스로 수신기를 관리한다namespace IControls_FireManager{    public partial class IControls_FireManager : Form    {        // 타이머 카운트 (종료없이 항상 타이머가 동작)        public int timer_MainConfig_Cnt = 0;        // 프로젝트 새로만들기 여부 대화 팝업창         public Form Popup_NewProjectInform = new Form();        // XML 파일 및 데이타베이스 저장 여부 대화 팝업창        public Form Popup_NotSaveXmlDBInform = new Form();        // XML 및 DB 저장 직전 상태        public XMLDB_BEFORE_STATUS Popup_NotSaveXmlDBInform_Status;        // 프로젝트 저장 여부 대화 팝업창         public Form Popup_SaveProjectInform = new Form();        // 수신기 전체 삭제 여부 대화 팝업창         public Form Popup_ReceiverAllDelInform = new Form();        // 프로젝트 저장을 위한 페이지 저장을 위한 수신기 아이디 리스트 (처음시작시 수신기 아이디가 모두 저장되어 있다가 저장 완료마다 해당 수신기 정보가 삭제됩니다)        public ArrayList List_PageSaved_By_ReceiverID = new ArrayList();        // 프로젝트 저장시에 수신기별로 페이지 저장을 하기 위해 한번만 실행하도록 함        public bool Project_Save_ReceiverOnceExecute = false;        // 프로젝트 저장 중 팝업        public Form ProjectSavingPopup = new Form();        public Form ProjectSavinEtcgPopup = new Form();        // 메인        public IControls_FireManager()        {            // 디자이너 초기화            InitializeComponent();            // 데이타 초기화            Initialize_Data();            // 디버그뷰 프레임 초기화             Initialize_Frame_DebugView();            // 트리뷰 프레임 초기화            Initialize_Frame_TreeView();            // 워크뷰 프레임 초기화            Initialize_Frame_WorkView();            // 개발자가 아니면 디버깅창이 필요없다            this.uiPanel_DebugView.Closed = true;            // 디버깅창이 없다면 창 사이즈도 고정되지 않도록 하고, 줄인다            this.Size = new Size(1662, 858);//1608, 1028        }        // 디바이스 트리뷰 초기화        public void Initialize_Frame_TreeView()        {            Frame_Tree Frame = new Frame_Tree();            _Frame.Create(this.uiPanel_TreeViewContainer, Frame);        }        // 디바이스 워크뷰 초기화        public void Initialize_Frame_WorkView()        {            Frame_Work Frame = new Frame_Work();            _Frame.Create(this.uiPanel_WorkViewContainer, Frame);        }        // 디버그뷰 프레임 초기화        public void Initialize_Frame_DebugView()        {            Frame_Debug Frame = new Frame_Debug();            _Frame.Create(this.uiPanel_DebugViewContainer, Frame);        }        // 데이타 초기화        public void Initialize_Data()        {            ///            /// 폴더 생성 (강제로 폴더 생성 - 차후 삭제할수도있다. 사용자가 환경 옵션 지정시 폴더만 생성하는 역할만 한다)            ///             _File.Create_Folder("C:\\", "IControls_FireManager");            ///            /// 설정 파일 로드            ///            if (_File.Read_ProgramConfiguration() == false)            {                _Popup.MessageBoxPopup(0, _Text.GetDamagedConfigFile, _Text.OK);            }            ///            /// 프로젝트 생성 위치, 즉 프로젝트 경로가 없다면 기본값으로 대체함.            ///            if (_Data.Project_Path.Length == 0) _Data.Project_Path = _File.ProgramPath;            ///            /// 타이머 시작 (폼이름으로 타이머 이름을 생성함)            ///            _Timer_WindowBase.Create(null, 1000, timer_MainConfig_Tick, true);            ///            /// 상태바 표시            ///            Update_StatusBar();            ///            /// 이벤트            ///             // 폼닫기 이벤트 핸들러 등록 (이벤트 핸들러 해제용)            this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);            // 프로젝트 저장기능중 페이지 저장이 완료되었음을 알리는 이벤트 핸들러 등록            _Event.Receiver_PageSaveComplete_SendMessage_Event += new _Event.Receiver_PageSaveComplete_SendMessage_Handler(_Event_Receiver_PageSaveComplete_SendMessage_Event);            // 화면 최대화 명령 (TreeView Form -> Main Form) 이벤트 핸들러 등록            _Event.Windows_MaxSize_SendMessage_Event += new _Event.Windows_MaxSize_SendMessage_Handler(_Event_Windows_MaxSize_SendMessage_Event);            ///            /// 스타일             ///             UI_Style_Initialize();        }        // 폼닫기        public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)        {            // XML 및 DB 저장되지 않은 수신기가 존재한다면            if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)            {                // 이벤트 해제                e.Cancel = true;                // XML 파일 및 데이타베이스 저장 여부                Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);                // 대화 팝업은 특별처리                _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);                // 프로그램 종료 직전                Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROGRAM_END;            }            else            {                // 종료시 잔상이 남는 문제                this.Hide();            }        }        ///        /// 스타일        ///        // 스타일 초기화 함수        private void UI_Style_Initialize()        {            // 스타일 적용            this.uiPanelManager.VisualStyle = _Data.Style_PanelVisualStyle;            this.uiCommandManager.VisualStyle = _Data.Style_VisualStyle;            this.MainBar.VisualStyle = _Data.Style_VisualStyle;            this.IconBar_1.VisualStyle = _Data.Style_VisualStyle;            this.TopRebar.VisualStyle = _Data.Style_VisualStyle;            this.officeFormAdorner.Office2007ColorScheme = _Data.Style_Office2007ColorScheme;        }        // 스타일 변경 함수        private void UI_Style_Change(            Janus.Windows.UI.Dock.PanelVisualStyle PanelVisualStyle,            Janus.Windows.UI.VisualStyle VisualStyle,            Janus.Windows.Ribbon.Office2007ColorScheme Office2007ColorScheme)        {            // 스타일 변수 저장            _Data.Style_PanelVisualStyle = PanelVisualStyle;            _Data.Style_VisualStyle = VisualStyle;            _Data.Style_Office2007ColorScheme = Office2007ColorScheme;            // 스타일 적용            UI_Style_Initialize();            // 체크 상태 초기화 (메뉴에서 선택한 체크 모두 해제)            UI_Style_CheckStatusClear();            // 다른폼에 알림            _Event.WindowStyleSet_SendMessage_Write();            // 파일에 저장            _File.Write_ProgramConfiguration();        }        // 스타일 변경 체크 상태 초기화        private void UI_Style_CheckStatusClear()        {            this.Menu_Style_Office2007.IsChecked = false;            this.Menu_Style_Office2003.IsChecked = false;            this.Menu_Style_VS2005.IsChecked = false;            this.Menu_Style_Standard.IsChecked = false;        }        ///        /// 이벤트        ///        // 윈도우 최대화        private void _Event_Windows_MaxSize_SendMessage_Event()        {            this.WindowState = FormWindowState.Maximized;        }        // 메인 메뉴바에서 클릭시        private void MainBar_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)        {            switch (e.Command.Key)            {                ///                /// 메뉴 -> 시스템                ///                case "Menu_System_ConfigOption":                    // 시스템 환경 옵션					                    Form_System_Config System_Config = new Form_System_Config();                    _Form.Create(System_Config, null);// this.uiCommandManager.Commands[e.Command.Key]);                    break;                case "Menu_System_End":                    Program_End();                    break;                ///                /// 메뉴 -> 프로젝트                 ///                case "Menu_Project_New":                    Project_New();                    break;                case "Menu_Project_Open":                    Project_Open();                    break;                case "Menu_Project_Del":                    Project_Del();                    break;                case "Menu_Project_Save":                    Project_Save();                    break;                ///                /// 메뉴 -> 수신기                 ///                case "Menu_Receiver_Add":                    // 프로젝트가 존재하는 경우에만                    if (_Data.Project_Name != null)                    {                        Form_Receiver_Add Receiver_Add = new Form_Receiver_Add(_Data.CREATE_RECEIVER_ID());                        _Form.Create(Receiver_Add, null);                    }                    else                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotSelectProjectInform, 0);                    break;                case "Menu_Receiver_Del":                    // 프로젝트가 존재하는 경우에만                    if (_Data.Project_Name == null)                    {                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotSelectProjectInform, 0);                    }                    // 수신기가 존재하는 경우에만                     else if (_Data.LIST_RECEIVER_ID.Count == 0)                    {                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotReceiver, 0);                    }                    else                    {                        Popup_ReceiverAllDelInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.AllDelete_Continue, 0);                        // 대화 팝업은 특별처리                        _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverAllDel_PopupClose_SendMessage_Event);                    }                    break;                ///                /// 메뉴 -> 보기                ///                case "Menu_View_Status":                    this.StatusBar.Visible = !(this.StatusBar.Visible);                    break;                case "Menu_View_Debug":                    this.uiPanel_DebugView.Closed = !(this.uiPanel_DebugView.Closed);                    break;                ///                /// 메뉴 -> 도움말                ///                case "Menu_Help_Helper":                    Form__Sample Temp_Sample = new Form__Sample();                    _Form.Create(Temp_Sample, null);// this.uiCommandManager.Commands[e.Command.Key]);                                        break;                case "Menu_Help_MAP":                    break;                ///                /// 메뉴 -> 스타일 (현재 비활성화)                ///                case "Menu_Style_Office2007":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2007, Janus.Windows.UI.VisualStyle.Office2007, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);                    // 체크                                        this.Menu_Style_Office2007.IsChecked = true;                    break;                case "Menu_Style_Office2003":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2003, Janus.Windows.UI.VisualStyle.Office2003, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);                    // 체크                    this.Menu_Style_Office2003.IsChecked = true;                    break;                case "Menu_Style_VS2005":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.VS2005, Janus.Windows.UI.VisualStyle.VS2005, Janus.Windows.Ribbon.Office2007ColorScheme.Black);                    // 체크                    this.Menu_Style_VS2005.IsChecked = true;                    break;                case "Menu_Style_Standard":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Standard, Janus.Windows.UI.VisualStyle.Standard, Janus.Windows.Ribbon.Office2007ColorScheme.Black);                    // 체크                                        this.Menu_Style_Standard.IsChecked = true;                    break;            }        }        ///        /// 아이콘바 스타일        ///         private void IconBar_2_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)        {            switch (e.Command.Key)            {                ///                /// 메뉴 -> 스타일                ///                case "Icon_Office2007":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2007, Janus.Windows.UI.VisualStyle.Office2007, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);                    // 체크                                        this.Menu_Style_Office2007.IsChecked = true;                    break;                case "Icon_Office2003":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Office2003, Janus.Windows.UI.VisualStyle.Office2003, Janus.Windows.Ribbon.Office2007ColorScheme.Blue);                    // 체크                    this.Menu_Style_Office2003.IsChecked = true;                    break;                case "Icon_VS2005":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.VS2005, Janus.Windows.UI.VisualStyle.VS2005, Janus.Windows.Ribbon.Office2007ColorScheme.Black);                    // 체크                    this.Menu_Style_VS2005.IsChecked = true;                    break;                case "Icon_Standard":                    // 변경                    UI_Style_Change(Janus.Windows.UI.Dock.PanelVisualStyle.Standard, Janus.Windows.UI.VisualStyle.Standard, Janus.Windows.Ribbon.Office2007ColorScheme.Black);                    // 체크                                        this.Menu_Style_Standard.IsChecked = true;                    break;            }        }        ///        /// 타이머        ///        // 초당 호출        private void timer_MainConfig_Tick(object sender, EventArgs e)        {            // 반드시 타이머는 사용후 종료해야한다            // 타이머를 종료하려면 아래의 주석코드를 제거한다            // _Timer_WindowBase.Delete((string)((System.Windows.Forms.Timer)sender).Tag);            // 타이머 카운트 갱신            timer_MainConfig_Cnt++;            // 타이머 카운트 초기화 (2초 갱신)            if (timer_MainConfig_Cnt > 2)            {                // 초기화                timer_MainConfig_Cnt = 0;                ///                /// 상태바 표시                ///                Update_StatusBar();                //                // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                //                 this.Text = "IControls_FireManager Ver3.1" + "      현재 출력그룹 혹은 맵연동 아이디는 " + _Data.Project_MapGroupIDTypeNumber + " 자리로 셋팅되어 있습니다";            }            // 시간정보 갱신            this.Status_Time.Text = _Text.Blank + _Text.UI_STATUSBAR_PROGRAM_TIME + _Text.Blank + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");        }        // 상태바 갱신        private void Update_StatusBar()        {            // 프로젝트 명            this.Status_ProjectName.Text = _Text.Blank + _Text.UI_STATUSBAR_PROJECT_NAME + _Text.Blank + _Data.Project_Name;            // 프로젝트 패스            this.Status_ProjectPath.Text = _Text.Blank + _Text.UI_STATUSBAR_PROJECT_PATH + _Text.Blank + _Data.Project_Path;            // 현재 데이타베이스 경로            this.Status_DatabasePath.Text = _Text.Blank + _Text.UI_STATUSBAR_DATABASE_PATH + _Text.Blank + _Data.DB_FullPath;            // 프로그램 버전            this.Status_ProgramVersion.Text = _Text.Blank + _Text.UI_STATUSBAR_PROGRAM_VERSION + _Text.Blank + _Data.Program_Version;        }        // 프로그램 종료        private void Program_End()        {            // XML 및 DB 저장되지 않은 수신기가 존재한다면            if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)            {                // XML 파일 및 데이타베이스 저장 여부                Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);                // 대화 팝업은 특별처리                _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);                // 프로그램 종료 직전                Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROGRAM_END;            }            else            {                this.Close();            }        }        ///        /// 프로젝트         ///        // 새로 만들기        private void Project_New()        {            // 프로젝트 새로만들기 여부             Popup_NewProjectInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NewProjectInform, 0);            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_NewProjectInform_SendMessage_Event);        }        // 프로젝트 새로만들기 여부 경고창을 생성하고 난후에 확인 버튼을 누를때 발생하는 이벤트        public void _Event_Popup_NewProjectInform_SendMessage_Event(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            if (Popup_NewProjectInform.Name == popup.Name && etc.ToString() == _Text.OK)            {                // XML 및 DB 저장되지 않은 수신기가 존재한다면                if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)                {                    // XML 파일 및 데이타베이스 저장 여부                    Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);                    // 대화 팝업은 특별처리                    _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);                    // 프로젝트 새로 만들기 직전                    Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROJECT_NEW;                }                else                {                    // 워크뷰 및 트리뷰 에 알림                    _Event.WorkView_Clear_SendMessage_Write();                    _Event.TreeView_Clear_SendMessage_Write(null);                    // 폼 생성                    _Data.MenuActivedForm = new Form_Project_New();                    _Form.Create(_Data.MenuActivedForm, null);                }            }            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_NewProjectInform_SendMessage_Event);        }        // 열기        private void Project_Open()        {            // XML 및 DB 저장되지 않은 수신기가 존재한다면            if (_Data.LIST_XmlDBNotSave_Receiver.Count != 0 || _Data.ProJect_Save_Complete == false)            {                // XML 파일 및 데이타베이스 저장 여부                Popup_NotSaveXmlDBInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.NotSaveProjectConfirm, 0);                // 대화 팝업은 특별처리                _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);                // 프로젝트 열기 직전                Popup_NotSaveXmlDBInform_Status = XMLDB_BEFORE_STATUS.PROJECT_OPEN;            }            else            {                // 열기 폼 생성                _Data.MenuActivedForm = new Form_Project_Open();                _Form.Create(_Data.MenuActivedForm, null);            }        }        // 삭제        private void Project_Del()        {            // 삭제 폼 생성            _Data.MenuActivedForm = new Form_Project_Delete();            _Form.Create(_Data.MenuActivedForm, null);        }        // 저장        private void Project_Save()        {            if (_Data.LIST_XMLRECEIVER_ID.Count == 0 || _Data.HASH_RECEIVER.Count == 0)            {                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotReceiver, 0);            }            else if (_Data.Check_Verify_EVENT_TYPE() == false)            {                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 450, 150, _Text.NothingEventType, 0);            }            else            {                // 프로젝트 저장여부                Popup_SaveProjectInform = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 350, 150, _Text.SaveProject, 0);                // 대화 팝업은 특별처리                _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_Popup_SaveProjectInform_SendMessage_Event);            }        }        // 프로젝트 저장 여부 확인 버튼을 누를때 발생하는 이벤트        public void _Event_Popup_SaveProjectInform_SendMessage_Event(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            if (Popup_SaveProjectInform.Name == popup.Name && etc.ToString() == _Text.OK)            {                // 프로젝트 저장 시작                Project_Save_Start();            }            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_SaveProjectInform_SendMessage_Event);        }        // 폼닫기, 프로젝트 새로열기, 프로젝트 새로만들기 -> 프로젝트 저장 여부 확인 버튼을 누를때 발생하는 이벤트        public void _Event_Popup_PageSaveXmlDB_SendMessage_Event(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            if (Popup_NotSaveXmlDBInform.Name == popup.Name && etc.ToString() == _Text.OK)            {                // 프로젝트를 저장하자                Project_Save_Start();            }            else            {                // 팝업창 직전 상태                switch (Popup_NotSaveXmlDBInform_Status)                {                    case XMLDB_BEFORE_STATUS.PROGRAM_END:                        // 저장되지 않았던 리스트 초기화                        _Data.LIST_XmlDBNotSave_Receiver.Clear();                        // 프로젝트 저장여부 완료로 변경                        _Data.ProJect_Save_Complete = true;                        // 프로그램 종료                        this.Close();                        break;                    case XMLDB_BEFORE_STATUS.PROJECT_NEW:                        // 워크뷰 및 트리뷰 에 알림                        _Event.WorkView_Clear_SendMessage_Write();                        _Event.TreeView_Clear_SendMessage_Write(null);                        // 폼 생성                        _Data.MenuActivedForm = new Form_Project_New();                        _Form.Create(_Data.MenuActivedForm, null);                        break;                    case XMLDB_BEFORE_STATUS.PROJECT_OPEN:                        // 열기 폼 생성                        _Data.MenuActivedForm = new Form_Project_Open();                        _Form.Create(_Data.MenuActivedForm, null);                        break;                }            }            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_Popup_PageSaveXmlDB_SendMessage_Event);        }        // 수신기 전부 삭제 여부 팝업창 이벤트        public void _Event_ReceiverAllDel_PopupClose_SendMessage_Event(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            if (Popup_ReceiverAllDelInform.Name == popup.Name && etc.ToString() == _Text.OK)            {                // 전체 삭제 이벤트 발생                _Event.Receiver_Clear_SendMessage_Write();            }            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_ReceiverAllDel_PopupClose_SendMessage_Event);        }        // 프로젝트 저장을 시작한다        public void Project_Save_Start()        {            // 수신기가 없다면 저장 못함            if (_Data.LIST_XMLRECEIVER_ID.Count == 0)            {                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotReceiver, 0);                return;            }            // 프로젝트 저장 중            ProjectSavingPopup = _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveProjectInform, 0);            // 저장을 위한 리스트 생성            List_PageSaved_By_ReceiverID.Clear();            List_PageSaved_By_ReceiverID = (ArrayList)_Data.LIST_XMLRECEIVER_ID.Clone();            // 화면 전환 (프로젝트 메인 페이지의 경우 특별히 매개변수에 SystenTeee 정보는 필요없다)            _Event.WorkViewPageName_SendMessage_Write(null, Object_Type.PROJECT, null, null);            // 프로젝트 저장            Project_Save_ReceiverOnceExecute = false;            // 대기 타이머 시작                        _Timer_WindowBase.Delete("Project_Save_Start");            _Timer_WindowBase.Create("Project_Save_Start", 1000, timer_Project_Save_Start_Tick, true);        }        // 수신기별로 페이지 저장 완료 알림        public void _Event_Receiver_PageSaveComplete_SendMessage_Event(string RECEIVER_ID)        {            // 저장완료했으므로 삭제            List_PageSaved_By_ReceiverID.Remove(RECEIVER_ID);            // 타이머 재동작            Project_Save_ReceiverOnceExecute = false;        }        // 프로젝트 저장을 타이머로 처리함        private void timer_Project_Save_Start_Tick(object sender, EventArgs e)        {            try            {                if (Project_Save_ReceiverOnceExecute == false)                {                    Project_Save_ReceiverOnceExecute = true;                    // 마지막 수신기 처리                    if (List_PageSaved_By_ReceiverID.Count == 0)                    {                        // 팝업 종료(프로젝트 저장완료했습니다 -> 종료)                        ProjectSavingPopup.Close();                        // 팝업 시작(맵파일 저장중입니다 -> 시작)                        ProjectSavinEtcgPopup = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.OK, 450, 150, _Text.SaveProjectEtcInform, 0);                        // 파일 복사 및 최종 마무리                        Project_Save_EndRoutine();                        // 팝업 시작(맵파일 저장중입니다 -> 종료)                        ProjectSavinEtcgPopup.Close();                        // 타이머종료                        _Timer_WindowBase.Delete("Project_Save_Start");                    }                    else                    {                        // 배열중 처음 수신기 아이디                        string Receiver_ID = (string)List_PageSaved_By_ReceiverID[0];                        // 페이지 저장                        _Event.Page_Save_SendMessage_Write(Receiver_ID);                    }                }            }            catch (Exception ex)            {                // LOG                                _Event.DebugView_SendMessage_Write(ex.ToString());            }        }        // 프로젝트 저장 최종 루틴        private void Project_Save_EndRoutine()        {            try            {                ArrayList TempRemoveConfigTable = (ArrayList)_Data.LIST_XMLRECEIVER_ID.Clone();                // 현재 몇개의 수신기가 있는지 알아내자                foreach (string Receiver_Id in _Data.LIST_XMLRECEIVER_ID)                {                    // 프로세스 삭제                    System.Diagnostics.Process[] mProcess = System.Diagnostics.Process.GetProcessesByName("fbserver");                    foreach (System.Diagnostics.Process p in mProcess)                        p.Kill();                    System.Threading.Thread.Sleep(1000);                    // Temp 폴더의 DB 를 각 수신기에 복사한다                    string TempDB_Path = _Data.DataBaseFilePath_Get(null);                    string ReceiverDB_Path = _Data.DataBaseFilePath_Get(Receiver_Id);                    System.IO.File.Copy(TempDB_Path, ReceiverDB_Path, true);                    // 파일복사는 시간이 걸릴것이다                    System.Threading.Thread.Sleep(1000);                    // 경로 재지정                    _Data.DataBaseFilePath_Set(Receiver_Id);                    // 각 수신기의 DB 의 TB_CONFIG 를 조절한다 (상관없는 디비는 모두 지워버린다)                    foreach (string Remove_Id in TempRemoveConfigTable)                        if (Remove_Id != Receiver_Id)                            _Db.Execute(_Sql.Delete_Table("TB_CONFIG", Remove_Id));                    // 맵프로세스 자동생성                    Project_Save_MapProcess(Receiver_Id);                }                // 경로 재지정 (temp로 복귀)                _Data.DataBaseFilePath_Set(null);                // cyim 2016.12.15 : 프로젝트 강제 쿼리	(수신반용 테이블)                // 수신반에 연동할 모바일앱용 테이블을 저장한다                _Db.Execute("delete from TB_RECEIVER_ERROR_COUNT");                foreach (string ID in _Data.LIST_RECEIVER_ID)                    _Db.Execute(string.Format("insert into TB_RECEIVER_ERROR_COUNT (IP_ADDRESS,INFO1,INFO2,INFO3,INFO4,INFO5,INFO6,UPDATE_TIME) values ('{0}',0,0,0,0,0,0,current_timestamp)",                        ((_RECEIVER)_Data.HASH_RECEIVER[ID]).IP));                // 프로젝트 완료                _Data.ProJect_Save_Complete = true;            }            catch (Exception ex)            {                // LOG                                _Event.DebugView_SendMessage_Write(ex.ToString());            }        }        // 프로젝트 저장시에 맵프로세스 파일을 자동 생성해준다        private void Project_Save_MapProcess(string Receiver_Id)        {            // 맵연동 파일 생성용 전용 쿼리            DataRowCollection DB_TABLE_MAPPROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.MapProcessFile_Create(Receiver_Id));            if (DB_TABLE_MAPPROCESS != null && DB_TABLE_MAPPROCESS.Count != 0)            {                //    맵연동설정파일 포맷                //  - 한개의 레코드 길이 : 40 Byte (개행문자 포함)                //  - 구분자 는 |                //  - 마지막에 개행문자 (CR/LF)                //  - 순서 : A.MAP_NO,A.MAP_TYPE (ASC)                //    1. RECEIVER ID  : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)                //    2. MAP NO.      : 7 Bytes (7자리가 아닐 경우 왼쪽 0으로 채움) // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경                //    3. MAP TYPE     : 1 Bytes (NULL일 경우 공백으로 채움)                //    4. PROCESS TYPE : 1 Bytes (NULL일 경우 공백으로 채움)                //    5. COMM. ID     : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)                //    6. BOARD ID     : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)                //    7. LOOP NO.     : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)                //    8. REPEATER ID  : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)                //    9. DEVICE ID    : 3 Bytes (3자리가 아닐 경우 왼쪽 0으로 채움)                //    10. IN/OUT TYPE : 1 Bytes (NULL일 경우 공백으로 채움)                //    11. USE FLAG    : 1 Bytes (NULL일 경우 공백으로 채움)                //    12. CR/LF       : 2 Bytes                //        ex) C 소스코드                //       // MAP DATA 구성                //       sprintf (szMapData,"%03d|%07d|%c|%c|%03d|%03d|%03d|%03d|%03d|%c|%c|\r\n",  // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경                //              nReceiverID,nMapNo,                //              (szMapType[0]!='\0'?szMapType[0]:' '),                //              (szProcessType[0]!='\0'?szProcessType[0]:' '),                //              nCommID,nBoardID,nLoopNo,nRepeaterID,nDeviceID,                //              (szInoutType[0]!='\0'?szInoutType[0]:' '),                //              (szUseFlag[0]!='\0'?szUseFlag[0]:' '));                 //       ex) 001|0000001|I|D|001|001|000|002|001|I|Y|  // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경                StringBuilder Contents = new StringBuilder();                foreach (DataRow dr in DB_TABLE_MAPPROCESS)                {                    if (dr[0].ToString().Length != 0 && dr[1].ToString().Length != 0 && dr[2].ToString().Length != 0 && dr[3].ToString().Length != 0                        && dr[4].ToString().Length != 0 && dr[5].ToString().Length != 0 && dr[6].ToString().Length != 0 && dr[7].ToString().Length != 0                        && dr[8].ToString().Length != 0 && dr[9].ToString().Length != 0 && dr[10].ToString().Length != 0)                    {                        // 데이타 추출 및 포맷 적용                        string RECEIVER_ID = Int32.Parse(dr["RECEIVER_ID"].ToString()).ToString("D3");                        // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                        string MAP_NO = "";                        if (_Data.Project_MapGroupIDTypeNumber == "6")                            MAP_NO = Int32.Parse(dr["MAP_NO"].ToString()).ToString("D7"); // cyim 2015.10.30 : 포맷변경 포함 5->7, 즉 2번째 Map no 가 7자리로 변경                        else                            MAP_NO = Int32.Parse(dr["MAP_NO"].ToString()).ToString("D5");                        string MAP_TYPE = dr["MAP_TYPE"].ToString();                        string PROCESS_TYPE = dr["PROCESS_TYPE"].ToString();                        string COMM_ID = Int32.Parse(dr["COMM_ID"].ToString()).ToString("D3");                        string BOARD_ID = Int32.Parse(dr["BOARD_ID"].ToString()).ToString("D3");                        string LOOP_NO = Int32.Parse(dr["LOOP_NO"].ToString()).ToString("D3");                        string REPEATER_ID = Int32.Parse(dr["REPEATER_ID"].ToString()).ToString("D3");                        string DEVICE_ID = Int32.Parse(dr["DEVICE_ID"].ToString()).ToString("D3");                        string INOUT_TYPE = dr["INOUT_TYPE"].ToString();                        string USE_FLAG = dr["USE_FLAG"].ToString();                        // 구분자 포함하여 레코드 단위 생성                        Contents.Append(                            RECEIVER_ID + "|" +                            MAP_NO + "|" +                            MAP_TYPE + "|" +                            PROCESS_TYPE + "|" +                            COMM_ID + "|" +                            BOARD_ID + "|" +                            LOOP_NO + "|" +                            REPEATER_ID + "|" +                            DEVICE_ID + "|" +                            INOUT_TYPE + "|" +                            USE_FLAG + "|"                            // + _Text.CarrageReturn // cyim 2016.03.29 : 통신데몬과 마차가지로 개행문자 삭제                            );                    }                }                ///                /// 폴더생성 및 기본경로 지정                ///                // 수신기 폴더명                string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + Receiver_Id;                // 경로 지정                string MapProcessFile_ProjectPath = _Data.Project_Path + "\\" + _Data.Project_Name + "\\" + ReiceiverFolderName;                //                // 파일생성                //                _Cfg.Create_Cfg(Contents.ToString(), MapProcessFile_ProjectPath + "\\" + _Text.DEFALUT_MAPPROCESS_FILENAME);            }        }    }}
 |