Пример #1
0
        /**
         * 클라이언트로 부터 UDP 메시지를 받는 함수
         * 메시지 구분에 따라서 데이터를 처리한다.
         */
        private void ReceiverClient(IAsyncResult res)
        {
            // if (res == currentAsyncResult)
            // {
            if (server != null)
            {
                try
                {
                    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, ListenPort);
                    byte[]     received         = server.EndReceive(res, ref RemoteIpEndPoint);
                    string     msg    = Encoding.UTF8.GetString(received);
                    string[]   msgArr = msg.Split(delimiterChar);

                    if (msgArr[0] == "ST")      // Process Status check
                    {
                        // 데이터베이스에 상태 등록
                        bool bl = stsProcess.stsUpdate(msgArr);
                        if (bl == false)
                        {
                            log("[ ProcessReceiver::ReceiverClient(info) ] database update error ... [" + msg + "]");
                        }
                        // 수신 받은 프로세스 상태 체크 값 배열을 구조체에 업데이트 하고
                        // 메인 화면에 출력한다.
                        stsMessage(msg);
                    }
                    else if (msgArr[0] == "FT")   // FTP file start/end send check
                    {
                        string client_ip = RemoteIpEndPoint.Address.ToString();
                        bool   bl        = ftsProcess.fileStsUpdate(msg, client_ip);
                        if (bl == true)
                        {
                            log("[ ProcessReceiver::ReceiverClient(info) ] file data status update [ok]");
                            ftsMessage(msg);
                        }

                        //ftpMessage(msg);
                    }
                    else if (msgArr[0] == "AT")   // FILE file start/end send check(STA)
                    {
                        string client_ip = RemoteIpEndPoint.Address.ToString();
                        bool   bl        = ftsProcess.fileStaUpdate(msg, client_ip);
                        if (bl == true)
                        {
                            log("[ ProcessReceiver::ReceiverClient(info) ] file data status update [ok] => STA");
                            ftsMessage(msg);
                        }
                    }
                    else if (msgArr[0] == "AM")   // Alarm message
                    {
                        string client_ip = RemoteIpEndPoint.Address.ToString();

                        log("client ip : " + client_ip);
                        bool bl = almProcess.almMessage(msg, client_ip);
                    }
                    //Process codes
                    log("[ ProcessReceiver::ReceiverClient(info) ] received msg : " + Encoding.UTF8.GetString(received));
                    //server.BeginReceive(new AsyncCallback(ReceiverClient), null);
                    server.BeginReceive(ReceiverClient, null);
                    // }
                }catch (Exception ex)
                {
                    log("[ ProcessReceiver::ReceiverClient(error) ] " + ex.ToString());
                    server.BeginReceive(ReceiverClient, null);
                }
            }
        }