Пример #1
0
        public void Execute(Server server, TcpClient client, IMessage message)
        {
            UserListRequestMessage userListRequestMessage = message as UserListRequestMessage;

            User user = server.GetUsers().Find(u => u.SessionIds.Contains(userListRequestMessage.SessionId));

            if (user != null)
            {
                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);
                client.GetStream().Write(byteMessage, 0, byteMessage.Length);
            }
        }
Пример #2
0
        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);
        }