예제 #1
0
        public void runThread()
        {
            ArrayList ipList = new ArrayList();

            ServerInfo serverInfo = aemsClient.getServerInfo();

            ipList = serverInfo.getIPList();
            int port = serverInfo.getPort();

            bool connectSuccess = false;

            while (!connectSuccess)
            {
                for (int i = 0; i < ipList.Count; i++)
                {
                    string ip = (string)ipList[0];

                    sock = new TcpClient();

                    var result = sock.BeginConnect(ip, port, null, null);

                    var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(CONNECTION.CONNECTION_TIMEOUT));

                    if (sock != null && sock.Connected)
                    {
                        connectSuccess = true;
                        logwrite.write("AEMS Sender", "Connection SUCCESS IP [" + ip + "] PORT [" + port + "]");
                        break;
                    }
                    else
                    {
                        logwrite.write("AEMS Sender", "Connection Fail IP [" + ip + "] PORT [" + port + "]");
                    }
                }
            }

            if (sock != null)
            {
                sock.Close();
            }

            aemsClient.reConnect();
        }
예제 #2
0
        public void runThread()
        {
            try
            {
                /*
                 * String readLine = "";
                 *
                 * while (true)
                 * {
                 *  readLine = reader.ReadLine();
                 *  logwrite.write("AEMSReceiver runThread", readLine);
                 * }
                 * */

                logwrite.write("AEMSReceiver runThread", "\t AEMS Receiver Thread Start!!");

                int    BUFFERSIZE = sock.ReceiveBufferSize;
                byte[] buffer     = new byte[BUFFERSIZE];
                int    bytelen    = 0;
                while ((bytelen = writeStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    string message = Encoding.UTF8.GetString(buffer, 0, bytelen);
                    logwrite.write("recv", message);
                }
            }
            catch (Exception e)
            {
                if (reader != null)
                {
                    reader.Close();
                    reader = null;
                }
                if (writeStream != null)
                {
                    writeStream.Close();
                    writeStream = null;
                }
                logwrite.write("AEMSReceiver runThread", e.ToString());
            }
            finally
            {
                aemsClient.sessionClose();

                if (!aemsClient.getDisconnectReq())
                {
                    logwrite.write("AEMSReceiver runThread", "########## AEMS Session Closed !! ##########");

                    Event evt = new Event();
                    evt.setEvtCode(EVENT_TYPE.ON_DISCONNECTION);
                    evt.setEvtMsg("AEMS Session Disconnected");
                    evt.setCurAemsIP(aemsClient.getCurrentServerIP());
                    finesseObj.raiseEvent(evt);

                    if (aemsClient.reConnect() != ERRORCODE.SUCCESS)
                    {
                        // 서버 세션이 끊어지고, 재접속이 안될시 서버 프로세스가 올라올때까지 감지하는 스레드 시작한다.

                        ISocketSender aemsSender = new AEMSSender(logwrite, aemsClient);
                        ThreadStart   ts         = new ThreadStart(aemsSender.runThread);
                        Thread        thread     = new Thread(ts);
                        thread.Start();
                    }
                }
            }
        }