using System; using System.Windows.Forms; using System.Threading; using System.Collections; using System.Reflection; using System.Text; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using Cosmos.Common; using Cosmos.CommonManager; /*-----------------------------------------------------------------------------------------------*/ // 설 명 : TCP 클라이언트 통신 처리 // 작 성 자 : // 변경 이력 : /*-----------------------------------------------------------------------------------------------*/ namespace Cosmos.Service { public partial class frmTcpClientMsg : Form { private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private bool m_bSecondDisp = false; // 초 표시여부 private int m_nSecondCount = 0; // 초(경과) string m_sMessageStr; /// /// 화면표시 메시지 /// public string MessageStr { get { return this.m_sMessageStr; } set { this.m_sMessageStr = value; try { lblMessage.Text = m_sMessageStr; } catch { } } } string m_sServerIp; /// /// 서버IP /// public string ServerIp { get { return this.m_sServerIp; } set { this.m_sServerIp = value; } } int m_nServerPort; /// /// 서버PORT /// public int ServerPort { get { return this.m_nServerPort; } set { this.m_nServerPort = value; } } int m_nTimeOut; /// /// 서버 Timeout /// public int TimeOut { get { return this.m_nTimeOut; } set { this.m_nTimeOut = value; } } // Byte 통신 전송값 byte[] m_bytSendByteData; public byte[] SendByteData { get { return this.m_bytSendByteData; } set { this.m_bytSendByteData = value; } } // Byte 통신 응답값 byte[] m_bytRecvByteData; public byte[] RecvByteData { get { return this.m_bytRecvByteData; } set { this.m_bytRecvByteData = value; } } int m_nRecvDataLen; /// /// 수신리턴 길이 /// public int RecvDataLen { get { return this.m_nRecvDataLen; } set { this.m_nRecvDataLen = value; } } // 송수신 처리 실행 함수 string m_sExecFunction; public string ExecFunction { get { return this.m_sExecFunction; } set { this.m_sExecFunction = value; } } // 송수신 처리 성공 여부 bool m_bResultFlag; public bool ResultFlag { get { return this.m_bResultFlag; } set { this.m_bResultFlag = value; } } /// /// SOCKET /// private TcpSocketClient m_tcpClient = new TcpSocketClient(); /// /// 생성자 /// public frmTcpClientMsg() { InitializeComponent(); base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true); //this.UpdateStyles(); } private void frmTcpClientMsg_Load(object sender, EventArgs e) { try { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ""); CmMessage m_PosConfig = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + "PosConfig.INI"); string sFont = m_PosConfig.GetMessage("GLOBAL").GetMessageValue("Font"); FormManager.SetFormAllControlFont(this, sFont); long nScreenSizeUser = CmUtil.LongParse(m_PosConfig.GetMessage("GLOBAL").GetMessageValue("ScreenSizeUser")); FormManager.MovePopUpForm(this, false, nScreenSizeUser); picSearchMessage.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.SCH_MESSAGE_BOX); if (m_sMessageStr != "") lblMessage.Text = m_sMessageStr; this.TopMost = true; tmrStart.Enabled = true; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Process Exception !!! " + ex.Message); } } private void frmTcpClientMsg_FormClosing(object sender, FormClosingEventArgs e) { UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ""); } private void tmrStart_Tick(object sender, EventArgs e) { try { m_bResultFlag = false; tmrStart.Enabled = false; m_bSecondDisp = true; m_nSecondCount = 0; Thread thrSecondDisp = new Thread(new ThreadStart(OnNetworkIRT)); thrSecondDisp.Start(); OnSecondDisplay(); } catch(Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Process Exception !!! " + ex.Message); } finally { this.Close(); } } private void OnSecondDisplay() { try { while(m_bSecondDisp == true) { m_nSecondCount++; if(m_nSecondCount % 10 == 0) { lblMessage.Text = m_sMessageStr + " (" + (int)(m_nSecondCount / 10) + ")"; lblMessage.Update(); } Thread.Sleep(100); } } catch(Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Process Exception !!! " + ex.Message); } } /// /// TCP 클라이언트 실행 /// private void OnNetworkIRT() { try { m_bSecondDisp = true; // 대상 함수 획득 Type type = typeof(frmTcpClientMsg); MethodInfo method = type.GetMethod(m_sExecFunction); // 데이터 송수신 처리 ResultFlag = (bool)method.Invoke(this, new object[] { }); } catch(Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "Exception !!! " + ex.Message); } finally { m_bSecondDisp = false; } } /// /// 온라인쿠폰(중국) TCP 전문 송수신 처리 /// /// public bool ExecuteOnLineCoupon() { try { // 소캣 접속 처리 if (m_tcpClient.Connect(m_sServerIp, m_nServerPort) != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Connect Fail : {0},{1}", m_sServerIp, m_nServerPort)); return false; } // 데이터 송신 처리 if (m_tcpClient.SendData(m_bytSendByteData) != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Send Fail : {0},{1}", m_sServerIp, m_nServerPort)); return false; } // 데이터 수신 처리 byte[] byteRecv = new byte[4096]; int nRecvLen = m_tcpClient.RecvProcEndToETX(ref byteRecv, m_nTimeOut); if (nRecvLen <= 0) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Recv Fail : {0},{1}", m_sServerIp, m_nServerPort)); return false; } m_nRecvDataLen = nRecvLen; // 수신데이터 길이 m_bytRecvByteData = byteRecv; // 수신데이터 // ACK 데이터 송신 byte[] byteAck = new byte[3]; byteAck[0] = 0x02; // STX byteAck[1] = 0x06; // ACK byteAck[2] = 0x03; // ETX if (m_tcpClient.SendData(byteAck) != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Ack Send Fail : {0},{1}", m_sServerIp, m_nServerPort)); m_bResultFlag = false; // 실패 } else { m_bResultFlag = true; // 성공 } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } finally { m_tcpClient.Close(); } return m_bResultFlag; } /// /// 직원할인(중국) TCP 전문 송수신 처리 /// /// public bool ExecuteEmployeeChina() { try { // 소캣 접속 처리 if (m_tcpClient.Connect(m_sServerIp, m_nServerPort) != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Connect Fail : {0},{1}", m_sServerIp, m_nServerPort)); return false; } // 데이터 송신 처리 if (m_tcpClient.SendData(m_bytSendByteData) != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Send Fail : {0},{1}", m_sServerIp, m_nServerPort)); return false; } // 데이터 수신 처리 byte[] byteRecv = new byte[4096]; int nRecvLen = m_tcpClient.RecvProcEndToETX(ref byteRecv, m_nTimeOut); if (nRecvLen <= 0) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.WARNING_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", string.Format("SOCKET Recv Fail : {0},{1}", m_sServerIp, m_nServerPort)); return false; } m_nRecvDataLen = nRecvLen; // 수신데이터 길이 m_bytRecvByteData = byteRecv; // 수신데이터 m_bResultFlag = true; // 성공 } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } finally { m_tcpClient.Close(); } return m_bResultFlag; } } }