private static void do_MainThread()
        {
            __RECOG_RESULT stRecogResult = new __RECOG_RESULT();
            __STAT_INFO    stStatInfo    = new __STAT_INFO();

            PROTOCOL_COMMON objProtCmn     = new PROTOCOL_COMMON();
            RECOGRESULT     objRecogResult = new RECOGRESULT();
            STATINFO        objStatInfo    = new STATINFO();

            byte[] szRecvBuff = new byte[1024];

            int    nRecvLength = 0;
            int    nRetVal     = 0;
            string strRetStr   = "";

            while (true)
            {
                if (stCliSock.bConn == false)
                {
                    Thread.Sleep(100);
                    continue;
                }

                szRecvBuff = objSockMgr.recvByteMsg(ref stCliSock, ref nRecvLength);
                if (nRecvLength <= 0)
                {
                    Thread.Sleep(500);
                    Console.WriteLine("Receive NO-DATA{0}", nRecvLength);
                    continue;
                }
                nRetVal = objProtCmn.chkMsg(szRecvBuff, nRecvLength);
                if (nRetVal != (int)PROTOCOL_COMMON.E_PROTOCOL_RET.SUCCESS)
                {
                    //objLtoS.getLprsMsg(szRecvBuff, nRecvLength);
                    strRetStr = "";
                    strRetStr = chkInstruction(szRecvBuff, ref stCliSock);
                    if (strRetStr.Contains("LPRS|"))
                    {
                        objRecogResult.getRecogResult(ref stRecogResult, ref szRecvBuff);
                    }
                    else if (strRetStr.Contains("ST|"))
                    {
                        lock (stCliSock.objLock)
                        {
                            stCliSock.lnResetTime = DateTime.UtcNow.Ticks;
                            stCliSock.bConn       = true;
                        }

                        objStatInfo.getStatInfo(ref stStatInfo, ref szRecvBuff);
                    }
                    else
                    {
                        //do something
                    }
                }
                else
                {
                    Console.WriteLine(Encoding.ASCII.GetString(szRecvBuff));
                    continue;
                }
            }
        }
        public void recvMsg(ref SOCK_INFO stSock)
        {
            __RECOG_RESULT stRecogResult = new __RECOG_RESULT();
            __STAT_INFO    stStatInfo    = new __STAT_INFO();

            RECOGRESULT objRecogResult = new RECOGRESULT();
            STATINFO    objStatInfo    = new STATINFO();

            int nRecvLength = 0;

            byte[] szRcvBuff = new byte[1024];
            string strBuff;

            if (stSock.bConn == false)
            {
                //return (int)ENUM_VALUE_SOCKETMGR.FAILED_NULL_SOCKET;
                Thread.Sleep(500);              // just for TEST
                //Console.WriteLine("Now disconnected to client!");
                return;
            }
            //stSock.lnResetTime = DateTime.UtcNow.Ticks; // just for TEST
            try
            {
                nRecvLength = stSock.objSock.Receive(szRcvBuff);
            }
            catch (Exception eCmn)
            {
                Thread.Sleep(500);
                Console.WriteLine("Exception!! Source : {0}, Message : {1}",
                                  eCmn.Source, eCmn.Message);
                return;
            }
            if (nRecvLength <= 0)
            {
                Thread.Sleep(500);
                Console.WriteLine("Receive NO-DATA{0}", nRecvLength);
                //return (int)ENUM_VALUE_SOCKETMGR.RECV_NO_DATA;
                return;
            }
            else
            {
                strBuff = Encoding.ASCII.GetString(szRcvBuff, 0, nRecvLength);
                Console.WriteLine(strBuff);
                if (szRcvBuff[nRecvLength - 1] != 0x03)
                {
                    Console.WriteLine("Invalid ETX in receive message!");
                }
                else if (strBuff.Contains("LPRS|"))
                {
                    objRecogResult.getRecogResult(ref stRecogResult, ref szRcvBuff);
                }
                else if (strBuff.Contains("ST|"))
                {
                    // re-up coonnection check flag
                    lock (stSock.objLock)
                    {
                        stSock.lnResetTime = DateTime.UtcNow.Ticks;
                        stSock.bConn       = true;
                    }

                    objStatInfo.getStatInfo(ref stStatInfo, ref szRcvBuff);
                }
                else
                {
                    Console.WriteLine("Invalid Instruction!");
                }
                //return (int)ENUM_VALUE_SOCKETMGR.SUCCESS;
                return;
                //nRecvLength = 0;
            }
        }