예제 #1
0
        public void Initialize()
        {
            labelMainMessage.Text = string.Format("{0}[{1}]님이 파일을 보내려고 합니다.\n파일을 저장하시겠습니까?",
                                                  Members.GetByUserId(rcvObj.SenderId).Name, rcvObj.SenderId);
            //TextBoxSaveDir.Text = string.Format(WeDoCommon.ConstDef.MSGR_DATA_FILE_DIR,ConfigHelper.Id);
            TextBoxSaveDir.Text = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

            SetValidFileName(TextBoxSaveDir.Text);

            ToolTipFileName.SetToolTip(LabelFileName, realDownloadedFileName);
            ToolTipFileName.Active      = true;
            PanelFinishFileSave.Visible = false;
            setProgressVisible(false);
            DownloadForms.AddForm(formKey, this);

            connection.FTPReadyToListen       += ProcessOnFTPReadyToListen;
            connection.FTPReceivingProgressed += ProcessOnFTPReceivingProgressed;
            connection.FTPReceivingFinished   += ProcessOnFTPReceivingFinished;
            connection.FTPReceivingCanceled   += ProcessOnFTPReceivingCanceled;
            connection.FTPReceivingFailed     += ProcessOnFTPReceivingFailed;

            closeOnNoResponseTimer.Interval = 30000; //타임아웃을 30초로 설정하고 타임아웃인 경우 화면을 닫는다.
            closeOnNoResponseTimer.Tick    += new EventHandler(CheckDownloadFileTimeOutOnTick);
            //connection.FTP
        }
예제 #2
0
        private void _SetListBoxSource()
        {
            List <string> userList;

            if (mode == AddMemberMode.OnMemoReceived) // 전체
            {
                userList = new List <string>(Members.GetMembers().Keys);
            }
            else //로그인사용자만
            {
                userList = new List <string>(Members.GetLoginUsers().Keys);
            }

            foreach (string user in userList)
            {
                MemberObj userObj = Members.GetByUserId(user);
                if (userObj == null || userObj.Id == "")
                {
                    continue;
                }

                ListBoxItem item = new ListBoxItem(userObj);
                if (ListBox.NoMatches == ListBoxSelected.FindStringExact(item.Text))
                {
                    ListBoxSource.Items.Add(item);
                }
            }
        }
