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 }
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); } } }
/// <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()); } }
/// <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; } } }
/// <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()); } }
/// <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); } }
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; }
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; } }
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)); } }
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]); }
/// <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()); } }
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); }
/// <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; } } }
/// <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; } } } }
/// <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()); } }
/// <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 + ")"; }
/// <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 = ""; } }
/// <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); }
/// <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(); } }
/// <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(); } }
/// <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()); } }
private void ParseChatterQuitMsg(string[] _msg) { chatKey = ChatUtils.GetFormKey(_msg[1], ConfigHelper.Id); quitter = Members.GetByUserId(_msg[2]); }
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)); }
/// <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()); } }