public static byte[] GetRetFaxPacket(DbModule.RECV_FAX_DATA_PSI p_info)           //WCD(2014-05-28)
        {
            string strHead   = "";
            string strBody   = "";
            string strPacket = "";

            byte[] bprPacket = new byte[RET_FAX_PACKET_LEN];
            ClearPacket(ref bprPacket);
            try
            {
                strHead = String.Format("{0:3}{1:D06}{2:yyyyMMddHHmmss}{3,-50}{4,-10}{5,2}{6,-30}{7,-50}{8,2}{9,-50}{10,-50}{11,-30}{12,1}{13,1}{14,1}{15,1}{16,8}{17,6}{18,1}{19,-30}{20,-200}{21,2}{22,52}"
                                        , "4.0", RET_FAX_PACKET_LEN, DateTime.Now, "RETURN FAX", "1010", "01", p_info.CID, "", "02", "RETFAX", "RETURN FAX", p_info.SERVICE_FAXNO, "N", "N", "N", "N", "", "", "1", ".", "", "", "");
                strBody   = String.Format("{0,-20}{1,-20}{2,8}{3,4}{4,2}{5,-50}", p_info.CID, p_info.SERVICE_FAXNO, p_info.RECV_DATE, p_info.RECV_TIME, p_info.PAGE_CNT, p_info.DEPT_NAME);
                strPacket = strHead + strBody;
                byte[] tmpPacket = Encoding.Default.GetBytes(strPacket);

                Buffer.BlockCopy(tmpPacket, 0, bprPacket, 0, bprPacket.Length);
            }
            catch
            {
                bprPacket = null;
            }

            return(bprPacket);
        }
        void SendRecvNoti(DbModule.RECV_FAX_DATA_PSI p_reqItem)
        {
            List <string> notiUsers = new List <string>();

            //// 부서, 업무에 속한 사용자 아이디 얻음.
            if (!string.IsNullOrEmpty(p_reqItem.DEPT_CD) || !string.IsNullOrEmpty(p_reqItem.TASK_ID))
            {
                DbModule.Instance.GetReceiveNotiUsers(p_reqItem.DEPT_CD, p_reqItem.TASK_ID, ref notiUsers);
            }

            //// 개인팩스함으로 수신
            if (!string.IsNullOrEmpty(p_reqItem.USER_ID))
            {
                notiUsers.Clear();
                notiUsers.Add(p_reqItem.USER_ID);
            }

            //// 사용자에게 수신 알람 메시지 전송
            foreach (string userId in notiUsers)
            {
                if (!UdpSingle.Instance.SendMessageEx(userId, p_reqItem))
                {
                    LogError(string.Format("팩스수신 알림메시지 전송 실패. USER_ID:{0}", userId));
                }

                Thread.Sleep(10);
            }

            LogMessage("팩스수신건 알림메시지 전송 완료.", p_reqItem);
        }
        void SendSendToLTM(DbModule.RECV_FAX_DATA_PSI p_reqItem)
        {
            string strMsg = string.Format("LOOP_FAX|{0}", p_reqItem.SERVICE_FAXNO);

            byte[] buffer = Encoding.Default.GetBytes(strMsg);

            IPAddress ipAddr;

            if (!IPAddress.TryParse(Config.LTM_IP, out ipAddr))
            {
                LogMessage(string.Format("LOOP 팩스 IP 파싱 실패. IP={0}", Config.LTM_IP));
                return;
            }

            IPEndPoint ep = new IPEndPoint(ipAddr, Config.LTM_PORT);

            using (Socket udpSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
            {
                int nLen = udpSock.SendTo(buffer, 0, buffer.Length, SocketFlags.None, ep);
                if (nLen <= 0)
                {
                    LogMessage(string.Format("LOOP 팩스 데이터 전송 실패. IP={0}", Config.LTM_IP));
                }

                LogMessage("LOOP FAX 결과 전송 완료.", p_reqItem);
            }
        }
        bool PostProcessingReq(DbModule.RECV_FAX_DATA_PSI p_reqItem)
        {
            LogMessage("팩스수신 후처리 시작.", p_reqItem);

            if (p_reqItem.SERVICE_FAXNO == Config.LOOP_FAXNO)
            {
                // LOOP 송신에 대한 결과 송신.
                // PSI --> LTM
                SendSendToLTM(p_reqItem);
            }
            else
            {
                // 수신 알림메시지 처리.
                SendRecvNoti(p_reqItem);
            }

            // E-Mail 처리.
            SendEMail(p_reqItem);

            // 대리자 처리.
            SendProxyUser(p_reqItem);

            // 리턴팩스 처리 - 우리카드 커스터마이징
            //SendReturnFax(p_reqItem);

            LogMessage("팩스수신 후처리 완료.", p_reqItem);

            return(true);
        }
 private bool SendToRetFax(DbModule.RECV_FAX_DATA_PSI p_info)           //WCD(2014-05-28)
 {
     //string faxErr = "N";
     byte[] m_postOutboundPacket = GetRetFaxPacket(p_info);
     if (m_postOutboundPacket == null)
     {
         LogError("RET FAX Packet 생성실패");
         return(false);
     }
     return(SendPostOutboundPacket(m_postOutboundPacket));
 }
 private void LogMessage(string message, DbModule.RECV_FAX_DATA_PSI p_info, RESULT db_result = RESULT.EMPTY)
 {
     LogMessage(String.Format("[RESULT:{0}] [FAX_ID:{1}][DEPT_CD:{2}][TASK_ID:{3}][USER_ID:{4}][CID:{5}][CID_NAME:{6}][EMAIL_NOTIFY_YN:{7}][EMAIL_NOTIFY:{8}] {9}",
                              db_result,
                              p_info.FAX_ID,
                              p_info.DEPT_CD,
                              p_info.TASK_ID,
                              p_info.USER_ID,
                              p_info.CID,
                              p_info.CID_NAME,
                              p_info.EMAIL_NOTIFY_YN,
                              p_info.EMAIL_NOTIFY,
                              message
                              ));
 }
        void SendReturnFax(DbModule.RECV_FAX_DATA_PSI p_reqItem)
        {
            //LogError(string.Format("RET FAX => |{0}|{1}|", Config.RET_DEPT_CD, m_recvInfo.DEPT_CD) );
            if (Config.RET_DEPT_CD.CompareTo(p_reqItem.DEPT_CD) == 0)                //WCD 2014-06-24
            //if (Config.RET_DEPT_CD.IndexOf(m_recvInfo.DEPT_CD) >= 0)
            {
                if (!this.SendToRetFax(p_reqItem))
                {
                    LogError("리턴팩스 전송 도중 오류가 발생하였습니다!!");
                    // AlarmAPI.Instance.SendFaultAlarm((UInt32)RESULT.F_DB_UPDATE_ERROR);
                }

                LogMessage("팩스수신건 리턴팩스 처리 완료.", p_reqItem);
            }
        }
        void SendEMail(DbModule.RECV_FAX_DATA_PSI p_reqItem)
        {
            if (p_reqItem.EMAIL_NOTIFY_YN == "Y")
            {
                bool isSuccess = MailHelper.SendMail(p_reqItem.EMAIL_NOTIFY);
                //if (this.InsertProcessLog(m_recvInfo.FAX_ID, isSuccess,
                //    "사용자에게 EMail 알림 보내기",
                //    "보낸 EMail 주소 : " + m_recvInfo.EMAIL_NOTIFY,
                //    "SMTP IP : " + Config.SMTP_IP,
                //    "SMTP Port : " + Config.SMTP_PORT.ToString()
                //    ) != RESULT.SUCCESS)
                if (this.InsertProcessLog(p_reqItem.FAX_ID, isSuccess, "Send EMail") != RESULT.SUCCESS)
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 (EMAIL 알림 보내기)");
                    // AlarmAPI.Instance.SendFaultAlarm((UInt32)RESULT.F_DB_UPDATE_ERROR);
                }

                LogMessage("팩스수신건 이메일 전송 완료.", p_reqItem);
            }
        }
        void SendProxyUser(DbModule.RECV_FAX_DATA_PSI p_reqItem)
        {
            if (p_reqItem.PROXY_USER_ID != "")
            {
                bool isSuccess = UdpSingle.Instance.SendMessage(p_reqItem.PROXY_USER_ID);
                //if (this.InsertProcessLog(m_recvInfo.FAX_ID, isSuccess,
                //    "대리자에게 UDP 메세지 보내기",
                //    "대리자 ID : " + m_recvInfo.PROXY_USER_ID,
                //    "FAS IP : " + Config.FAS_IP,
                //    "FAS Port : " + Config.FAS_PORT.ToString()
                //    ) != RESULT.SUCCESS)
                if (this.InsertProcessLog(p_reqItem.FAX_ID, isSuccess, "Send UDP Message") != RESULT.SUCCESS)
                {
                    LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 (UDP 메세지 보내기)");
                    // AlarmAPI.Instance.SendFaultAlarm((UInt32)RESULT.F_DB_UPDATE_ERROR);
                }

                if (p_reqItem.PROXY_EMAIL_NOTIFY_YN == "Y")
                {
                    isSuccess = MailHelper.SendMail(p_reqItem.PROXY_EMAIL_NOTIFY);
                    //if (this.InsertProcessLog(m_recvInfo.FAX_ID, isSuccess,
                    //    "사용자에게 EMail 알림 보내기",
                    //    "보낸 EMail 주소 : " + m_recvInfo.PROXY_EMAIL_NOTIFY,
                    //    "SMTP IP : " + Config.SMTP_IP,
                    //    "SMTP Port : " + Config.SMTP_PORT.ToString()
                    //    ) != RESULT.SUCCESS)
                    if (this.InsertProcessLog(p_reqItem.FAX_ID, isSuccess, "Send EMail") != RESULT.SUCCESS)
                    {
                        LogError("작업완료 상태를 DB에 반영하는 도중 오류가 발생하였습니다 (EMAIL 알림 보내기)");
                        // AlarmAPI.Instance.SendFaultAlarm((UInt32)RESULT.F_DB_UPDATE_ERROR);
                    }
                }

                LogMessage("팩스수신건 대리자 처리 완료.", p_reqItem);
            }
        }
