/// <summary> /// Создание задачи и объекта для пользователя после его подключения /// </summary> /// <param name="client"></param> private static void CreateUser(ref TcpClient client) { MySqlConnection connection = DBmanager.Connect(); ClientClass clientObj = new ClientClass(ref connection, ref client, null, idForNextUser++); unassignedUsers.Add(clientObj); Task.Run(() => clientObj.Process()); }
protected internal void AddClient(ClientClass client) { client.room = this; connectedUsers.Add(client); Console.WriteLine("Successfully added client " + client.name + " to " + name + " room. There are " + connectedUsers.Count + " connected users."); connectedUsers.ForEach(user => SendToStream(new MessageClass(codes.SENDING_USERLIST, list: connectedUsers.Select(u => u.name).ToList()), ref user.client)); SendToStream(new MessageClass(codes.SENDING_CHAT_HIST, list: DBmanager.GetHistory(name, client.connection)), ref client.client); Task.Run(() => SendBroadcastMessage(client.name + " joined the room.", connection)); }
protected internal void RemoveClient(int id) { ClientClass client = connectedUsers.FirstOrDefault(i => i.id == id); if (client != null) { connectedUsers.Remove(client); } SendBroadcastMessage(client.name + " left the room.", connection); connectedUsers.ForEach(user => SendToStream(new MessageClass(codes.SENDING_USERLIST, list: connectedUsers.Select(u => u.name).ToList()), ref user.client)); Console.WriteLine(client.name + " left the " + name + " room. There are " + connectedUsers.Count + " connected users."); }
/// <summary> /// Смена комнаты пользователя /// </summary> /// <param name="client"></param> /// <param name="newRoom"></param> public static void ChangeRoom(ClientClass client, string newRoom) { client.room.RemoveClient(client.id); rooms.FirstOrDefault(r => r.name == newRoom).AddClient(client); }