예제 #3
0
        /// <summary>
        /// 쪽지 및 파일 전송 수신자 추가 폼에서 "접속자" 라디오 버튼 클릭시
        /// </summary>
        private void _DisplayLoginUsers()
        {
            try
            {
                SetTeamMode(false);

                ListBoxSource.Items.Clear();

                Dictionary <string, IPEndPoint> loginUsers = Members.GetLoginUsers();

                foreach (var de in loginUsers)
                {
                    if (de.Value != null)
                    {
                        MemberObj   userObj = Members.GetByUserId(de.Key.ToString());
                        ListBoxItem item    = new ListBoxItem(userObj);
                        if (ListBox.NoMatches == ListBoxSelected.FindStringExact(item.Text))
                        {
                            ListBoxSource.Items.Add(item);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.error(exception.ToString());
            }
        }
예제 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="count"></param>
        /// <param name="msg">Q|sender†content†time†seqnum|...|</param>
        public void SetMemoValues(int count, string[] msg)
        {
            panel_memo.Enabled = true;
            dgv_memo.Visible   = true;
            label_memo.Text    = "부재중 쪽지 (" + count + ")";
            this.memoCnt       = count;

            foreach (string item in msg)
            {
                if (item.Equals("Q"))
                {
                    continue;
                }

                NumberedMemoObj obj = new NumberedMemoObj(item);

                bool isExist = false;
                foreach (DataGridViewRow itemObj in dgv_memo.Rows)
                {
                    if (((NumberedMemoObj)itemObj.Tag != null) && ((NumberedMemoObj)itemObj.Tag).SeqNum == obj.SeqNum)
                    {
                        isExist = true;
                        break;
                    }
                }
                if (!isExist)
                {
                    int rownum = dgv_memo.Rows.Add(new object[] { Members.GetByUserId(obj.SenderId).Name + "(" + obj.SenderId + ")", obj.Time, obj.Content });
                    dgv_memo.Rows[rownum].Tag = obj;
                }
            }
        }
예제 #5
0
        /// <summary>
        /// 접속자 명단 다시보기
        /// </summary>
        private void _RefreshListBoxSource()
        {
            try
            {
                string teamname = (String)ComboBoxTeam.SelectedItem;
                if (teamname == "기타")
                {
                    teamname = "";
                }

                Dictionary <string, MemberObj> teamMembers = Members.GetMembersByTeam(teamname);

                ListBoxSource.Items.Clear();
                foreach (var de in teamMembers)
                {
                    //string tempname = (String)de.Value;
                    string tempId = de.Key;
                    if (Members.ContainLoginUserNode(tempId))
                    {
                        //string item = tempname + "(" + tempid + ")";
                        MemberObj   userObj = Members.GetByUserId(tempId);
                        ListBoxItem item    = new ListBoxItem(userObj);
                        if (ListBox.NoMatches == ListBoxSelected.FindStringExact(item.Text))
                        {
                            ListBoxSource.Items.Add(item);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.error(exception.ToString());
            }
        }
예제 #6
0
        /// <param name="chatMsg">chatMsg = d|formkey|id/id/...|name|메시지내용</param>
        public ChatForm(MsgrConnection connection, MiscController miscCtrl, ChatObj chatObj)
        {
            try {
                InitializeComponent();
                this.connection = connection;
                this.miscCtrl   = miscCtrl;
                formKey         = chatObj.ChatKey;
                Initialize();
                Logger.info(string.Format("채팅창생성 key[{0}]", formKey));

                //첫번째가 대화메시지 띄운 사람.
                foreach (MemberObj memberObj in chatObj.MemberList)
                {
                    if (!ConfigHelper.Id.Equals(memberObj.Id))
                    {
                        SetChatterOnFormOpening(Members.GetByUserId(memberObj.Id));
                    }
                }

                //chatForm.WindowState = FormWindowState.Minimized;
                //chatForm.Show();
                this.PostUserMessage(chatObj.UserId, chatObj.UserName, chatObj.Msg);
            }
            catch (Exception ex)
            {
                Logger.error(ex.ToString());
                MessageBox.Show("화면 초기화중 오류가 발생했습니다.\n 담당자에게 문의하세요.", "초기화 오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
예제 #7
0
 public MemoForm(MsgrConnection connection, MemoObj obj)
 {
     InitializeComponent();
     this.connection           = connection;
     this.obj                  = obj;
     this.Text                 = Members.GetByUserId(obj.SenderId).Name + "님의 쪽지";
     this.richTextBoxMemo.Text = obj.Content;
 }
예제 #8
0
 public void Initialize()
 {
     foreach (MemoObj obj in list)
     {
         ListViewItem item = listView.Items.Add(obj.Time);
         item.SubItems.Add(Members.GetByUserId(obj.SenderId).Name + "(" + obj.SenderId + ")");
         item.SubItems.Add(obj.Content);
         item.Tag = obj;
     }
 }
예제 #9
0
        private void ParseInviteMsg(string[] _msg)
        {
            chatKey = ChatUtils.GetFormKey(_msg[1], ConfigHelper.Id);

            string[] addedIdArray = _msg[2].Split('/');

            foreach (string addedId in addedIdArray)
            {
                memberList.Add(Members.GetByUserId(addedId));
            }
        }
예제 #10
0
        private void ParseChatMsg(string[] _msg)
        {
            chatKey = ChatUtils.GetFormKey(_msg[1], ConfigHelper.Id);

            string[] addedIdArray = _msg[2].Split('/');

            foreach (string addedId in addedIdArray)
            {
                memberList.Add(Members.GetByUserId(addedId));
            }

            userId   = addedIdArray[0];
            userName = _msg[3];
            msg      = Utils.DecodeMsg(_msg[4]);
        }
예제 #11
0
        /// <summary>
        /// msg 포맷: L|time‡content‡mode‡sender‡seqnum‡title|...
        /// </summary>
        /// <param name="msg"></param>
        public void AssignListInfo(string[] msg)
        {
            try
            {
                listView.Items.Clear();
                foreach (string item in msg)
                {
                    if (item.Equals("L"))
                    {
                        continue;
                    }


                    NumberedNoticeObj noticeObj = new NumberedNoticeObj(item);
                    ListViewItem      listItem  = null;

                    if (noticeObj != null)
                    {
                        Logger.info("notice_time = " + noticeObj.NoticeTime);

                        listItem = listView.Items.Add(noticeObj.NoticeTime, noticeObj.Mode, null);
                        if (noticeObj.IsEmergency)
                        {
                            listItem.ForeColor = Color.Red;
                        }

                        if (noticeObj.Content.Contains("\n\r\n\r"))
                        {
                            noticeObj.Content.Replace("♪", " ");
                        }

                        listItem.SubItems.Add(noticeObj.Title);
                        listItem.SubItems.Add(noticeObj.Content);
                        listItem.SubItems.Add(Members.GetByUserId(noticeObj.SenderId).Name + "(" + noticeObj.SenderId + ")");
                        listItem.SubItems.Add(noticeObj.NoticeTime);
                        listItem.Tag = noticeObj;
                        Logger.info("seqnum = " + noticeObj.SeqNum);
                        listView.ListViewItemSorter = new ListViewItemComparerDe(3);
                    }
                }
            }
            catch (Exception ex1)
            {
                Logger.error(ex1.ToString());
            }
        }
예제 #12
0
        private void Initialize()
        {
            this.chatBox.TextChanged += new EventHandler(chatBox_TextChanged);

            connection.ChatterStatusReceived += ChangeStatusOnChatterStatusReceived;
            connection.ChatMsgAdded          += AddMsgOnChatMsgAdded;
            connection.ChatterInvited        += AddChatterOnChatterInvited;
            connection.ChatterQuit           += DeleteChatterOnChatterQuit;
            connection.MemberStatusReceived  += this.ChangeStatusOnChatterStatusReceived;

            StatusLabelChatStatus.Text = "";
            ConfigHelper.Id            = ConfigHelper.Id;
            ConfigHelper.Name          = Members.GetByUserId(ConfigHelper.Id).Name;
            tipAddChatter.SetToolTip(BtnAddChatter, "대화 상대방 추가");
            SetCustomFont();
            ChatForms.AddForm(formKey, this);
        }
예제 #13
0
        /// <summary>
        /// trans|sender†content†time†seqnum|...
        /// </summary>
        /// <param name="count"></param>
        /// <param name="msg"></param>
        public void SetTransferValues(int count, string[] msg)
        {
            panel_trans.Enabled  = true;
            dgv_transfer.Visible = true;
            label_trans.Text     = "부재중 이관 (" + count + ")";
            this.transCnt        = count;

            foreach (string item in msg)
            {
                if (item.Equals("trans"))
                {
                    continue;
                }

                UncheckedTransferObj obj = new UncheckedTransferObj(item);

                bool isExist = false;
                foreach (DataGridViewRow itemObj in dgv_transfer.Rows)
                {
                    if ((UncheckedTransferObj)itemObj.Tag != null && ((UncheckedTransferObj)itemObj.Tag).SeqNum == obj.SeqNum)
                    {
                        isExist = true;
                        break;
                    }
                }
                if (!isExist)
                {
                    int rownum = 0;
                    if (obj.ContentObj == null)
                    {
                        rownum = dgv_transfer.Rows.Add(new object[] { obj.Time, obj.Content, Members.GetByUserId(obj.SenderId).Name + "(" + obj.SenderId + ")" });
                    }
                    else
                    {
                        string content = (obj.ContentObj.CustomerName == null || obj.ContentObj.CustomerName.Equals(""))
                                                                      ? obj.ContentObj.Ani : string.Format("{0}({1})", obj.ContentObj.CustomerName, obj.ContentObj.Ani);
                        rownum = dgv_transfer.Rows.Add(new object[] { obj.Time,
                                                                      content,
                                                                      Members.GetByUserId(obj.SenderId).Name + "(" + obj.SenderId + ")" });
                    }
                    dgv_transfer.Rows[rownum].Tag = obj;
                }
            }
        }
예제 #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="count"></param>
        /// <param name="msg">T|sender†content†time†mode†seqnum†title|sender†content†time†mode†seqnum|...</param>
        public void SetNoticeValues(int count, string[] msg)
        {
            dgv_notice.Visible   = true;
            panel_notice.Enabled = true;
            label_notice.Text    = "부재중 공지 (" + count + ")";
            noticeCnt            = count;

            foreach (string item in msg)
            {
                if (item.Equals("T"))
                {
                    continue;
                }

                NumberedNoticeObj obj = new NumberedNoticeObj(item);

                bool isExist = false;
                foreach (DataGridViewRow itemObj in dgv_notice.Rows)
                {
                    if (((NumberedNoticeObj)itemObj.Tag != null) && ((NumberedNoticeObj)itemObj.Tag).SeqNum == obj.SeqNum)
                    {
                        isExist = true;
                        break;
                    }
                }

                if (!isExist)
                {
                    int rownum = dgv_notice.Rows.Add(new object[] { obj.Mode,
                                                                    obj.Title,
                                                                    obj.Content,
                                                                    Members.GetByUserId(obj.SenderId).Name + "(" + obj.SenderId + ")",
                                                                    obj.NoticeTime });
                    DataGridViewRow row = dgv_notice.Rows[rownum];
                    row.Tag = obj;
                    if (obj.IsEmergency)
                    {
                        row.DefaultCellStyle.ForeColor = Color.Red;
                    }
                }
            }
        }
예제 #15
0
 /// <summary>
 /// FTP 전송자: 파일전송 거부이벤트받음
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void ProcessOnFTPSendingRejected(object sender, SocFTPInfoEventArgs <FTPSendObj> e)
 {
     try
     {
         if (SendFileForms.ContainClientKey(this, e.GetObj.Key))
         {
             Logger.info(string.Format("ProcessOnFTPSendingRejected : 파일수신거부 파일[{0}]수신자[{1}]", e.GetObj.FileName, e.GetObj.ReceiverId));
             MessageBox.Show(this, string.Format("{0}님이 파일받기를 거부하셨습니다.", Members.GetByUserId(e.GetObj.ReceiverId).Name)
                             + Environment.NewLine
                             + string.Format("전송 파일명:{0}", e.GetObj.FileName), "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
             label_result.Text = "파일수신거부";
             sendFileTimer.Stop();
             Close();
         }
     }
     catch (Exception exception)
     {
         Logger.error(exception.ToString());
     }
 }
예제 #16
0
        /// <summary>
        /// msg //pass|ani|senderID|receiverID|TONG_DATE|TONG_TIME|CustomerName
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NotifyForm_Load(object sender, EventArgs e)
        {
            timerForNotify.Interval = 10000;
            timerForNotify.Tick    += new EventHandler(timerForNotify_Tick);

            this.Tag            = notiObj.Ani;
            label_TONGDATE.Text = notiObj.TongDate;
            label_TONGTIME.Text = notiObj.TongTime;
            label_ani.Text      = notiObj.Ani;
            label_senderid.Text = notiObj.SenderId;
            if (notiObj.CustomerName == null || notiObj.CustomerName.Equals(""))
            {
                label_Customer.Text = notiObj.Ani;
            }
            else
            {
                label_Customer.Text = notiObj.CustomerName;
            }
            label_sender.Text = "from " + Members.GetByUserId(notiObj.SenderId).Name + "(" + notiObj.SenderId + ")";
        }
예제 #17
0
        /// <summary>
        ///  case "pass"://고객정보 전달 수신
        ///  pass|ani|senderID|receiverID|TONG_DATE|TONG_TIME|CustomerName
        /// </summary>
        public TransferObj(string[] msgToken)
        {
            //pass|ani|senderID|receiverID|TONG_DATE|TONG_TIME|CustomerName
            this.ani      = msgToken[1];
            this.senderId = msgToken[2];
            MemberObj member = Members.GetByUserId(senderId);

            this.senderName = member.Name;
            this.receiverId = msgToken[3];
            this.tongDate   = msgToken[4];
            this.tongTime   = msgToken[5];
            if (msgToken.Length > 6)
            {
                this.customerName = msgToken[6];
            }
            else
            {
                this.customerName = "";
            }
        }
예제 #18
0
 /// <summary>
 /// 쪽지(메모)/채팅창에서 인원추가시 팝업
 /// 쪽지는 팀별/전체/접속자선택모두 가능
 /// 채팅은 접속자만 가능
 /// 이미 추가된 인원은 보여줌.
 ///
 /// </summary>
 /// <param name="connection"></param>
 /// <param name="mode"></param>
 /// <param name="formKey"></param>
 public AddMemberForm(MsgrConnection connection, AddMemberMode mode, string formKey, List <MemberObj> userList, SetMemberListHandler setMemberList)
 {
     InitializeComponent();
     myId               = ConfigHelper.Id;
     myName             = Members.GetByUserId(myId).Name;
     this.formKey       = formKey;
     this.mode          = mode;
     this.connection    = connection;
     this.setMemberList = setMemberList;
     formHeight         = this.Height;
     //대화인 경우 현재 접속자만.
     if (mode == AddMemberMode.OnChatformAdded)
     {
         this.RadioButtonAll.Enabled        = false;
         this.RadioButtonListByTeam.Enabled = false;
         SetTeamMode(false);
         this.RadioButtonConnectedUserOnly.Checked = true;
     }
     SetListBox(userList);
 }
예제 #19
0
 /// <summary>
 /// 30초 시간경과후 아무런 리턴메시지를 못받았을때 실패처리함.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void CheckDownloadFileTimeOutOnTick(object sender, EventArgs e)
 {
     closeOnNoResponseTimer.Stop();
     if (MessageBox.Show(this, string.Format("{0}님으로  파일받기가 시간초과로 실패하였습니다.", Members.GetByUserId(rcvObj.SenderId).Name)
                         + Environment.NewLine
                         + string.Format("수신 파일명:{0}", rcvObj.FileName), "알림", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
     {
         try
         {
             if (stateObj != null)
             {
                 connection.CancelFTPReceiving(stateObj);
             }
         }
         catch (Exception exception)
         {
             Logger.error(exception.ToString());
         }
         Close();
     }
 }
예제 #20
0
 /// <summary>
 /// 30초 시간경과후 아무런 리턴메시지를 못받았을때 실패처리함.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void CheckSendFileTimeOutOnTick(object sender, EventArgs e)
 {
     sendFileTimer.Stop();
     if (MessageBox.Show(this, string.Format("{0}님에게 파일보내기가 시간초과로 실패하였습니다.(30초초과)", Members.GetByUserId(sendObj.ReceiverId).Name)
                         + Environment.NewLine
                         + string.Format("전송 파일명:{0}", sendObj.FileName), "알림", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
     {
         try
         {
             connection.CancelFTPSending(sendObj);
         }
         catch (Exception exception)
         {
             Logger.error(exception.ToString());
         }
         Close();
     }
 }
예제 #21
0
        /// <summary>
        /// ___________1:1창__________다자창_______
        ///
        /// on   | key(out->in)      key변경없음
        ///        노드상태변경      노드상태변경
        ///
        /// out  | key(in->out)      quit처리(**비정상종료로 quit없이 아웃됨)
        ///        노드상태변경
        ///        메시지display
        ///
        /// busy | key변경없음       key변경없음
        ///        노드상태변경      노드상태변경
        ///
        /// away |     동일
        ///
        /// dnd  |     동일
        ///
        /// </summary>
        /// <param name="id"></param>
        public void ChangeStatusOnChatterStatusReceived(object sender, CustomEventArgs e)
        {
            try {
                MemberObj memberObj = (MemberObj)e.GetItem;
                if (this.formKey.Contains(ConfigHelper.Id))
                {
                    switch (memberObj.Status)
                    {
                    case MsgrUserStatus.ONLINE:
                        //1:1채팅인 경우만
                        if (HasSingleChatter())
                        {
                            //1.키변경
                            string newFormKey = ChatUtils.GetFormKeyWithUserAdded(formKey, ConfigHelper.Id, memberObj.Id);
                            ChatForms.UpdateFormKey(newFormKey, formKey);
                            //2.노드상태변경
                            //3.메시지디스플레이
                            SetChatterLogIn(memberObj.Id, Members.GetByUserId(memberObj.Id).Name);
                        }
                        else
                        {    //다자창
                            //1.키변경없음
                            //2.노드상태변경
                            SetChatterLogIn(memberObj.Id, Members.GetByUserId(memberObj.Id).Name);
                        }
                        break;

                    case MsgrUserStatus.LOGOUT:
                        //1:1채팅인 경우만
                        if (HasSingleChatter())
                        {
                            //1.키변경
                            string newFormKey = ChatUtils.GetFormKeyWithUserLogOut(formKey, ConfigHelper.Id, memberObj.Id);
                            ChatForms.UpdateFormKey(newFormKey, formKey);
                            //2.노드상태변경
                            //3.메시지디스플레이
                            SetChatterLogOut(memberObj.Id, Members.GetByUserId(memberObj.Id).Name);
                        }
                        else
                        {    //다자창
                            //quit처리
                            //  1.키변경
                            string newFormKey = ChatUtils.GetFormKeyWithUserQuit(formKey, ConfigHelper.Id, memberObj.Id);
                            ChatForms.UpdateFormKey(newFormKey, formKey);
                            //  2. 노드삭제
                            DeleteChatter(memberObj.Id, Members.GetByUserId(memberObj.Id).Name);
                        }
                        break;

                    case MsgrUserStatus.BUSY:
                    case MsgrUserStatus.AWAY:
                    case MsgrUserStatus.DND:
                        //노드상태변경
                        SetChatterStatus(memberObj.Id, Members.GetByUserId(memberObj.Id).Name, memberObj.Status);
                        break;
                    }
                }
            } catch (Exception exception) {
                Logger.error(exception.ToString());
            }
        }
예제 #22
0
 private void ParseChatterQuitMsg(string[] _msg)
 {
     chatKey = ChatUtils.GetFormKey(_msg[1], ConfigHelper.Id);
     quitter = Members.GetByUserId(_msg[2]);
 }
예제 #23
0
 private void SetNoticeInfo()
 {
     RichTextBoxContent.Text = obj.Content;
     LabelNoticeSender.Text  = Members.GetByUserId(obj.SenderId).Name;
     TextBoxTitle.Text       = obj.Title;
 }
        internal const string SEND_MSG_SAVE_MEMO_ON_FAIL = "4|m|{0}|{1}|{2}|{3}"; //msg 구성 : 4|m|발신자name|발신자id|메시지|수신자id
        public bool SendMsgSaveMemoOnFail(MemoObj obj)
        {
            string msg = string.Format(SEND_MSG_SAVE_MEMO_ON_FAIL, Members.GetByUserId(ConfigHelper.Id).Name, ConfigHelper.Id, Utils.EncodeMsg(obj.Content), obj.ReceiverId);

            return(SendMsgToServer(msg));
        }
        internal const string SEND_MSG_DELIVER_MEMO = "19|m|{0}|{1}|{2}|{3}"; //msg 구성 : 19|m|발송자name|발송자id|content|수신자id
        public bool SendMsgDeliverMemo(MemoObj obj)
        {
            string msg = string.Format(SEND_MSG_DELIVER_MEMO, Members.GetByUserId(ConfigHelper.Id).Name, ConfigHelper.Id, Utils.EncodeMsg(obj.Content), obj.ReceiverId);

            return(SendMsgToServer(msg));
        }
        internal const string SEND_MSG_NOTIFY_ADDED_USERS = "17|{0}|{1}|{2}|{3}"; //msg 구성 : 17|formkey|id/id/...|name|receiverID
        public bool SendMsgNotifyAddedUsers(string formKey, string idList, string recvId)
        {
            string msg = string.Format(SEND_MSG_NOTIFY_ADDED_USERS, formKey, idList, Members.GetByUserId(ConfigHelper.Id).Name, recvId);

            return(SendMsgToServer(msg));
        }
        internal const string SEND_MSG_USER_CHAT_MSG = "16|{0}|{1}|{2}|{3}"; //msg 구성 : 16|Formkey|id/id/..|발신자name|메시지
        public bool SendMsgUserChatMsg(string formKey, string idList, string message)
        {
            string msg = string.Format(SEND_MSG_USER_CHAT_MSG, formKey, idList, Members.GetByUserId(ConfigHelper.Id).Name, Utils.EncodeMsg(message));

            return(SendMsgToServer(msg));
        }
예제 #28
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());
            }
        }