public ChattingClient(IChatClientUI ui) { this.ui = ui; SendToUI += new dQueueData(this.ui.GetMsg); tcpc = new TcpClient(); t = new Thread(Receive); }
public ClientManager(dQueueData sendToServer) { list = new Dictionary <string, Client>(); nlist = new Dictionary <string, string>(); userNotify = new Dictionary <string, int>(); que = new MessageQueue(); this.SendToServer = sendToServer; }
// 서버 클래스의 생성자로 IChatServerUI를 상속한다 (IChatServerUI는 ChatUI.cs에 정의되어있다.) // IChatServerUI에서 받아온 포트를 이용하여 서버를 생성하게 된다. 아이피는 로컬 아이피를 이용한다. public ChattingServer(IChatServerUI ui) { tcpl = new TcpListener(IPAddress.Any, ui.Port); manager = new ClientManager(WriteServerChat); SendServerMsg += new dQueueData(manager.SendToAll); //서버에서 유저들에게 메세지를 보내기위한 delegate SendToUI += new dQueueData(ui.GetMsg); //ui에 메세지를 기입하기 위한 delegate t = new Thread(Listen); IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); string msg = "> " + host.AddressList[0] + ":" + ui.Port; SendToUI(new QueueData(ChatCode.StartInfo, msg)); }
//ChatCode를 기준으로 각각의 어플리케이션들이 텍스트박스에 받은 메세지들을 적는 기능을 한다. public void GetMsg(QueueData d) { dQueueData o = null; switch (d.code) { case ChatCode.Sys: //시스템 메세지 o = new dQueueData(WriteSystemMsg); break; case ChatCode.StartInfo: //서버가 시작하거나, 클라이언트가 연결할 경우의 작업 o = new dQueueData(WriteStartInfo); break; case ChatCode.UserList: //유저가 로그인하거나 로그아웃하였을 경우 유저리스트의 변동을 나타냄 o = new dQueueData(WriteUserList); break; case ChatCode.LogIn: //유저가 로그인하였을 경우 로그인 로그를 받아 적는다. o = new dQueueData(WriteLogIn); break; case ChatCode.LogOut: //유저가 로그아웃하였을 경우 로그아웃 로그를 받아 적는다. o = new dQueueData(WriteLogOut); break; case ChatCode.Msg: //서버나 유저가 메세지를 받아 적는다. o = new dQueueData(WriteChat); break; case ChatCode.Whisper: //귓속말이 왔을 경우 텍스트박스에 메세지를 받아 적는다. o = new dQueueData(WriteWhisper); break; case ChatCode.AllMessage: //전체메세지가 왔을경우 메세지박스를 띄운다. o = new dQueueData(WriteAllMessage); break; case ChatCode.Kick: //강제퇴장 당했을 경우 메세지 박스를 띄운다. o = new dQueueData(WriteKick); break; case ChatCode.Inquiry: //건의사항을 했을 경우의 기능 o = new dQueueData(WriteInquiry); break; case ChatCode.Notify: // 신고기능 o = new dQueueData(WriteNotify); break; } if (o != null) { main.Invoke(o, d); } }