Esempio n. 10
0
        /// <summary>
        /// UDP 메세지 보내기
        /// </summary>
        /// <param name="userId">파라미터1 : USER_ID</param>
        /// <param name="message">파라미터2 : 수신 메세지</param>
        public bool SendMessageEx(string userId, DbModule.RECV_FAX_DATA_PSI p_psiData)
        {
            bool result = false;

            try
            {
                string msg = Config.RECV_NOTIFY_MESSAGE;

                //{USER_ID},{DEPT_CD},{DEPT_NAME},{TASK_NAME},{CID},{CID_NAME},{CURR_TIME}

                if (msg.Contains("{USER_ID}"))
                {
                    msg = msg.Replace("{USER_ID}", p_psiData.USER_ID);
                }

                if (msg.Contains("{DEPT_CD}"))
                {
                    msg = msg.Replace("{DEPT_CD}", p_psiData.DEPT_CD);
                }

                if (msg.Contains("{DEPT_NAME}"))
                {
                    msg = msg.Replace("{DEPT_NAME}", p_psiData.DEPT_NAME);
                }

                if (msg.Contains("{TASK_NAME}"))
                {
                    msg = msg.Replace("{TASK_NAME}", p_psiData.TASK_NAME);
                }

                if (msg.Contains("{CID}"))
                {
                    msg = msg.Replace("{CID}", p_psiData.CID);
                }

                if (msg.Contains("{CID_NAME}"))
                {
                    msg = msg.Replace("{CID_NAME}", p_psiData.CID_NAME);
                }

                if (msg.Contains("{CURR_TIME}"))
                {
                    msg = msg.Replace("{CURR_TIME}", string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                }

                /// 파라미터 만들기
                MessageStream notify =
                    MessageStream.Notice
                    (
                        MessagePacketNameEnum.NTFTM,
                        userId,
                        Config.SYSTEM_PROCESS_ID,
                        NotifyTextMessageType.INBOUND.ToString(),
                        Config.RECV_NOTIFY_TITLE,
                        msg,
                        NotifyTextMessageUrlType.UrlWithFaxboxId_UserId.ToString(),
                        //NotifyTextMessageUrlType.UrlWithUserId.ToString(),
                        Config.RECV_FAXBOX_URL
                    );

                /// STX, ETX 추가
                byte[] convertBytes = Encoding.Default.GetBytes(notify.ToString());
                byte[] messageBytes = new byte[convertBytes.Length + 2];
                messageBytes[0] = MessageConfiguration.STX;
                messageBytes[messageBytes.Length - 1] = MessageConfiguration.ETX;
                Buffer.BlockCopy(convertBytes, 0, messageBytes, 1, convertBytes.Length);

                /// UDP 보내기
                udpSocket.Send(Config.FAS_IP, Config.FAS_PORT, Encoding.Default.GetString(messageBytes));

                result = true;
            }
            catch (Exception ex)
            {
                udpSocket.LogWriteErr(ex, "UdpSingle()", "UdpSocket()", "SendMessage()");
            }
            return(result);
        }