public void Enqueue(QueueData item) { lock (que) que.Enqueue(item); }
public override void Send(QueueData d) { base.Send(d); }
private void Send(string IPFrom) { QueueData d = que.Dequeue(); switch (d.code) { //클라이언트가 ChatCode.Login 코드를 보냈을 경우 닉네임의 중복 여부를 검사하고, 닉네임을 바꾼다. case ChatCode.LogIn: int a = 0; while (NickCheck(d.msgFrom) || d.msgFrom == "") { d.msgFrom = "손님" + (list.Count + a); a++; } if (a > 0) { string msg = "이미 등록된 대화명입니다\r\n" + "대화명은 자동으로 설정됩니다 : " + "[" + d.msgFrom + "]"; list[IPFrom].Send(new QueueData(msg)); } nlist.Add(d.msgFrom, IPFrom); list[IPFrom].Send(new QueueData(ChatCode.StartInfo, d.msgFrom)); userNotify.Add(d.msgFrom, 0); SendToAll(d); break; //클라이언트가 로그아웃했을 경우 딕셔너리에 있는 데이터를 삭제하고 클라이언트의 쓰레드 종료 case ChatCode.LogOut: Client c = list[IPFrom]; list.Remove(IPFrom); nlist.Remove(d.msgFrom); userNotify.Remove(d.msgFrom); SendToServer(d); SendToAll(d); c.Stop(); break; //ChatCode.Kick 코드를 받을경우 서버와 전체에 강제퇴장을 알리고 클라이언트과의 연결중인 소켓을 종료 case ChatCode.Kick: int b = 0; Client s; while (NickCheck(d.msgTo)) { b++; } if (b > 0) { string msg = "[" + d.msgTo + "]" + " 님은 강제퇴장 당하셨습니다."; list[IPFrom].Send(new QueueData(msg)); } list.TryGetValue(d.msgTo, out s); list.Remove(d.msgTo); nlist.Remove(d.msgFrom); SendToServer(d); SendToAll(d); s.Stop(); break; //전체 메세지 case ChatCode.Msg: SendToAll(d, list[IPFrom]); break; //귓속말 case ChatCode.Whisper: Whisper(d); break; //전체 쪽지 case ChatCode.AllMessage: SendToAll(d, list[IPFrom]); break; //건의 사항 case ChatCode.Inquiry: d.msgTo = "Check"; break; case ChatCode.Notify: int val; userNotify.TryGetValue(d.msgTo, out val); userNotify[d.msgTo] = val + 1; userNotify.TryGetValue(d.msgTo, out val); if (val >= 5) { d.code = ChatCode.Kick; d.msgFrom = d.msgTo; d.msgTo = null; d.msg = "신고 누적으로 인하여"; kick(d); SendToAll(d); } break; } SendToServer(d); }
public void Whisper(QueueData d) { SendToOne(d, list[nlist[d.msgTo]]); }
//한명에게만 Send public void SendToOne(QueueData d, Client c) { c.Send(d); }
//서버가 자기 자신의 ui에 보낸 메세지를 적기위한 함수 public void WriteServerChat(QueueData d) { SendToUI(d); }