/** * 클라이언트로 부터 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); } } }