public void Remove(User user) { InnerList.Remove(user); }
private async void Run() { byte[] buffer = null; while (true) { byte[] msgBuffer = await server.Receive(remotePoint); try { object msgObj = FormatterHelper.Deserialize(msgBuffer); Type msgType = msgObj.GetType(); if (msgType == typeof(LoginMessage)) { // 转换接受的消息 LoginMessage lginMsg = (LoginMessage)msgObj; Console.WriteLine("{0}: user {1} sign in.", System.DateTime.Now.ToString(), lginMsg.UserName); // 添加用户到列表 IPEndPoint userEndPoint = new IPEndPoint(remotePoint.Address, remotePoint.Port); User user = new User(lginMsg.UserName, userEndPoint); userList.Add(user); // 发送应答消息 ListUserResponseMessage usersMsg = new ListUserResponseMessage(userList); buffer = FormatterHelper.Serialize(usersMsg); server.Send(buffer, buffer.Length, remotePoint); Console.WriteLine("Send:" + usersMsg); } else if (msgType == typeof(LogoutMessage)) { // 转换接受的消息 LogoutMessage lgoutMsg = (LogoutMessage)msgObj; Console.WriteLine("{0}: {1} sign out", System.DateTime.Now.ToString(), lgoutMsg.UserName); // 从列表中删除用户 User lgoutUser = userList.Find(lgoutMsg.UserName); if (lgoutUser != null) { userList.Remove(lgoutUser); } } else if (msgType == typeof(TranslateMessage)) { // 转换接受的消息 TranslateMessage transMsg = (TranslateMessage)msgObj; Console.WriteLine("{0}(1) wants to p2p {2}", remotePoint.Address.ToString(), transMsg.UserName, transMsg.ToUserName); // 获取目标用户 User toUser = userList.Find(transMsg.ToUserName); // 转发Purch Hole请求消息 if (toUser == null) { Console.WriteLine("Remote host {0} cannot be found at index server", transMsg.ToUserName); } else { PingMessage transMsg2 = new PingMessage(remotePoint); buffer = FormatterHelper.Serialize(transMsg); server.Send(buffer, buffer.Length, toUser.NetPoint); Console.WriteLine("Send:" + transMsg2); } } else if (msgType == typeof(ListUserMessage)) { // 发送当前用户信息到所有登录客户 ListUserResponseMessage srvResMsg = new ListUserResponseMessage(userList); buffer = FormatterHelper.Serialize(srvResMsg); foreach (User user in userList.InnerList) { server.Send(buffer, buffer.Length, user.NetPoint); Console.WriteLine("Send:" + srvResMsg); } } Thread.Sleep(500); } catch (Exception e) { System.Console.WriteLine(e.Message); System.Console.WriteLine(e.StackTrace); } } }
public void Add(User user) { InnerList.Add(user); }