| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892 | using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.InteropServices;using System.Reflection;using System.Diagnostics;namespace FPER{    public class Tprotocol    {// 통신보드 프로토콜 메인 클래스        private MDIParent main;        private TSocket tsocket;        private Paket pkt;        private CmdInfo cmd;        private int iDemonPacketReceiveCnt;        LogFileCreate LFC = new LogFileCreate();        public Tprotocol(MDIParent main)        {            try            {                this.main = main;                this.pkt = new Paket();            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }        }        public int ConnectToDemon(String Dest_ip, int commandPort, int eventPort, int Demon_ID)        {// 데몬 연결 함수             int iret = 0;            try            {                iDemonPacketReceiveCnt = 0;                tsocket = new TSocket(Dest_ip, commandPort, eventPort, Demon_ID, this);                iret = tsocket.ConnectSocket();            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return iret;        }        public int DisconnectToDemon(int Own_ID, int Demon_ID)        {// 데몬 연결 해제 함수             try            {                tsocket.Stop_Connection();            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return 0;        }        /**********************************************************************************************/        /*                                     UI명령                                                                             */        /**********************************************************************************************/        public int getCommand(CmdInfo cmd)        {            int ret = 0;            try            {                //Debug.WriteLine(string.Format("+getCommand : 0x{0:x2}", (byte)cmd.Command));                ////Util.UDebugMessage(((string.Format("getCommand Command = 0x{0:x2} ", (byte)cmd.Command)) + " :" + ret.ToString()),0,0);                if (tsocket.cmd_Connected)                {                    this.cmd = cmd;                    switch (cmd.Command)                    {                        case prt_cmd_define.say_hello:                            {                                byte[] bt = pkt.CreatePKT_SayHello_To_Board((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);                                //ret = SayHello_To_Board((byte)cmd.loopNo,(byte)cmd.boardNo,(byte)cmd.invorkNo,(byte)cmd.receiverID);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.resd_tbd_state:                            {                                byte[] bt = pkt.CreatePKT_ReadBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = ReadBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        //통신보드상태쓰기                        case prt_cmd_define.write_tbd_state:                            {                                TBoardData data = (TBoardData)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID                                    , data.RCV_BaudRate, data.TBD_Loop1_BaudRate, data.TBD_Loop2_BaudRate, data.TBD_Term, data.Reset);                                //ret = WriteBoardStatus((byte)cmd.loopNo,(byte)cmd.boardNo,(byte)cmd.invorkNo,(byte)cmd.receiverID,(TBoardData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.search_repeater_unit:                            {                                byte[] bt = pkt.CreatePKT_SearchRepeaterUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo);                                //ret = SearchRepeaterUNIT((byte)cmd.loopNo,(byte)cmd.boardNo,(byte)cmd.invorkNo,(byte)cmd.receiverID,(byte)cmd.repeaterNo);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.search_repeater_all:                            {                                byte[] bt = pkt.CreatePKT_SearchRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = SearchRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.read_repeater_all:                            {                                byte[] bt = pkt.CreatePKT_ReadRepeaterPointAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = ReadRepeaterPointAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_repeater_output_unit:                            {                                RepeaterData data = (RepeaterData)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteRepeaterOutputUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo                                    , data.Repeater_Output);                                //ret = WriteRepeaterOutputUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo, (RepeaterData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.read_repeater_info_all:                            {                                byte[] bt = pkt.CreatePKT_ReadRepeaterInfoAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = ReadRepeaterInfoAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_repeater_info_unit:                            {                                RepeaterData data = (RepeaterData)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteRepeaterInfoUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo, data.Repeater_Info);                                //ret = WriteRepeaterInfoUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo, (RepeaterData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_repeater_info_all:                            {  //2010.12.05, k.s.d, repeater information block write.                                RepeaterDataAll data = (RepeaterDataAll)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteRepeaterInfoAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo, data);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));#endif                                break;                            }                        case prt_cmd_define.reset_repeater_unit:                            {                                byte[] bt = pkt.CreatePKT_ResetRepeaterUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo);                                //ret = ResetRepeaterUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.reset_repeater_all:                            {                                // cyim 2013.3.13                                 // 입력쓰기 테스트 이후 복구 버튼을 눌러서 중계기 별로 복구하도록 명령한다                                 //byte[] bt = pkt.CreatePKT_ResetRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                byte[] bt = pkt.CreatePKT_ResetRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo);                                //ret = ResetRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_repeater_input_unit:                            {                                //RepeaterData data = (RepeaterData)cmd.CommandData;                                byte data = (byte)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteRepeaterInputUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo, data);                                //ret = WriteRepeaterInputUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.repeaterNo, (RepeaterData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.sayhello_to_ioboard:                            {                                byte[] bt = pkt.CreatePKT_SayHello_To_IOBoard((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = SayHello_To_IOBoard((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.read_ioboard_status:                            {                                byte[] bt = pkt.CreatePKT_ReadIOBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = ReadIOBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_ioboard_status:                            {                                IOBoardData data = (IOBoardData)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteIOBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, data.BaudRate, data.Reset);                                //ret = WriteIOBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (IOBoardData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.read_ioboard_data:                            {                                byte[] bt = pkt.CreatePKT_ReadIOBoardData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = ReadIOBoardData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_ioboard_data:                            {                                IOBoardData data = (IOBoardData)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteIOBoardData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, data.OutData_d, data.OutData_u);                                //ret = WriteIOBoardData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (IOBoardData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.read_ioboard_point_data:                            {                                byte[] bt = pkt.CreatePKT_ReadIOBoardPointData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.DeviceId);                                //ret = ReadIOBoardData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.write_ioboard_point_data:                            {                                IOBoardData data = (IOBoardData)cmd.CommandData;                                byte[] bt = pkt.CreatePKT_WriteIOBoardPointData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.DeviceId, data.Reset);                                //ret = WriteIOBoardData((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, (IOBoardData)cmd.CommandData);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.sayhello_to_demon:                            {                                byte[] bt = pkt.CreatePKT_SayHello_To_Demon((byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = SayHollo_To_Demon((byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.start_polling:                            {                                byte[] bt = pkt.CreatePKT_StartPolling((byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = SayHollo_To_Demon((byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.stop_polling:                            {                                byte[] bt = pkt.CreatePKT_StopPolling((byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = StopPolling((byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.read_demon_status:                            {                                byte[] bt = pkt.CreatePKT_ReadDemonStatus((byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = ReadDemonStatus((byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        case prt_cmd_define.notify_db_update:                            {                                byte[] bt = pkt.CreatePKT_Notify_DBUpdated((byte)cmd.invorkNo, (byte)cmd.receiverID);                                //ret = NotifyDBUpdated((byte)cmd.invorkNo, (byte)cmd.receiverID);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        //UI명령                        case prt_cmd_define.read_command_status:                            {                                char inoutChar = (char)Util.ToBytes(cmd.Devicetype)[0];                                char commandType1 = (char)Util.ToBytes(cmd.CommandType)[0];                                char commandType2 = (char)Util.ToBytes(cmd.CommandType)[1];                                char cSubType = (char)Util.ToBytes(cmd.SubType)[0];                                char cApplyRange = (char)Util.ToBytes(cmd.ApplyRange)[0];                                byte[] bt = pkt.CreatePKT_ReadCommandStatus((byte)cmd.invorkNo, (byte)cmd.receiverID, cmd.loopNo, cmd.boardNo                                    , cmd.repeaterNo, cmd.DeviceId, inoutChar, commandType1, commandType2, cSubType, cApplyRange, cmd.Status, cmd.CommId);                                //ret = ReadCommandStatus((byte)cmd.invorkNo, (byte)cmd.receiverID, cmd.loopNo, cmd.boardNo                                //    ,cmd.repeaterNo,cmd.DeviceId,cmd.Devicetype,cmd.CommandType,cmd.Status,cmd.CommId);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);#if _DEBUG                                Util.LogWrite(string.Format("UI명령[{0}]{1}", cmd.Command, Util.ToHex(bt)));    //명령 로그에 저장#endif                                break;                            }                        // cyim 2015.6.29 아날로그감지기 레벨값 쓰기 명령 프로토콜 추가                        // 설비연동과 동일한 루틴이다. 즉 UI 에서 레벨값을 저장하라고 데몬에게 명령하면, 데몬은 데이타베이스에 저장하고, 응답을 주도록 되어있다                        // 아날로그 감지기 레벨값 쓰기 명령                        case prt_cmd_define.write_analogdetecter_level:                            {                                byte[] bt = pkt.CreatePKT_AnalogDetecterLevel_Write((byte)cmd.invorkNo, (byte)cmd.receiverID, cmd.loopNo, cmd.boardNo                                    , cmd.repeaterNo, cmd.AnalogDetecterFault, cmd.AnalogDetecterPreFire, cmd.AnalogDetecterFireNight, cmd.AnalogDetecterFireDay);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);                            }                            break;                        // cyim 2016.10.27 : 대용량 수신기 아날로그 감지기 트랜드 읽기                        case prt_cmd_define.read_analogdetecter_trend:                            {                                byte[] bt = pkt.CreatePKT_AnalogDetecterTrend_Read((byte)cmd.invorkNo, (byte)cmd.receiverID, cmd.loopNo, cmd.boardNo, cmd.repeaterNo);                                ret = tsocket.Cmd_Send(bt, (int)bt[3] + 1);                            }                            break;                        // cyim 2016.10.28 : 대용량 수신기 아날로그 감지기 레벨 Block 쓰기                        case prt_cmd_define.write_analogdetecter_level_all:                            {                                RepeaterDataAll data = (RepeaterDataAll)cmd.CommandData;                                data.InvorkNo = (byte)cmd.invorkNo;                                data.ReceiverID = (byte)cmd.receiverID;                                data.Repeater_loop = (byte)cmd.loopNo;                                data.TBD_ID = (byte)cmd.boardNo;                                // LCH 2018.02.27 : 수정됨                                byte[] bt = pkt.CreatePKT_AnalogDetecterLevel_WriteAll((byte)cmd.invorkNo, (byte)cmd.receiverID, (byte)cmd.loopNo, (byte)cmd.boardNo, data);                                ret = tsocket.Cmd_Send(bt, bt.Length);//(int)bt[3] + 1);                            }                            break;                        default:                            {                                ret = -3;                            }                            break;                    }                }                else                {                    ret = -1;                }            }            catch (Exception ex)            {                ret = -1;                Util.UErrorMessage(ex, 0, 0);            }            return ret;        }        /**********************************************************************************************/        //cmd 소켓연결정보        public Boolean cmd_Connected { get { return tsocket.cmd_Connected; } }        //event 소켓연결정보        public Boolean event_Connected { get { return tsocket.event_Connected; } }        public int SendDataToDemon(byte[] data, int size)        {// don't using now. //2010.3.16_moon            return 0;        }        public int SendDataToDemon(String strdata, int size)        {// don't using now. //2010.3.16_moon            return 0;        }        /**********************************************************************************************/        /*                                     UI명령 응답                                  */        /**********************************************************************************************/        public int CMDResponceFunc(byte[] cmdbuffer, int rcvSize)        {            //Debug.WriteLine("+ CMDResponceFunc ");            int ret = 0;            try            {                ret = pkt.DoCheckcs(cmdbuffer, rcvSize, cmdbuffer[rcvSize]);                this.cmd.ResCommand = (prt_res_define)cmdbuffer[4];                Util.LogWrite(string.Format("명령응답[{0}]{1}", this.cmd.ResCommand, Util.ToHex(cmdbuffer)));    //명령 로그에 저장                //check cs                if (ret == 1)                {                    //data setting                    // send to ui                    switch (cmdbuffer[4])                    {                        //응답-정상                        case (byte)prt_res_define.general_ack:                            {                                RCVData_ACK ResponseData = new RCVData_ACK(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-실패                        case (byte)prt_res_define.general_nack:                            {                                RCVData_NACK ResponseData = new RCVData_NACK(cmdbuffer);                                this.cmd.ErrResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-전압읽기                        case (byte)prt_res_define.resd_tbd_state:                            {                                RCVData_ReadTBoardStatus ResponseData = new RCVData_ReadTBoardStatus(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-통신보드 상태쓰기                        case (byte)prt_res_define.write_tbd_state:                            {                                RCVData_WriteTBoardStatus ResponseData = new RCVData_WriteTBoardStatus(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 검색                        case (byte)prt_res_define.search_repeater_unit:                            {                                RCVData_SearchRepeaterUNIT ResponseData = new RCVData_SearchRepeaterUNIT(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 전체 읽기                        case (byte)prt_res_define.read_repeater_all:                        case (byte)prt_res_define.read_repeater_all_E1:                        case (byte)prt_res_define.read_repeater_all_E2:                            {                                RCVData_ReadRepeaterPointAll ResponseData = new RCVData_ReadRepeaterPointAll(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 출력 쓰기                        case (byte)prt_res_define.write_repeater_output_unit:                            {                                RCVData_WriteRepeaterOutputUNIT ResponseData = new RCVData_WriteRepeaterOutputUNIT(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 정보전체 읽기                        case (byte)prt_res_define.read_repeater_info_all:                            {                                RCVData_ReadRepeaterInfoAll ResponseData = new RCVData_ReadRepeaterInfoAll(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 정보 쓰기                        case (byte)prt_res_define.write_repeater_info_unit:                            {                                RCVData_WriteRepeaterInfoUNIT ResponseData = new RCVData_WriteRepeaterInfoUNIT(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기입력쓰기                        case (byte)prt_res_define.write_repeater_input_unit:                            {                                RCVData_WriteRepeaterInputUNIT ResponseData = new RCVData_WriteRepeaterInputUNIT(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드상태읽기                        case (byte)prt_res_define.read_ioboard_status:                            {                                RCVData_ReadIOBoardStatus ResponseData = new RCVData_ReadIOBoardStatus(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드 상태쓰기                        case (byte)prt_res_define.write_ioboard_status:                            {                                RCVData_WriteIOBoardStatus ResponseData = new RCVData_WriteIOBoardStatus(cmdbuffer); //2010.4.9_moon                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드데이터읽기                        case (byte)prt_res_define.read_ioboard_data:                            {                                RCVData_ReadIOBoardData ResponseData = new RCVData_ReadIOBoardData(cmdbuffer); //2010.4.9_moon                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드데이터쓰기                        case (byte)prt_res_define.write_ioboard_data:                            {                                RCVData_WriteIOBoardData ResponseData = new RCVData_WriteIOBoardData(cmdbuffer); //2010.4.9_moon                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-데몬상태                        case (byte)prt_res_define.read_demon_status:                            {                                RCVData_ReadDemonStatus ResponseData = new RCVData_ReadDemonStatus(cmdbuffer); //2010.4.9_moon                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-누적카운트 및 기타  UI프로토콜---추가1                        case (byte)prt_res_define.read_command_status:                            {                                this.cmd.ResCommand = prt_res_define.read_command_status;                                RCVData_ReadCommandStatus ResponseData = new RCVData_ReadCommandStatus(cmdbuffer); //2010.4.9_moon                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        // cyim 2015.6.29 아날로그감지기 레벨값 쓰기 명령 프로토콜 추가                        case (byte)prt_res_define.write_analogdetecter_level:                            {                                this.cmd.ResCommand = prt_res_define.write_analogdetecter_level;                                RCVData_WriteAnalogDetecterLevel ResponseData = new RCVData_WriteAnalogDetecterLevel(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        // cyim 2016.10.27 : 대용량 수신기 아날로그 감지기 트랜드 읽기                        case (byte)prt_res_define.read_analogdetecter_trend:                            {                                this.cmd.ResCommand = prt_res_define.read_analogdetecter_trend;                                RCVData_ReadAnalogDetecterTrend ResponseData = new RCVData_ReadAnalogDetecterTrend(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        case (byte)prt_res_define.write_analogdetecter_level_all: // LCH 2018.02.27 : 수정됨                            {                                this.cmd.ResCommand = prt_res_define.write_analogdetecter_level_all;                                RCVData_WriteAnalogDetecterLevel2 ResponseData = new RCVData_WriteAnalogDetecterLevel2(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        default:                            {                                //Debug.WriteLine(" unKnown CMD ");                                ret = -1;                                break;                            }                    }                }                if (ret == 2)                {                    //Debug.WriteLine(string.Format("+CMDResponce Send To UI (getResponse) : 0x{0:x2}", cmdbuffer[4]));                    this.main.ui.getResponse(cmd);                    //Debug.WriteLine(string.Format("-CMDResponce Send To UI (getResponse) : 0x{0:x2}", cmdbuffer[4]));                }                else                {                    //Util.UDebugMessage(("CMDResponceFunc err = " + ret.ToString()),0,0);                }            }            catch (Exception ex)            {                ret = -1;                Util.UErrorMessage(ex, 0, 0);            }            //Debug.WriteLine("- CMDResponceFunc ");            return ret;        }        /**********************************************************************************************/        /**********************************************************************************************/        /*                              이벤트를 UI에게 보내는  함수                                                                 */        /**********************************************************************************************/        public int EVENTCallFunc(byte[] cmdbuffer, int rcvSize)        {            //패킷 받을때 마다 카운트            this.iDemonPacketReceiveCnt++;            int ret = 0;            try            {                ret = pkt.DoCheckcs(cmdbuffer, rcvSize, cmdbuffer[rcvSize]);                //Util.LogWrite(string.Format("이벤트CNT[{0}][{1}]{2}", iDemonPacketReceiveCnt, (prt_res_define)cmdbuffer[4], Util.ToHex(cmdbuffer)));    //명령 로그에 저장                //Util.LogWrite(string.Format("CS:{0}", ret));    //명령 로그에 저장                if (ret == 1)                {                    CmdInfo cmd;                    //Debug.WriteLine(string.Format("EVENTCallFunc rcv cmd : 0x{0:x2}", cmdbuffer[4]));                    switch (cmdbuffer[4])                    {                        //응답-정상                        case (byte)prt_res_define.general_ack:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ACK ResponseData = new RCVData_ACK(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-실패                        case (byte)prt_res_define.general_nack:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_NACK ResponseData = new RCVData_NACK(cmdbuffer);                                cmd.ErrResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-전압읽기                        case (byte)prt_res_define.resd_tbd_state:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadTBoardStatus ResponseData = new RCVData_ReadTBoardStatus(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-통신보드 상태쓰기                        case (byte)prt_res_define.write_tbd_state:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_WriteTBoardStatus ResponseData = new RCVData_WriteTBoardStatus(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기회로 검색                        case (byte)prt_res_define.search_repeater_unit:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_SearchRepeaterUNIT ResponseData = new RCVData_SearchRepeaterUNIT(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 전체 읽기                        case (byte)prt_res_define.read_repeater_all:                        case (byte)prt_res_define.read_repeater_all_E1:                        case (byte)prt_res_define.read_repeater_all_E2:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[8], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadRepeaterPointAll ResponseData = new RCVData_ReadRepeaterPointAll(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 출력 쓰기                        case (byte)prt_res_define.write_repeater_output_unit:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_WriteRepeaterOutputUNIT ResponseData = new RCVData_WriteRepeaterOutputUNIT(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 정보전체 읽기                        case (byte)prt_res_define.read_repeater_info_all:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadRepeaterInfoAll ResponseData = new RCVData_ReadRepeaterInfoAll(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기 정보 쓰기                        case (byte)prt_res_define.write_repeater_info_unit:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_WriteRepeaterInfoUNIT ResponseData = new RCVData_WriteRepeaterInfoUNIT(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-중계기입력쓰기                        case (byte)prt_res_define.write_repeater_input_unit:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_WriteRepeaterInputUNIT ResponseData = new RCVData_WriteRepeaterInputUNIT(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드상태읽기                        case (byte)prt_res_define.read_ioboard_status:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadIOBoardStatus ResponseData = new RCVData_ReadIOBoardStatus(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드 상태쓰기                        case (byte)prt_res_define.write_ioboard_status:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_WriteIOBoardStatus ResponseData = new RCVData_WriteIOBoardStatus(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드데이터읽기                        case (byte)prt_res_define.read_ioboard_data:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadIOBoardData ResponseData = new RCVData_ReadIOBoardData(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-io보드데이터쓰기                        case (byte)prt_res_define.write_ioboard_data:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_WriteIOBoardData ResponseData = new RCVData_WriteIOBoardData(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-데몬상태                        case (byte)prt_res_define.read_demon_status:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadDemonStatus ResponseData = new RCVData_ReadDemonStatus(cmdbuffer);                                this.cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-전체 누적카운트---추가1                        case (byte)prt_res_define.read_command_status:                            {                                cmd = new CmdInfo((prt_res_define)cmdbuffer[4], (int)cmdbuffer[6], (int)cmdbuffer[1], (int)cmdbuffer[2], 0);                                RCVData_ReadCommandStatus ResponseData = new RCVData_ReadCommandStatus(cmdbuffer);                                cmd.ResponseData = ResponseData;                                ret = 2;                                break;                            }                        //응답-상태알림---추가2                                 case (byte)prt_res_define.read_notify_staus:                            {                                //                                // CmdInfo 생성자                                //                                cmd = new CmdInfo(                                    prt_res_define.read_notify_staus, //  prt_res_define res_define,                                    (int)cmdbuffer[6], // int receiverID,                                    (int)cmdbuffer[1], // int loopNo                                    (int)cmdbuffer[2], // int boardNo,                                     0); // int repeaterNo                                //                                // RCVData_ReadNotifyStatus 생성자                                //                                RCVData_ReadNotifyStatus resData = new RCVData_ReadNotifyStatus(cmdbuffer);                                //알람타입을 넘긴다.                                cmd.ResponseData = resData;                                ret = 2;                                break;                            }                        //응답-알수없는명령어                        default:                            {                                cmd = new CmdInfo((prt_res_define)0x00, (int)0x00, 1, (int)0x00, (int)0x00);                                //Debug.WriteLine(" unKnown CMD ");                                ret = -1;                                break;                            }                    }                    Util.LogWrite(string.Format("UI처리결과:{0}", ret));    //명령 로그에 저장                    if (ret == 2)                    {                        ////Debug.WriteLine(string.Format("+EVENT Send To UI (getEvent) : 0x{0:x2}", cmdbuffer[4]));                        this.main.ui.getEvent(cmd);                        ////Debug.WriteLine(string.Format("-EVENT Send To UI (getEvent) : 0x{0:x2}", cmdbuffer[4]));                    }                }                if (ret != 2)                {                    //Debug.WriteLine("EVENTCallFunc err = " + ret.ToString());                }            }            catch (Exception ex)            {                ret = -1;                Util.UErrorMessage(ex, 0, 0);            }            //Debug.WriteLine("- EVENTCallFunc ");            return ret;        }        /**********************************************************************************************/    }}
 |