Exemple #1
0
 public Notice(MsgrConnection connection, NoticeObj obj)
 {
     InitializeComponent();
     this.connection = connection;
     this.obj = obj;
     SetNoticeInfo();
 }
Exemple #2
0
 public Notice(MsgrConnection connection, NoticeObj obj)
 {
     InitializeComponent();
     this.connection = connection;
     this.obj        = obj;
     SetNoticeInfo();
 }
Exemple #3
0
 public Notice(MsgrConnection connection, string[] msgToken)
 {
     InitializeComponent();
     this.connection = connection;
     obj             = new NoticeObj(msgToken);
     SetNoticeInfo();
 }
Exemple #4
0
 private void BtnSend_Click(object sender, EventArgs e)
 {
     if (TextBoxTitle.Text.Length == 0)
     {
         MessageBox.Show("공지 제목을 적어 주세요", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
         TextBoxTitle.Focus();
         return;
     }
     if (richTextBoxContent.Text.Length != 0)
     {
         String    NoticeTime = DateTime.Now.ToString();
         NoticeObj obj        = new NoticeObj();
         obj.IsEmergency = ToggleButtonNormalNotice.Pressed;
         obj.Title       = TextBoxTitle.Text;
         obj.Content     = richTextBoxContent.Text;
         obj.NoticeTime  = Utils.TimeKey();
         NoticeRegisterRequested(this, new CustomEventArgs(obj));
         Close();
     }
     else
     {
         MessageBox.Show("공지할 내용을 적어 주세요", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
         richTextBoxContent.Focus();
     }
 }
Exemple #5
0
 public Notice(MsgrConnection connection, string[] msgToken)
 {
     InitializeComponent();
     this.connection = connection;
     obj = new NoticeObj(msgToken);
     SetNoticeInfo();
 }
        private void BtnSend_Click(object sender, EventArgs e)
        {

            if (TextBoxTitle.Text.Length == 0)
            {
                MessageBox.Show("공지 제목을 적어 주세요", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
                TextBoxTitle.Focus();
                return;
            }
            if (richTextBoxContent.Text.Length != 0)
            {
                String NoticeTime = DateTime.Now.ToString();
                NoticeObj obj = new NoticeObj();
                obj.IsEmergency = ToggleButtonNormalNotice.Pressed;
                obj.Title = TextBoxTitle.Text;
                obj.Content = richTextBoxContent.Text;
                obj.NoticeTime = Utils.TimeKey();
                NoticeRegisterRequested(this, new CustomEventArgs(obj));
                Close();
            }
            else
            {
                MessageBox.Show("공지할 내용을 적어 주세요", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
                richTextBoxContent.Focus();
            }
        }
 public NoticeObj ToNoticeObj()
 {
     NoticeObj noticeObj = new NoticeObj();
     noticeObj.NoticeTime = this.noticeTime;
     noticeObj.Content = this.content;
     noticeObj.IsEmergency = this.isEmergency;
     noticeObj.SenderId = this.senderId;
     noticeObj.SeqNum = this.seqNum;
     noticeObj.Title = this.title;
     return noticeObj;
 }
        public NoticeObj ToNoticeObj()
        {
            NoticeObj noticeObj = new NoticeObj();

            noticeObj.NoticeTime  = this.noticeTime;
            noticeObj.Content     = this.content;
            noticeObj.IsEmergency = this.isEmergency;
            noticeObj.SenderId    = this.senderId;
            noticeObj.SeqNum      = this.seqNum;
            noticeObj.Title       = this.title;
            return(noticeObj);
        }
 /// <summary>
 /// 실시간 공지사항 수신
 /// </summary>
 private void PopUpNoticeOnInstantNoticeReceived(object sender, CustomEventArgs e) //n|메시지 | 발신자id | mode | noticetime |제목
 {
     try
     {
         NoticeObj obj   = (NoticeObj)e.GetItem;
         Notice    nform = new Notice(connection, obj);
         nform.Show();
         nform.Activate();
     }
     catch (Exception exception)
     {
         Logger.error(exception.ToString());
     }
 }
        public void RegisterNotice(object sender, CustomEventArgs e)//bool isEmergency, string title, string content)
        {
            try
            {
                NoticeObj obj = (NoticeObj)(e.GetItem);

                if (noticeresultform == null || noticeresultform.IsDisposed)
                {
                    noticeresultform = new NoticeResultForm();
                }
                noticeresultform.AddItem(obj);
                connection.SendMsgRegisterNotice(obj);
            }
            catch (Exception ex)
            {
                Logger.error(ex.ToString());
            }
        }
        //공지사항 목록 아이템 선택
        private void listView_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (listView.SelectedItems.Count != 0)
                {
                    ListViewItem mitem  = listView.SelectedItems[0];
                    NoticeObj    notice = (NoticeObj)mitem.Tag;

                    //실시간 공지사항 수신시 확인결과 전송 처리
                    Notice nform = new Notice(connection, notice);
                    nform.Show();
                    nform.Activate();

                    this.TopMost   = false;
                    mitem.Selected = false;
                }
            }
            catch (Exception exception)
            {
                Logger.error(exception.ToString());
            }
        }
        /// <summary>
        /// 수신된 메시지를 분석하여 각 요청에 맞게 처리
        /// </summary>
        /// <param name="obj">ArrayList로 형변환할 Object</param>
        protected void MsgFilter(object obj, IPEndPoint iep)
        {
            try
            {
                string msg = ((string)obj).Trim(); //수신 메시지
                string tempFormKey;
                string[] tempMsg = msg.Split('|');
                string code = tempMsg[0];

                switch (code)
                {
                    #region "f"//로그인 실패시(f|n or p)
                    case "f":
                        {
                            isLoggedOn = false;
                            string errmsg;
                            if (tempMsg[1].Equals("n"))
                                errmsg = "등록되지 않은 사용자 입니다.";
                            else
                                errmsg = "비밀번호가 틀렸습니다.";
                            OnLoginFailed(new CustomEventArgs(errmsg));
                        }
                        break;
                    #endregion

                    #region "g"//로그인 성공시 (g|name|team|company|com_cd|db_port)
                    case "g": //로그인 성공시 (g|name|team|company|com_cd|db_port)
                        isLoggedOn = true;
                        ConfigHelper.DbServerIp = serverIP;
                        ConfigHelper.DbPort = Convert.ToInt16(tempMsg[5]);

                        //서버측에서 전달된 이름 저장
                        ConfigHelper.Id = ConfigHelper.TryId;
                        ConfigHelper.Pass = ConfigHelper.TryPass;
                        ConfigHelper.CompanyCode = tempMsg[4];
                        ConfigHelper.CompanyName = tempMsg[3];
                        Logger.info("로그인 성공");
                        ConfigHelper.Name = tempMsg[1];
                        ConfigHelper.TeamName = tempMsg[2];

                        OnLoginPassed(new CustomEventArgs());

                        if (checkThread == null)
                        {
                            checkThread = new Thread(new ThreadStart(SendCheck));
                            checkThread.Start();
                            Logger.info("SendCheck 스레드 시작");
                        }

                        break;
                    #endregion

                    #region "a"//재로그인 이미 로그인상태알려줌
                    case "a":  //중복로그인 시도를 알려줌
                        isLoggedOn = false;
                        ConfigHelper.Id = ConfigHelper.TryId;
                        ConfigHelper.Pass = ConfigHelper.TryPass;
                        OnLoginDupped();
                        break;
                    #endregion

                    #region "M"//다른 클라이언트 목록 및 접속상태 정보(M|팀이름|id!멤버이름|id!멤버이름)
                    case "M": //다른 클라이언트 목록 및 접속상태 정보(M|팀이름|id!멤버이름|id!멤버이름)
                        if (tempMsg[1].Equals("e"))
                        { //모든 팀트리 정보 전송완료 메시지일 경우 -> Client_Form을 로그인 상태로 하위 구성요소를 활성화 한다.
                            OnTeamListReceiveDone();
                        }
                        else
                        { // 팀트리 정보를 수신한 경우
                            if (tempMsg.Length > 2)
                            {
                                Members.AddMembers(msg);
                                string teamName = tempMsg[1];
                                OnTeamListReceived(new CustomEventArgs(teamName));
                            }
                        }
                        break;
                    #endregion

                    #region "y"//로그인 Client 리스트 상태값
                    case "y":    //로그인 Client 리스트 y|id|상태값|ipaddress 
                        {
                            MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                            memberObj.Status = tempMsg[2];
                            //1. 로그인 리스트 테이블에 추가
                            Members.AddLoginUser(tempMsg[1], tempMsg[3]);
                            //2. memTree 뷰에 로그인 사용자 상태 변경
                            OnMemberStatusReceived(new CustomEventArgs(memberObj));
                            this.OnMemberStatusReceived(new CustomEventArgs(memberObj));
                            break;
                        }
                    #endregion
                        
                    #region "u"//서버측에서 강제 로그아웃 메시지 수신한 경우
                    case "u": //서버측에서 강제 로그아웃 메시지 수신한 경우
                        isLoggedOn = false;
                        OnForcedLogoutNotified();
                        break;
                    #endregion

                    #region "d"//상대방 대화메시지
                    case "d":  //상대방 대화메시지일 경우 (d|Formkey|id/id/...|name|메시지)
                        {
                            ChatObj chatObj = new ChatObj(tempMsg);
                            if (!chatObj.UserId.Equals(ConfigHelper.Id))
                            {
                                if (ChatForms.Contain(chatObj.ChatKey))
                                 //이미 발신자와 채팅중일 경우
                                    OnChatMsgAdded(new CustomEventArgs(chatObj));
                                
                                else
                                  //새로운 대화요청일 경우, 대화창 생성
                                    OnNewChatMsgReceived(new CustomEventArgs(chatObj));
                            }
                        }
                        break;
                    #endregion

                    #region "c"//대화중 초대
                    case "c":  //c|formkey|id/id/..|name  //대화중 초대가 일어난 경우
                        {
                            ChatObj chatObj = new ChatObj(tempMsg);
                            if (ChatForms.Contain(chatObj.ChatKey))
                                OnChatterInvited(new CustomEventArgs(chatObj));
                            else
                                Logger.info(string.Format("'c' key[{0}]를 갖는 채팅창이 존재하지 않음.", chatObj.ChatKey));
                        }
                        break;
                    #endregion

                    #region "C"//보낸공지 읽음확인 수신
                    case "C":  //보낸공지 읽음확인 수신(C|확인자id|noticeid)
                        OnNoticeCheckNotified(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region "q"|"dc"//다자 대화중 상대방이 대화창 나감
                    case "q": //다자 대화중 상대방이 대화창 나감 (q|Formkey|id)
                    case "dc": //다자 대화중 상대방이 연결 끊김 (dc|Formkey|id)
                        {
                            ChatObj chatObj = new ChatObj(tempMsg);
                            if (ChatForms.Contain(chatObj.ChatKey))
                                OnChatterQuit(new CustomEventArgs(chatObj));
                            else
                                Logger.info(string.Format("'q' key[{0}]를 갖는 채팅창이 존재하지 않음.", chatObj.ChatKey));
                        }
                        break;
                    #endregion

                    #region "m"//메모를 수신한 경우
                    case "m": //메모를 수신한 경우 m|name|id|message|수신자id
                        {
                            MemoObj memoObj = new MemoObj(tempMsg);
                            OnMemoMsgReceived(new CustomEventArgs(memoObj));
                            MemoUtils.MemoFileWrite(ConfigHelper.Id, memoObj);
                            break;
                        }
                    #endregion

                    #region "i"//사용자 로그인 알림
                    case "i":  //추가 로그인 상담원일 경우  형태 : i|id|소속팀명|ip|이름
                        {
                            MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                            memberObj.Status = MsgrUserStatus.ONLINE;
                            //1. 로그인 리스트 테이블에 추가
                            Members.AddLoginUser(tempMsg[1], tempMsg[3]);

                            //2. memTree 뷰에 로그인 사용자 상태 변경
                            OnMemberStatusReceived(new CustomEventArgs(memberObj));

                            //3. 각 채팅창 key변경 및 채팅창 노드/상태변경
                            OnChatterStatusReceived(new CustomEventArgs(memberObj));

                            //4. 로그인 했음 메시지 창 띄움
                            // 추후 구현
                        }
                        break;
                    #endregion

                    #region "o"//사용자 로그아웃 알림
                    case "o":  //로그아웃 상담원이 발생할 경우  o|id|소속
                        {
                            MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                            memberObj.Status = MsgrUserStatus.LOGOUT;
                            //1. 로그인 리스트 테이블에서 삭제
                            Members.RemoveLoginUser(tempMsg[1]);
                            //2. memTree 뷰에 로그아웃 사용자 상태 변경
                            OnMemberStatusReceived(new CustomEventArgs(memberObj));

                            //3. 각 채팅창 key변경 및 채팅창 노드/상태변경
                            OnChatterStatusReceived(new CustomEventArgs(memberObj));
                        }
                        break;
                    #endregion

                    #region "n"//공지사항 수신
                    case "n":  //공지사항 메시지 (n|메시지|발신자id|mode|noticetime|제목)
                        {
                        Logger.info("공지사항 수신!");
                        NoticeObj noticeObj = new NoticeObj(tempMsg);
                        if (!noticeObj.SenderId.Equals(ConfigHelper.Id)) //자기가 보낸 공지일 경우 보이지 않음
                            OnInstantNoticeReceived(new CustomEventArgs(noticeObj));

                        break;
                        }
                    #endregion

                    #region "A"//사용자부재 미처리건 정보 수신 
                    case "A": //부재중 정보 전달(A|mnum|fnum|nnum|tnum)
                        OnUnCheckedDataReceived(new CustomEventArgs(new int[] { Convert.ToInt32(tempMsg[1]),
                                                                                Convert.ToInt32(tempMsg[2]),
                                                                                Convert.ToInt32(tempMsg[3]),
                                                                                Convert.ToInt32(tempMsg[4])
                                                                                }));
                        break;
                    #endregion

                    #region "Q"//부재중 안읽은 메모리스트
                    case "Q"://안읽은 메모 리스트 (Q|sender†content†time†seqnum|...|
                        OnUnCheckedMemoReceived(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region "T"//부재중 안읽은 공지리스트
                    case "T"://안읽은 공지 리스트 (T|sender†content†time†mode†seqnum†title|sender†content†time†mode†seqnum|...
                        OnUnCheckedNoticeReceived(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region "R"//부재중 안읽은 파일리스트==> 안쓰임
                    case "R"://안읽은 파일 리스트 (R|sender†filenum†filename†time†size†seqnum|sender†filenum†filename†time†size†seqnum|...
                        //안쓰임
                        break;
                    #endregion

                    #region "trans"//부재중 이관 메시시 수신
                    case "trans"://부재중 이관 메시시 수신(trans|sender†content†time†seqnum|...)
                        OnUnCheckedTransferReceived(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region "t"//DB공지상세목록 수신
                    case "t": //"t|ntime†content†nmode†title†안읽은사람1:안읽은사람2:...|...
                        OnNoticeResultFromDBReceived(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region "L"//공지사항목록 수신
                    case "L"://공지사항 리스트 수신한 경우  L|time‡content‡mode‡sender‡seqnum‡title|...  
                        OnNoticeListReceived(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region "s"//각 클라이언트 상태값 변경메시지+ IP주소
                    case "s"://각 클라이언트 상태값 변경 메시지 s|id|상태|IPAddress
                        {
                            if (!tempMsg[1].Equals(ConfigHelper.Id))
                            {
                                MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                                memberObj.Status = tempMsg[2];
                                //1. 트리상태변경 
                                OnMemberStatusReceived(new CustomEventArgs(memberObj));
                                //2. 로그인리스트 테이블에 추가
                                Members.AddLoginUser(tempMsg[1], tempMsg[3]);
                                //3. 채팅창 상태변경
                                //   각 채팅창 key변경 및 채팅창 노드/상태변경
                                OnChatterStatusReceived(new CustomEventArgs(memberObj));
                            }
                        }
                        break;
                    #endregion

                    #region "pass"//고객정보 전달 수신
                    case "pass"://고객정보 전달 수신(pass|ani|senderID|receiverID|일자|시간|CustomerName
                        OnCustomerInfoTransfered(new CustomEventArgs(tempMsg));
                        break;
                    #endregion

                    #region //전화기능

                    #region "Ring"//Ringing
                    case "Ring": //발신자 표시(Ring|ani|name|server_type)
                        OnCallRingingReceived(new CustomEventArgs(new string[] { tempMsg[1], tempMsg[2], tempMsg[3] }));
                        break;
                    #endregion

                    #region "Dial"//Dialing
                    case "Dial": //다이얼시 고객정보 팝업(Dial|ani)
                        if (!ConfigHelper.NoPopOutBound)
                        {
                            OnCallDialingReceived(new CustomEventArgs(new string[] { tempMsg[1], "2" }));
                        }
                        break;
                    #endregion

                    #region "Answer"//Answer
                    case "Answer": //offhook시 고객정보 팝업(Answer|ani|type)
                        OnCallAnswerReceived(new CustomEventArgs(new string[] { tempMsg[1], tempMsg[2] }));
                        break;
                    #endregion

                    #region "Abandon"//Abandon
                    case "Abandon": //Abandon 발생시
                        OnCallAbandonReceived();
                        break;
                    #endregion

                    #region "Other"//Other 호전환수신
                    case "Other": //다른사람이 응답시
                        OnCallOtherAnswerReceived();
                        break;
                    #endregion
                    #endregion //전화기능

                    #region default //비정상메시지
                    default:
                        Logger.info("지정되지 않은 메시지포맷:" + msg);
                        break;
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Logger.error(ex.ToString());
            }
        }
        internal const string SEND_MSG_NOTIFY_NOTICE_READ = "21|{0}|{1}|{2}"; //msg 구성 : 21 | receiverid | notice id | sender id
        public bool SendMsgNotifyNoticeRead(NoticeObj obj)
        {
            string msg = string.Format(SEND_MSG_NOTIFY_NOTICE_READ, ConfigHelper.Id, obj.NoticeTime, obj.SenderId);

            return(SendMsgToServer(msg));
        }
        internal const string SEND_MSG_REGISTER_NOTICE = "6|{0}|{1}|{2}|{3}|{4}"; //msg 구성 6|메시지|발신자id | n 또는 e | noticetime | 제목)  n : 일반공지 , e : 긴급공지
        public bool SendMsgRegisterNotice(NoticeObj obj)
        {
            string msg = string.Format(SEND_MSG_REGISTER_NOTICE, Utils.EncodeMsg(obj.Content), ConfigHelper.Id, obj.StrMode, obj.NoticeTime, Utils.EncodeMsg(obj.Title));

            return(SendMsgToServer(msg));
        }
 internal const string SEND_MSG_NOTIFY_NOTICE_READ = "21|{0}|{1}|{2}";//msg 구성 : 21 | receiverid | notice id | sender id
 public bool SendMsgNotifyNoticeRead(NoticeObj obj) {
     string msg = string.Format(SEND_MSG_NOTIFY_NOTICE_READ, ConfigHelper.Id, obj.NoticeTime, obj.SenderId);
     return SendMsgToServer(msg);
 }
Exemple #16
0
        /// <summary>
        /// 수신된 메시지를 분석하여 각 요청에 맞게 처리
        /// </summary>
        /// <param name="obj">ArrayList로 형변환할 Object</param>
        protected void MsgFilter(object obj, IPEndPoint iep)
        {
            try
            {
                string   msg = ((string)obj).Trim(); //수신 메시지
                string   tempFormKey;
                string[] tempMsg = msg.Split('|');
                string   code    = tempMsg[0];

                switch (code)
                {
                    #region "f"//로그인 실패시(f|n or p)
                case "f":
                {
                    isLoggedOn = false;
                    string errmsg;
                    if (tempMsg[1].Equals("n"))
                    {
                        errmsg = "등록되지 않은 사용자 입니다.";
                    }
                    else
                    {
                        errmsg = "비밀번호가 틀렸습니다.";
                    }
                    OnLoginFailed(new CustomEventArgs(errmsg));
                }
                break;
                    #endregion

                    #region "g" //로그인 성공시 (g|name|team|company|com_cd|db_port)
                case "g":       //로그인 성공시 (g|name|team|company|com_cd|db_port)
                    isLoggedOn = true;
                    ConfigHelper.DbServerIp = serverIP;
                    ConfigHelper.DbPort     = Convert.ToInt16(tempMsg[5]);

                    //서버측에서 전달된 이름 저장
                    ConfigHelper.Id          = ConfigHelper.TryId;
                    ConfigHelper.Pass        = ConfigHelper.TryPass;
                    ConfigHelper.CompanyCode = tempMsg[4];
                    ConfigHelper.CompanyName = tempMsg[3];
                    Logger.info("로그인 성공");
                    ConfigHelper.Name     = tempMsg[1];
                    ConfigHelper.TeamName = tempMsg[2];

                    OnLoginPassed(new CustomEventArgs());

                    if (checkThread == null)
                    {
                        checkThread = new Thread(new ThreadStart(SendCheck));
                        checkThread.Start();
                        Logger.info("SendCheck 스레드 시작");
                    }

                    break;
                    #endregion

                    #region "a" //재로그인 이미 로그인상태알려줌
                case "a":       //중복로그인 시도를 알려줌
                    isLoggedOn        = false;
                    ConfigHelper.Id   = ConfigHelper.TryId;
                    ConfigHelper.Pass = ConfigHelper.TryPass;
                    OnLoginDupped();
                    break;
                    #endregion

                    #region "M" //다른 클라이언트 목록 및 접속상태 정보(M|팀이름|id!멤버이름|id!멤버이름)
                case "M":       //다른 클라이언트 목록 및 접속상태 정보(M|팀이름|id!멤버이름|id!멤버이름)
                    if (tempMsg[1].Equals("e"))
                    {           //모든 팀트리 정보 전송완료 메시지일 경우 -> Client_Form을 로그인 상태로 하위 구성요소를 활성화 한다.
                        OnTeamListReceiveDone();
                    }
                    else
                    {     // 팀트리 정보를 수신한 경우
                        if (tempMsg.Length > 2)
                        {
                            Members.AddMembers(msg);
                            string teamName = tempMsg[1];
                            OnTeamListReceived(new CustomEventArgs(teamName));
                        }
                    }
                    break;
                    #endregion

                    #region "y" //로그인 Client 리스트 상태값
                case "y":       //로그인 Client 리스트 y|id|상태값|ipaddress
                {
                    MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                    memberObj.Status = tempMsg[2];
                    //1. 로그인 리스트 테이블에 추가
                    Members.AddLoginUser(tempMsg[1], tempMsg[3]);
                    //2. memTree 뷰에 로그인 사용자 상태 변경
                    OnMemberStatusReceived(new CustomEventArgs(memberObj));
                    this.OnMemberStatusReceived(new CustomEventArgs(memberObj));
                    break;
                }
                    #endregion

                    #region "u" //서버측에서 강제 로그아웃 메시지 수신한 경우
                case "u":       //서버측에서 강제 로그아웃 메시지 수신한 경우
                    isLoggedOn = false;
                    OnForcedLogoutNotified();
                    break;
                    #endregion

                    #region "d" //상대방 대화메시지
                case "d":       //상대방 대화메시지일 경우 (d|Formkey|id/id/...|name|메시지)
                {
                    ChatObj chatObj = new ChatObj(tempMsg);
                    if (!chatObj.UserId.Equals(ConfigHelper.Id))
                    {
                        if (ChatForms.Contain(chatObj.ChatKey))
                        {
                            //이미 발신자와 채팅중일 경우
                            OnChatMsgAdded(new CustomEventArgs(chatObj));
                        }

                        else
                        {
                            //새로운 대화요청일 경우, 대화창 생성
                            OnNewChatMsgReceived(new CustomEventArgs(chatObj));
                        }
                    }
                }
                break;
                    #endregion

                    #region "c" //대화중 초대
                case "c":       //c|formkey|id/id/..|name  //대화중 초대가 일어난 경우
                {
                    ChatObj chatObj = new ChatObj(tempMsg);
                    if (ChatForms.Contain(chatObj.ChatKey))
                    {
                        OnChatterInvited(new CustomEventArgs(chatObj));
                    }
                    else
                    {
                        Logger.info(string.Format("'c' key[{0}]를 갖는 채팅창이 존재하지 않음.", chatObj.ChatKey));
                    }
                }
                break;
                    #endregion

                    #region "C" //보낸공지 읽음확인 수신
                case "C":       //보낸공지 읽음확인 수신(C|확인자id|noticeid)
                    OnNoticeCheckNotified(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region "q"|"dc" //다자 대화중 상대방이 대화창 나감
                case "q":            //다자 대화중 상대방이 대화창 나감 (q|Formkey|id)
                case "dc":           //다자 대화중 상대방이 연결 끊김 (dc|Formkey|id)
                {
                    ChatObj chatObj = new ChatObj(tempMsg);
                    if (ChatForms.Contain(chatObj.ChatKey))
                    {
                        OnChatterQuit(new CustomEventArgs(chatObj));
                    }
                    else
                    {
                        Logger.info(string.Format("'q' key[{0}]를 갖는 채팅창이 존재하지 않음.", chatObj.ChatKey));
                    }
                }
                break;
                    #endregion

                    #region "m" //메모를 수신한 경우
                case "m":       //메모를 수신한 경우 m|name|id|message|수신자id
                {
                    MemoObj memoObj = new MemoObj(tempMsg);
                    OnMemoMsgReceived(new CustomEventArgs(memoObj));
                    MemoUtils.MemoFileWrite(ConfigHelper.Id, memoObj);
                    break;
                }
                    #endregion

                    #region "i" //사용자 로그인 알림
                case "i":       //추가 로그인 상담원일 경우  형태 : i|id|소속팀명|ip|이름
                {
                    MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                    memberObj.Status = MsgrUserStatus.ONLINE;
                    //1. 로그인 리스트 테이블에 추가
                    Members.AddLoginUser(tempMsg[1], tempMsg[3]);

                    //2. memTree 뷰에 로그인 사용자 상태 변경
                    OnMemberStatusReceived(new CustomEventArgs(memberObj));

                    //3. 각 채팅창 key변경 및 채팅창 노드/상태변경
                    OnChatterStatusReceived(new CustomEventArgs(memberObj));

                    //4. 로그인 했음 메시지 창 띄움
                    // 추후 구현
                }
                break;
                    #endregion

                    #region "o" //사용자 로그아웃 알림
                case "o":       //로그아웃 상담원이 발생할 경우  o|id|소속
                {
                    MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                    memberObj.Status = MsgrUserStatus.LOGOUT;
                    //1. 로그인 리스트 테이블에서 삭제
                    Members.RemoveLoginUser(tempMsg[1]);
                    //2. memTree 뷰에 로그아웃 사용자 상태 변경
                    OnMemberStatusReceived(new CustomEventArgs(memberObj));

                    //3. 각 채팅창 key변경 및 채팅창 노드/상태변경
                    OnChatterStatusReceived(new CustomEventArgs(memberObj));
                }
                break;
                    #endregion

                    #region "n" //공지사항 수신
                case "n":       //공지사항 메시지 (n|메시지|발신자id|mode|noticetime|제목)
                {
                    Logger.info("공지사항 수신!");
                    NoticeObj noticeObj = new NoticeObj(tempMsg);
                    if (!noticeObj.SenderId.Equals(ConfigHelper.Id))     //자기가 보낸 공지일 경우 보이지 않음
                    {
                        OnInstantNoticeReceived(new CustomEventArgs(noticeObj));
                    }

                    break;
                }
                    #endregion

                    #region "A" //사용자부재 미처리건 정보 수신
                case "A":       //부재중 정보 전달(A|mnum|fnum|nnum|tnum)
                    OnUnCheckedDataReceived(new CustomEventArgs(new int[] { Convert.ToInt32(tempMsg[1]),
                                                                            Convert.ToInt32(tempMsg[2]),
                                                                            Convert.ToInt32(tempMsg[3]),
                                                                            Convert.ToInt32(tempMsg[4]) }));
                    break;
                    #endregion

                    #region "Q" //부재중 안읽은 메모리스트
                case "Q":       //안읽은 메모 리스트 (Q|sender†content†time†seqnum|...|
                    OnUnCheckedMemoReceived(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region "T" //부재중 안읽은 공지리스트
                case "T":       //안읽은 공지 리스트 (T|sender†content†time†mode†seqnum†title|sender†content†time†mode†seqnum|...
                    OnUnCheckedNoticeReceived(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region "R" //부재중 안읽은 파일리스트==> 안쓰임
                case "R":       //안읽은 파일 리스트 (R|sender†filenum†filename†time†size†seqnum|sender†filenum†filename†time†size†seqnum|...
                    //안쓰임
                    break;
                    #endregion

                    #region "trans" //부재중 이관 메시시 수신
                case "trans":       //부재중 이관 메시시 수신(trans|sender†content†time†seqnum|...)
                    OnUnCheckedTransferReceived(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region "t" //DB공지상세목록 수신
                case "t":       //"t|ntime†content†nmode†title†안읽은사람1:안읽은사람2:...|...
                    OnNoticeResultFromDBReceived(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region "L" //공지사항목록 수신
                case "L":       //공지사항 리스트 수신한 경우  L|time‡content‡mode‡sender‡seqnum‡title|...
                    OnNoticeListReceived(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region "s" //각 클라이언트 상태값 변경메시지+ IP주소
                case "s":       //각 클라이언트 상태값 변경 메시지 s|id|상태|IPAddress
                {
                    if (!tempMsg[1].Equals(ConfigHelper.Id))
                    {
                        MemberObj memberObj = Members.GetByUserId(tempMsg[1]);
                        memberObj.Status = tempMsg[2];
                        //1. 트리상태변경
                        OnMemberStatusReceived(new CustomEventArgs(memberObj));
                        //2. 로그인리스트 테이블에 추가
                        Members.AddLoginUser(tempMsg[1], tempMsg[3]);
                        //3. 채팅창 상태변경
                        //   각 채팅창 key변경 및 채팅창 노드/상태변경
                        OnChatterStatusReceived(new CustomEventArgs(memberObj));
                    }
                }
                break;
                    #endregion

                    #region "pass" //고객정보 전달 수신
                case "pass":       //고객정보 전달 수신(pass|ani|senderID|receiverID|일자|시간|CustomerName
                    OnCustomerInfoTransfered(new CustomEventArgs(tempMsg));
                    break;
                    #endregion

                    #region        //전화기능

                    #region "Ring" //Ringing
                case "Ring":       //발신자 표시(Ring|ani|name|server_type)
                    OnCallRingingReceived(new CustomEventArgs(new string[] { tempMsg[1], tempMsg[2], tempMsg[3] }));
                    break;
                    #endregion

                    #region "Dial" //Dialing
                case "Dial":       //다이얼시 고객정보 팝업(Dial|ani)
                    if (!ConfigHelper.NoPopOutBound)
                    {
                        OnCallDialingReceived(new CustomEventArgs(new string[] { tempMsg[1], "2" }));
                    }
                    break;
                    #endregion

                    #region "Answer" //Answer
                case "Answer":       //offhook시 고객정보 팝업(Answer|ani|type)
                    OnCallAnswerReceived(new CustomEventArgs(new string[] { tempMsg[1], tempMsg[2] }));
                    break;
                    #endregion

                    #region "Abandon" //Abandon
                case "Abandon":       //Abandon 발생시
                    OnCallAbandonReceived();
                    break;
                    #endregion

                    #region "Other" //Other 호전환수신
                case "Other":       //다른사람이 응답시
                    OnCallOtherAnswerReceived();
                    break;
                    #endregion
                    #endregion      //전화기능

                    #region default //비정상메시지
                default:
                    Logger.info("지정되지 않은 메시지포맷:" + msg);
                    break;
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Logger.error(ex.ToString());
            }
        }
 internal const string SEND_MSG_REGISTER_NOTICE = "6|{0}|{1}|{2}|{3}|{4}";//msg 구성 6|메시지|발신자id | n 또는 e | noticetime | 제목)  n : 일반공지 , e : 긴급공지
 public bool SendMsgRegisterNotice(NoticeObj obj) {
     string msg = string.Format(SEND_MSG_REGISTER_NOTICE, Utils.EncodeMsg(obj.Content), ConfigHelper.Id, obj.StrMode, obj.NoticeTime, Utils.EncodeMsg(obj.Title));
     return SendMsgToServer(msg);
 }