123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Collections;
- namespace IControls_FireManager
- {
- public partial class Form_Project_Open : Form
- {
- // 수신기 정보 복사본
- public ArrayList LoadReceiverID = new ArrayList();
- // 정보를 읽는 도중에 한번만 읽도록 함
- public bool LoadReceiverID_OnceExecute = false;
- // 프로젝트 읽기 중 팝업
- Form ProjectLoadingPopup = new Form();
- // 프로젝트 팝업창 잔상 문제로 인한 타이머 추가
- public int Project_Open_Timer_Cnt = 0;
- // 수신기 추가시에 약간의 지연 시간이 필요하다
- public int Receiver_Add_Timer_Cnt = 0;
- // 생성자
- public Form_Project_Open()
- {
- InitializeComponent();
- ///
- /// 이벤트
- ///
- // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
- this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
- // 윈도우 스타일 변경 이벤트 핸들러 등록
- _Event.WindowStyleSet_SendMessage_Event += new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);
- // 트리뷰에서 수신기를 트리에 추가완료하였음을 알려주는 이벤트 핸들러 등록
- _Event.Receiver_NodeAddComplete_SendMessage_Event += new _Event.Receiver_NodeAddComplete_SendMessage_Handler(_Event_ProjectLoad_TreeToOpen_SendMessage_Event);
- ///
- /// 스타일 변경
- ///
- UI_Style_Initialize();
- ///
- /// UI
- ///
- UI_ListBox_Initialize();
- // 프로젝트 열기 창 속성은 반드시 보여주기 속성을 활성화해야함 (프로젝트 저장하지 않는 상태의 수신기를 열게 되는 경우 오류로 인하여 안보임)
- this.Visible = true;
- }
- // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
- public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- // 윈도우 스타일 변경 이벤트 핸들러 해제
- _Event.WindowStyleSet_SendMessage_Event -= new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);
- // 트리뷰에서 수신기를 트리에 추가완료하였음을 알려주는 이벤트 핸들러 등록
- _Event.Receiver_NodeAddComplete_SendMessage_Event -= new _Event.Receiver_NodeAddComplete_SendMessage_Handler(_Event_ProjectLoad_TreeToOpen_SendMessage_Event);
- }
- // 윈도우 스타일 변경 이벤트
- public void _Event_WindowStyleSet_SendMessage_Event()
- {
- UI_Style_Initialize();
- }
- // 스타일 초기화 함수
- private void UI_Style_Initialize()
- {
- }
- // 리스트 박스 초기화 함수
- private void UI_ListBox_Initialize()
- {
- // 폴더명 리스트 가져오기
- string FolderNameString = _File.Get_Folder(_Data.Project_Path + "\\");
- if (FolderNameString != null)
- {
- string[] FolderNames = _Convert.String_to_ArrayString(FolderNameString);
- if (FolderNames != null)
- {
- // 리스트에 추가
- foreach (string FolderName in FolderNames)
- {
- this.listBox_ProjectNames.Items.Add(FolderName);
- }
- }
- }
- }
- // 열기 버튼
- private void UiButton_Project_Open_Click(object sender, EventArgs e)
- {
- try
- {
- // cyim 2016.12.05 : 만약 프로젝트를 열다가 중간에 예외 처리 및 강제 저장 옵션이 발동되었다면 경고 폼 출력 : 수신기 모델을 강제로 셋팅하였는지 체크
- _Data.Receiver_Model_TempSetting = false;
- // 예외처리
- if (this.listBox_ProjectNames.SelectedItem == null || this.listBox_ProjectNames.SelectedItem.ToString().Trim().Length == 0)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 300, 150, _Text.NotSelectProjectInform, 0);
- return;
- }
- else
- {
- // 프로젝트 열기 잔상 문제
- _Timer_WindowBase.Delete("ProjectOpen_Timer");
- _Timer_WindowBase.Create("ProjectOpen_Timer", 1000, timer_ProjectOpen_Timer_Tick, true);
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- // 실패하였습니다
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform + ex.ToString(), 0);
- this.Close();
- }
- }
- // 프로젝트 열기
- private void timer_ProjectOpen_Timer_Tick(object sender, EventArgs e)
- {
- try
- {
- Project_Open_Timer_Cnt++;
- if (Project_Open_Timer_Cnt == 1)
- {
- // 프로젝트 열기창 감춤
- this.Hide();
- // 프로젝트 열기중이라는 팝업창 알림
- ProjectLoadingPopup = _Popup.Create(Popup_Type.ConfirmNoBtn, Popup_Style.Normal, _Text.OK, 220, 150, _Text.ProjectOpenLoading, 0);
- }
- else if (Project_Open_Timer_Cnt == 2)
- {
- // 해쉬 및 리스트 초기화 (수신기 전체 삭제와 동일)
- _Data.HASH_RECEIVER.Clear();
- _Data.LIST_RECEIVER_ID.Clear();
- _Data.HASH_XMLDEVTYPE.Clear();
- _Data.LIST_XMLDEVTYPE_ID.Clear();
- //_Data.HASH_PAGE.Clear();
- //_Data.LIST_PAGE_ID.Clear();
- // _Receiver.xml 제거 : cyim 2012.8.29 -> 복구 2013.5.27
- //_Data.HASH_XMLRECEIVER.Clear();
- _Data.LIST_XMLRECEIVER_ID.Clear();
- _Data.List_ExcelPoint.Clear();
- _Data.HASH_CodePosition.Clear();
- _Data.LIST_CodePosition_NAME.Clear();
- _Data.LIST_XmlDBNotSave_Receiver.Clear();
- _Data.Hash_ImportPoint.Clear();
- // 수신기 아이디 초기화
- _Data.INIT_RECEIVER_ID = 1;
- // 프로젝트명 전환
- _Data.Project_Name = this.listBox_ProjectNames.SelectedItem.ToString();
- // 프로젝트에 수신기가 몇개가 있는지 확인한다
- if (_File.Read_Receiver_XML(_Data.Project_Path + "\\" + _Data.Project_Name) == false)
- {
- // 단, 파일 자체가 없는경우에는 강제로 파일 생성(어차피 수신기 아이디가 1로 모두 셋팅되어 있음
- _Data.LIST_XMLRECEIVER_ID.Add(_Data.INIT_RECEIVER_ID.ToString());
- // 여는 동시에 파일이 생성되고, 다음부터 열때는 프로젝트 경로에 생성된 파일을 읽어서 루틴이 적용될 수 있다.
- // 프로젝트 폴더생성
- _File.Create_ProjectFolder(_Data.Project_Path, _Data.Project_Name);
- // 파일 생성
- _File.Write_Receiver_XML(_Data.Project_Path + "\\" + _Data.Project_Name);
- }
- // 프로젝트 열기
- // 워크뷰 및 트리뷰 에 알림
- _Event.WorkView_Clear_SendMessage_Write();
- _Event.TreeView_Clear_SendMessage_Write(this.listBox_ProjectNames.SelectedItem.ToString());
- // 파일을 읽거나 혹은 생성시켰으므로 다시 _Data.LIST_XMLRECEIVER_ID 를 토대로 자동으로 여러개의 수신기를 추가하고 트리를 생성하도록 한다
- LoadTree_Excute();
- }
- else
- {
- Project_Open_Timer_Cnt = 0;
- _Timer_WindowBase.Delete("ProjectOpen_Timer");
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- // 실패하였습니다
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform + ex.ToString(), 0);
- this.Close();
- }
- }
- // 프로젝트를 여는 경우 수신기 추가를 자동으로 한다
- public void LoadTree_Excute()
- {
- try
- {
- // 수신기가 없다면 그냥 리턴
- if (_Data.LIST_XMLRECEIVER_ID.Count == 0)
- {
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotReceiver, 0);
- this.Close();
- }
- else
- {
- // 각 수신기 DB 를 읽어서 Temp DB 로 합치자
- LoadDB_Excute();
- // 복사본
- LoadReceiverID.Clear();
- LoadReceiverID = (ArrayList)_Data.LIST_XMLRECEIVER_ID.Clone();
- LoadReceiverID_OnceExecute = false;
- // 대기 타이머 시작
- Receiver_Add_Timer_Cnt = 0;
- _Timer_WindowBase.Delete("LoadTree_Excute");
- _Timer_WindowBase.Create("LoadTree_Excute", 1000, timer_LoadTree_Excute_Tick, true);
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- // 실패하였습니다
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform + ex.ToString(), 0);
- this.Close();
- }
- }
- // 열기의 경우 기존의 디비를 읽어야함
- public void LoadDB_Excute()
- {
- try
- {
- ArrayList TempRemoveConfigTable = (ArrayList)_Data.LIST_XMLRECEIVER_ID.Clone();
- // 제일 처음 찾은 수신기 폴더의 DB 를 Temp DB 로 복사해서 넣고 (어차피 TB_CONFIG 를 제외하고는 전부 동일하다)
- string Receiver_Id = _Data.LIST_XMLRECEIVER_ID[0].ToString();
- // 프로세스 삭제
- 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(ReceiverDB_Path, TempDB_Path, true);
- // 파일복사는 시간이 걸릴것이다
- System.Threading.Thread.Sleep(1000);
- // 각 수신기폴더의 DB 의 내용을 토대로 Temp DB 에 추가한다
- foreach (string receiver_Id in _Data.LIST_XMLRECEIVER_ID)
- {
- // 제일 처음 찾은 수신기 아이디에 해당하는 데이타는 필요없다
- if (Receiver_Id != receiver_Id)
- {
- // 경로 재지정
- _Data.DataBaseFilePath_Set(receiver_Id);
- DataRowCollection DB_TABLE_TB_CONFIG = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_ConfigTable(Int32.Parse(receiver_Id)));
- if (DB_TABLE_TB_CONFIG != null)
- {
- foreach (DataRow Dr in DB_TABLE_TB_CONFIG)
- {
- // 경로 재지정 (temp로 복귀)
- _Data.DataBaseFilePath_Set(null);
- // Temp DB 에 저장한다
- string sSQL_Config = _Sql.TB_CONFIG_table_Insert(Int32.Parse(Dr["RECEIVER_ID"].ToString()), // 수신기 ID
- Dr["FIRE_ACCUMULATION_MODE"].ToString(), // 축적 모드 여부
- Int32.Parse(Dr["FIRE_ACCUMULATION_TIME"].ToString()), // 축적 시간
- Dr["FIRE_PROCESS_MODE"].ToString(), // 자동복구 (N) / 지속(Y)
- Dr["MASTER_USER_ID"].ToString(), // Master USER ID
- Dr["MASTER_PASSWORD"].ToString(), // Master Password
- Dr["BUILDING_NAME"].ToString(), // 빌딩명 (수신기명)
- Dr["JUMP_FIELD"].ToString(),// 화재시 화면 이동 여부 (Y/N)
- Dr["MASTER_FLAG"].ToString(), // 네트워크 수신기에 MASTER 여부 (Y/N)
- Dr["TEST_RUN_FLAG"].ToString() // 시운전 모드 Y/N
- );
- _Db.Execute(sSQL_Config);
- //_Db.ADD("TB_CONFIG",
- // "RECEIVER_ID=" + +
- // ";FIRE_ACCUMULATION_MODE=" + +
- // ";FIRE_ACCUMULATION_TIME=" + +
- // ";FIRE_PROCESS_MODE=" + +
- // ";SOUND_PROCESS_MODE=" + Dr["SOUND_PROCESS_MODE"].ToString() +
- // ";BUILDING_NAME=" + +
- // ";MASTER_USER_ID=" + +
- // ";MASTER_PASSWORD=" + +
- // ";UPDATE_USER_ID=" + Dr["UPDATE_USER_ID"].ToString() +
- // ";UPDATE_TIME=current_timestamp" +
- // ";BACKGROUND_IMAGE=" + Dr["BACKGROUND_IMAGE"].ToString() +
- // ";MASTER_FLAG=" + Dr["MASTER_FLAG"].ToString() +
- // ";JUMP_FIELD=" + );
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- // 실패하였습니다
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform + ex.ToString(), 0);
- this.Close();
- }
- }
- // 트리뷰에서 트리 추가를 완료하였습니다.
- public void _Event_ProjectLoad_TreeToOpen_SendMessage_Event(string RECEIVER_ID)
- {
- try
- {
- LoadReceiverID.Remove(RECEIVER_ID);
- if (LoadReceiverID.Count != 0)
- {
- Receiver_Add_Timer_Cnt = 0;
- LoadReceiverID_OnceExecute = false;
- }
- else
- {
- // 먼저 클리어
- _Data.Hash_ImportPoint.Clear();
- // 해당 수신기 아이디만큼 루틴을 돌린다
- foreach (string pRECEIVER_ID in _Data.LIST_XMLRECEIVER_ID)
- {
- _ImportPoint ImportPoint = new _ImportPoint();
- // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
- if (((_RECEIVER)_Data.HASH_RECEIVER[pRECEIVER_ID]).MODEL == "IFC3300")
- {
- // 해당 수신기 아이디 값을 이용해서 입력용 데이타를 만들자
- ImportPoint.IN_Points = _Db.ExecuteRead_SqlDataAdapter(
- _Sql.Search_DEVICETable_With_EMERGENCY_BigReceiver("1", "I", "", "", "", "", "", "", pRECEIVER_ID, "", "", "", false));
- // 해당 수신기 아이디 값을 이용해서 출력용 데이타를 만들자
- ImportPoint.OUT_Points = _Db.ExecuteRead_SqlDataAdapter(
- _Sql.Search_DEVICETable_NoneBoardID_BigReceiver("1", "O", "", "", "", "", "", pRECEIVER_ID));
- }
- else
- {
- // 해당 수신기 아이디 값을 이용해서 입력용 데이타를 만들자
- ImportPoint.IN_Points = _Db.ExecuteRead_SqlDataAdapter(
- _Sql.Search_DEVICETable_With_EMERGENCY("1", "I", "15", "", "", "", "", "", pRECEIVER_ID, "", "", "", false));
- // 해당 수신기 아이디 값을 이용해서 출력용 데이타를 만들자
- ImportPoint.OUT_Points = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_DEVICETable("1", "O", "15", "", "", "", "", "", pRECEIVER_ID));
- }
- // 해쉬테이블에 삽입
- _Hash.Add(_Data.Hash_ImportPoint, pRECEIVER_ID, ImportPoint);
- }
- // 프로젝트 읽기 중이라는 팝업창이 종료
- ProjectLoadingPopup.Close();
- // 타이머 종료
- _Timer_WindowBase.Delete("LoadTree_Excute");
- // cyim 2016.12.05 : 만약 프로젝트를 열다가 중간에 예외 처리 및 강제 저장 옵션이 발동되었다면 경고 폼 출력
- if (_Data.Receiver_Model_TempSetting == true)
- {
- MessageBox.Show("수신기 모델 번호가 없습니다. 임시로 IFC3300 셋업합니다. 수신기 설정 팝업창에서 반드시 모델정보를 재저장해주세요. 수신기 설정 정보중 모델 정보를 저장하지 않으면 수신기가 이상 동작합니다");
- }
- // 폼을 종료
- this.Close();
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- // 실패하였습니다
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform + ex.ToString(), 0);
- this.Close();
- }
- }
- // 프로젝트 폼에서 일정 타이머동안 수신기 추가 이벤트를 강제로 발생시킨다
- public Form_Receiver_Add Form_ReceiverAdd = null;
- private void timer_LoadTree_Excute_Tick(object sender, EventArgs e)
- {
- try
- {
- if (LoadReceiverID_OnceExecute == false)
- {
- Receiver_Add_Timer_Cnt++;
- if (Receiver_Add_Timer_Cnt == 1)
- {
- // 해쉬 및 리스트 트리 및 폴더 셋팅
- Form_ReceiverAdd = new Form_Receiver_Add(Int32.Parse(LoadReceiverID[0].ToString()));
- }
- else if (Receiver_Add_Timer_Cnt == 2)
- {
- LoadReceiverID_OnceExecute = true;
- // 실제로 버튼을 누르는 것처럼 동작한다
- Form_ReceiverAdd.UiButton_SubPortAdd_Click(null, null);
- // 프로젝트 수정이 아니다
- _Data.ProJect_Save_Complete = true;
- }
- }
- }
- catch (Exception ex)
- {
- // LOG
- _Event.DebugView_SendMessage_Write(ex.ToString());
- // 실패하였습니다
- _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform + ex.ToString(), 0);
- this.Close();
- }
- }
- }
- }
|