//using System;
//using System.Net;
//using System.Net.Sockets;
//using System.Text;
//using System.Threading;

//using Cosmos.BaseFrame;
//using Cosmos.UserFrame;
//using System.IO;

//namespace Cosmos.Common
//{
//    /// <summary>
//    /// TCP 클라이언트 동기화 소켓
//    /// </summary>
//    public class TcpSocketClient
//    {
//        public Socket m_sckClient;
        
//        /// <summary>
//        /// 서버 IP
//        /// </summary>
//        private string m_IpAddr = "";
//        /// <summary>
//        /// 서버 PORT
//        /// </summary>
//        private int m_PortNo;
        
//        public TcpSocketClient()
//        {
//        }

//        /// <summary>
//        /// 소켓 접속 처리
//        /// </summary>
//        /// <param name="sIpAddr"></param>
//        /// <param name="nPortNo"></param>
//        /// <returns></returns>
//        public int Connect(string sIpAddr, int nPortNo)
//        {
//            m_IpAddr = sIpAddr;
//            m_PortNo = nPortNo;
            
//            try
//            {
//                IPAddress _IPAddr;
//                if (CmUtil.IsNumber(m_IpAddr.Replace(".", "")) == false)
//                {
//                    IPHostEntry hostInfo = Dns.GetHostEntry(m_IpAddr);          // Get DNS host information.
//                    IPAddress[] IPaddresses = hostInfo.AddressList;             // Get the DNS IP addresses associated with the host.

//                    _IPAddr = IPaddresses[0];
//                }
//                else
//                {
//                    _IPAddr = IPAddress.Parse(m_IpAddr);
//                }
//                IPEndPoint _EP = new IPEndPoint(_IPAddr, m_PortNo);

//                Socket tempSocket = new Socket(_EP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

//                tempSocket.Connect(_EP);
//                if (tempSocket.Connected == false)
//                {
//                    UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
//                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
//                        string.Format("Connect Fail  = {0} : {1}", sIpAddr, nPortNo));
//                    return BaseCom.NG;
//                }

//                m_sckClient = tempSocket;
                
//                return BaseCom.OK;
//            }
//            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);
//                return BaseCom.NG1;
//            }
//        }

//        /// <summary>
//        /// 소켓 종료 처리
//        /// </summary>
//        public void Close()
//        {
//            try
//            {
//                if (m_sckClient.Connected == true)
//                {
//                    m_sckClient.Blocking = false;
//                    m_sckClient.Shutdown(SocketShutdown.Both);
//                    m_sckClient.Close();
//                }
//            }
//            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);
//            }

//            m_sckClient = null;
//        }

//        /// <summary>
//        /// 데이터 송신 처리
//        /// </summary>
//        /// <param name="byteSenddata"></param>
//        /// <returns></returns>
//        public int SendData(byte[] byteSenddata)
//        {
//            int nByte = 0;

//            try
//            {
//                if (this.m_sckClient != null)
//                {
//                    nByte = this.m_sckClient.Send(byteSenddata, byteSenddata.Length, SocketFlags.None);
//                }

//                if (nByte != byteSenddata.Length)         // 송신실패
//                {
//                    UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
//                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SendData Fail");
//                    return BaseCom.NG;
//                }

//                UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, 
//                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
//                    CmUtil.RPadH("[SEND" + ":" + m_IpAddr + ":" + m_PortNo, 27) + "] " + Encoding.Default.GetString(byteSenddata));
//                return BaseCom.OK; 
//            }
//            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);
//                return BaseCom.NG1;
//            }
//        }

//        /// <summary>
//        /// 지정길이 데이터 수신 처리
//        /// </summary>
//        /// <param name="byteRecvData"></param>
//        /// <param name="nRecvDataLen"></param>
//        /// <param name="nTimeOut"></param>
//        /// <returns></returns>
//        public int RecvProc(ref byte[] byteRecvData, int nRecvDataLen, int nTimeOut)
//        {
//            int intRecvSize = 0;

//            try
//            {
//                if (this.m_sckClient != null)
//                {
//                    m_sckClient.ReceiveTimeout = nTimeOut;

//                    intRecvSize = m_sckClient.Receive(byteRecvData, nRecvDataLen, SocketFlags.None);
//                }

//                if (intRecvSize > 0)
//                {
//                    UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
//                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
//                        CmUtil.RPadH("[RECV" + ":" + m_IpAddr + ":" + m_PortNo, 27) + "] " + Encoding.Default.GetString(byteRecvData, 0, intRecvSize));
//                }
//            }
//            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);

//            }
//            return intRecvSize;
//        }


//        /// <summary>
//        /// 데이터 수신 처리( ETX 나올때 까지 수신)
//        /// </summary>
//        /// <param name="byteRecvData"></param>
//        /// <param name="nTimeOut"></param>
//        /// <returns></returns>
//        public int RecvProcEndToETX(ref byte[] byteRecvData, int nTimeOut)
//        {
//            int intRecvSize = 0;

//            try
//            {
//                if (this.m_sckClient != null)
//                {
//                    m_sckClient.ReceiveTimeout = nTimeOut;

//                    while (true)
//                    {
//                        byte[] byteRecvTemp = new byte[1];
//                        int nSize = m_sckClient.Receive(byteRecvTemp, 1, SocketFlags.None);
//                        if ( nSize <= 0 )
//                        {
//                            if (intRecvSize > 0)
//                            {
//                                UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
//                                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
//                                    CmUtil.RPadH("[RECV FAIL" + ":" + m_IpAddr + ":" + m_PortNo, 27) + "] " + Encoding.Default.GetString(byteRecvData, 0, intRecvSize));
//                            }
//                            return 0;
//                        }
//                        byteRecvData[intRecvSize] = byteRecvTemp[0];
//                        intRecvSize++;

//                        // ETX 수신시 까지 계속 수신
//                        if (byteRecvTemp[0] == 0x03) break;    
//                    }
//                }

//                if (intRecvSize > 0)
//                {
//                    UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
//                        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
//                        CmUtil.RPadH("[RECV" + ":" + m_IpAddr + ":" + m_PortNo, 27) + "] " + Encoding.Default.GetString(byteRecvData, 0, intRecvSize));
//                }
//            }
//            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);

//            }
//            return intRecvSize;
//        }
//    }
//}
