public void Execute(Server server, TcpClient client, IMessage message) { DisconnectMessage disconnectMessage = message as DisconnectMessage; User user = server.GetUsers().Find(u => u.SessionIds.Contains(disconnectMessage.SessionId)); if (user != null) { user.SessionIds.Remove(disconnectMessage.SessionId); server.RemoveClient(client); if (user.SessionIds.Count == 0) { // Send user count to all clients (broadcast) UserCountMessage userCountMessage = new UserCountMessage { UserCount = server.GetUsers().Count, UserOnlineCount = server.GetUsers().Count(u => u.SessionIds.Count > 0) }; string userCountMessageJson = JsonSerializer.Serialize(userCountMessage); byte[] userCountMessageBytes = System.Text.Encoding.UTF8.GetBytes(userCountMessageJson); foreach (TcpClient remoteClient in server.GetClients()) { remoteClient.GetStream().Write(userCountMessageBytes, 0, userCountMessageBytes.Length); } } } }
public void Execute(Server server, TcpClient client, IMessage message) { var connectMessage = message as ConnectMessage; bool authenticatedServerPassword = true; if (server.HasPassword()) { authenticatedServerPassword = server.CheckPassword(connectMessage.ServerPassword); } var user = server.GetUsers().Find(u => u.Username == connectMessage.Username && u.Password == connectMessage.Password); bool authenticatedUser = (user != null); bool authenticated = authenticatedServerPassword && authenticatedUser; var connectResponseMessage = new ConnectResponseMessage(); if (authenticated) { string sessionId = Guid.NewGuid().ToString(); user.SessionIds.Add(sessionId); connectResponseMessage.SessionId = sessionId; server.AddClient(client); Console.WriteLine("Client connected."); if (user.SessionIds.Count == 1) { // Send user count to all clients (broadcast) UserCountMessage userCountMessage = new UserCountMessage { UserCount = server.GetUsers().Count, UserOnlineCount = server.GetUsers().Count(u => u.SessionIds.Count > 0), UserNames = server.GetOnlineUserNames() }; string userCountMessageJson = JsonSerializer.Serialize(userCountMessage); byte[] userCountMessageBytes = System.Text.Encoding.UTF8.GetBytes(userCountMessageJson); foreach (TcpClient remoteClient in server.GetClients()) { remoteClient.GetStream().Write(userCountMessageBytes, 0, userCountMessageBytes.Length); } } } connectResponseMessage.Success = authenticated; string json = JsonSerializer.Serialize(connectResponseMessage); byte[] msg = System.Text.Encoding.UTF8.GetBytes(json); client.GetStream().Write(msg, 0, msg.Length); }
public void Execute(TcpClient client, IMessage message) { UserCountMessage userCountMessage = message as UserCountMessage; StringBuilder sb = new StringBuilder(); foreach (string username in userCountMessage.UserNames) { if (username != null) { sb.Append($"\"{username}\" "); } } string usernames = sb.ToString(); Console.WriteLine($"Online users: {usernames} "); Console.WriteLine($"Total (online / sum): {userCountMessage.UserOnlineCount} / " + $"{userCountMessage.UserCount}"); }
public void Execute(Server server, TcpClient client, IMessage message) { RegisterMessage registerMessage = message as RegisterMessage; User test = server.GetUsers().Find(u => u.Username == registerMessage.Username); RegisterResponseMessage registerResponseMessage = new RegisterResponseMessage { Success = false }; bool authenticatedServerPassword = true; if (server.HasPassword()) { authenticatedServerPassword = server.CheckPassword(registerMessage.ServerPassword); } if (authenticatedServerPassword) { if (!IsValid(server, registerMessage.Username, registerMessage.Password)) { registerResponseMessage.Content = errorMessage; } else { //int id = server.GetUsers().OrderBy(u => u.Id).Last().Id + 1; User user = new User { Id = server.GetNextUserId(), Username = registerMessage.Username.Trim(), Password = registerMessage.Password, SessionIds = new List <string>(), tcpClients = new List <TcpClient>() }; server.AddUser(user); user.tcpClients.Add(client); server.SaveUsers(); registerResponseMessage.Content = "New User created"; string sessionId = Guid.NewGuid().ToString(); user.SessionIds.Add(sessionId); registerResponseMessage.SessionId = sessionId; server.AddClient(client); UserCountMessage userCountMessage = new UserCountMessage { UserCount = server.GetUsers().Count, UserOnlineCount = server.GetUsers().Count(u => u.SessionIds.Count > 0) }; string userCountMessageJson = JsonSerializer.Serialize(userCountMessage); byte[] userCountMessageBytes = System.Text.Encoding.UTF8.GetBytes(userCountMessageJson); UserListRequestMessage userListRequestMessage = message as UserListRequestMessage; var query = from u in server.GetUsers() select new { u.Id, u.Username }; var userList = query.ToList(); string userListJson = JsonSerializer.Serialize(userList); UserListResponseMessage userListResponseMessage = new UserListResponseMessage { UserListJson = userListJson }; string messageJson = JsonSerializer.Serialize(userListResponseMessage); byte[] byteMessage = Encoding.UTF8.GetBytes(messageJson); foreach (TcpClient remoteClient in server.GetClients()) { if (remoteClient != client) { remoteClient.GetStream().Write(byteMessage, 0, byteMessage.Length); } remoteClient.GetStream().Write(userCountMessageBytes, 0, userCountMessageBytes.Length); } } } bool authenticated = IsValid(server, registerMessage.Username, registerMessage.Password) && authenticatedServerPassword; registerResponseMessage.Success = authenticated; string json_response = JsonSerializer.Serialize(registerResponseMessage); byte[] msg = System.Text.Encoding.UTF8.GetBytes(json_response); client.GetStream().Write(msg, 0, msg.Length); }
public void Execute(Server server, TcpClient client, IMessage message) { var registrationMessage = message as RegistrationMessage; bool authenticatedServerPassword = true; if (server.HasPassword()) { authenticatedServerPassword = server.CheckPassword(registrationMessage.ServerPassword); } var tmpUserList = server.GetUsers(); int newId = (tmpUserList.Select(x => x.Id).Max()) + 1; var user = new User() { Username = registrationMessage.Username, Password = registrationMessage.Password, Id = newId }; server.AddUsers(user); string userJson = JsonSerializer.Serialize(server.GetUsers()); File.WriteAllText("users.json", userJson); bool authenticatedUser = true; bool authenticated = authenticatedServerPassword && authenticatedUser; ConnectResponseMessage connectResponseMessage = new ConnectResponseMessage(); if (authenticated) { string sessionId = Guid.NewGuid().ToString(); user.SessionIds.Add(sessionId); connectResponseMessage.SessionId = sessionId; server.AddClient(client); Console.WriteLine("Client connected."); if (user.SessionIds.Count == 1) { // Send user count to all clients (broadcast) UserCountMessage userCountMessage = new UserCountMessage { UserCount = server.GetUsers().Count, UserOnlineCount = server.GetUsers().Count(u => u.SessionIds.Count > 0), UserNames = server.GetOnlineUserNames() }; string userCountMessageJson = JsonSerializer.Serialize(userCountMessage); byte[] userCountMessageBytes = System.Text.Encoding.UTF8.GetBytes(userCountMessageJson); foreach (TcpClient remoteClient in server.GetClients()) { remoteClient.GetStream().Write(userCountMessageBytes, 0, userCountMessageBytes.Length); } } } connectResponseMessage.Success = authenticated; string json = JsonSerializer.Serialize(connectResponseMessage); byte[] msg = System.Text.Encoding.UTF8.GetBytes(json); client.GetStream().Write(msg, 0, msg.Length); var registrationResponseMessage = new RegistrationResponseMessage(); foreach (User usr in server.GetUsers()) { registrationResponseMessage.Users.Add(new ChatProtocol.User(usr.Id, usr.Username)); } string jsonReg = JsonSerializer.Serialize(registrationResponseMessage); byte[] regMsg = System.Text.Encoding.UTF8.GetBytes(jsonReg); client.GetStream().Write(regMsg, 0, regMsg.Length); }
public void Execute(TcpClient client, IMessage message) { UserCountMessage userCountMessage = message as UserCountMessage; Console.WriteLine($"Users (online / sum): {userCountMessage.UserOnlineCount} / {userCountMessage.UserCount}"); }
public void Execute(Server server, TcpClient client, IMessage message) { var connectMessage = message as ConnectMessage; var authenticatedServerPassword = true; if (server.HasPassword()) { authenticatedServerPassword = server.CheckPassword(connectMessage.ServerPassword); } var user = server.GetUsers().Find(u => u.Username == connectMessage.ClientUsername && u.Password == connectMessage.ClientPassword); var authenticatedUser = (user != null); var authenticated = authenticatedServerPassword && authenticatedUser; var connectResponseMessage = new ConnectResponseMessage(); if (authenticated) { var sessionId = Guid.NewGuid().ToString(); user.SessionIds.Add(sessionId); user.Clients.Add(client); connectResponseMessage.SessionId = sessionId; server.AddClient(client); Console.WriteLine("Client connected."); if (user.SessionIds.Count == 1) { // Send user count to all clients (broadcast) var userCountMessage = new UserCountMessage { UserCount = server.GetUsers().Count, UserOnlineCount = server.GetUsers().Count(u => u.SessionIds.Count > 0), }; var userCountMessageJson = JsonSerializer.Serialize(userCountMessage); var userCountMessageBytes = System.Text.Encoding.UTF8.GetBytes(userCountMessageJson); foreach (TcpClient remoteClient in server.GetClients()) { remoteClient.GetStream().Write(userCountMessageBytes, 0, userCountMessageBytes.Length); } Thread.Sleep(50); } } connectResponseMessage.Success = authenticated; var json = JsonSerializer.Serialize(connectResponseMessage); var msg = System.Text.Encoding.UTF8.GetBytes(json); client.GetStream().Write(msg, 0, msg.Length); /*List<DirectChatMessage> messageList = server.GetMessages(); * if (messageList != null) * { * foreach (var savedMessage in messageList) * { * if (savedMessage.ToUserId == user.Id) * { * var directChatMessage = savedMessage; * directChatMessage.SessionId = null; * var directChatJson = JsonSerializer.Serialize(directChatMessage); * var chatMsg = System.Text.Encoding.UTF8.GetBytes(directChatJson); * client.GetStream().Write(chatMsg, 0, chatMsg.Length); * } * } * }*/ }