Exemplo n.º 1
0
        // TODO: change all input and output to Core.Contracts in Data field of message
        public void SendMessage(Message message)
        {
            var(token, text) = SplitTextMessage(message.GetStringData());

            if (!CheckToken(token))
            {
                var msg = "Incorrect token. Please try login again";
                client.WriteMessage(new()
                {
                    FromId       = Server.Info.Id,
                    FromUsername = Server.Info.Name,
                    Command      = Command.Error,
                    Data         = msg.ToBytes()
                });
            }

            var res = textMessagesService.AddMessage(new()
            {
                Text      = text,
                Timestamp = message.Timestamp.Value,
                UserId    = _user.UserId,
                User      = _user
            });

            if (res)
            {
                Logger.Debug("SendMessage: successfully added new message");
            }
            else
            {
                Logger.Debug("SendMessage: nothing has been added");
            }
        }
Exemplo n.º 2
0
        public void Register(Message message)
        {
            var data = message.GetStringData();

            Logger.Debug("In Register");
            Login login = JsonConvert.DeserializeObject <Login>(data);

            string msg = "Cannot create user with such name";

            var user = userService.GetUserByName(login.Name);

            if (user == null)
            {
                bool res = userService.AddUser(new User
                {
                    Name     = login.Name,
                    Password = login.Password
                });

                if (res)
                {
                    msg = "User successfully created";
                }
            }

            client.WriteMessage(new Message
            {
                FromId       = Server.Info.Id,
                FromUsername = Server.Info.Name,
                Command      = Command.SendMessage,
                Data         = msg.ToBytes()
            });
        }
Exemplo n.º 3
0
        public void GetMessage(Message message)
        {
            var(token, text) = SplitTextMessage(message.GetStringData());

            if (!CheckToken(token))
            {
                var msg = "Incorrect token";
                client.WriteMessage(new()
                {
                    FromId       = Server.Info.Id,
                    FromUsername = Server.Info.Name,
                    Command      = Command.Error,
                    Data         = msg.ToBytes()
                });
            }

            if (!int.TryParse(text, out int quantity))
            {
                quantity = 100;
            }

            var msgs = textMessagesService
                       .GetAllMessages()
                       .OrderByDescending(m => m.Timestamp)
                       .Take(quantity)
                       .Reverse()
                       .ToList();

            var r = msgs.Select(m => new Core.Contracts.TextMessage
            {
                TextMessageId = m.TextMessageId,
                Username      = userService.GetUser(m.UserId).Name,
                Text          = m.Text,
                Timestamp     = m.Timestamp
            }).ToList();

            var response = JsonConvert.SerializeObject(r, Formatting.Indented);

            client.WriteMessage(new()
            {
                FromId       = Server.Info.Id,
                FromUsername = Server.Info.Name,
                Command      = Command.SendMessage,
                Data         = response.ToBytes()
            });
        }
Exemplo n.º 4
0
        // input:
        //// Data = token:requested_file_name
        public void GetFile(Message message)
        {
            var(token, filename) = SplitTextMessage(message.GetStringData());

            if (!CheckToken(token))
            {
                var msg = "Incorrect token";
                client.WriteMessage(new()
                {
                    FromId       = Server.Info.Id,
                    FromUsername = Server.Info.Name,
                    Command      = Command.Error,
                    Data         = msg.ToBytes()
                });
            }

            var filedata = fileDataService.GetFileData($"Content/{filename}");

            if (filedata is null || !File.Exists($"Content/{filename}"))
            {
                client.WriteMessage(new()
                {
                    FromId       = Server.Info.Id,
                    FromUsername = Server.Info.Name,
                    Command      = Command.Error,
                    Data         = "No such file".ToBytes()
                });
            }

            var response = new Core.Contracts.FileMessage
            {
                FileMessageId = filedata.FileDataId,
                Filename      = filename,
                Data          = Convert.ToBase64String(File.ReadAllBytes($"Content/{filename}"))
            };

            client.WriteMessage(new()
            {
                FromId       = Server.Info.Id,
                FromUsername = Server.Info.Name,
                Command      = Command.GetFile,
                Data         = JsonConvert.SerializeObject(response).ToBytes()
            });
        }
Exemplo n.º 5
0
        public void Login(Message message)
        {
            var data = message.GetStringData();

            Logger.Debug("In Login");
            Login login = JsonConvert.DeserializeObject <Login>(data);

            Logger.Debug($"Accepted login data: {login.Name}: {login.Password}");

            _user = userService.GetUserByName(login.Name);
            Command cmd = default;
            string  msg = "";

            if (_user == null || _user.Password != login.Password)
            {
                cmd = Command.Error;
                msg = "Incorrect login or password";
            }
            else if (_user.Password == login.Password)
            {
                string token = Guid.NewGuid().ToString();
                Logger.Debug($"New token: {token}");
                activeUserService.AddActiveUser(new()
                {
                    Token  = token,
                    UserId = _user.UserId,
                    User   = _user
                });

                cmd = Command.Login;
                msg = $"{_user.Name}: {token}";

                _token = token;
            }

            client.WriteMessage(new()
            {
                FromId       = Server.Info.Id,
                FromUsername = Server.Info.Name,
                Command      = cmd,
                Data         = msg.ToBytes()
            });
        }
Exemplo n.º 6
0
        // input:
        //// Data = token:filename:base64_decoded_binary_data
        public void SendFile(Message message)
        {
            var(token, filename, data) = SplitFileMessage(message.GetStringData());

            if (!CheckToken(token))
            {
                var msg = "Incorrect token";
                client.WriteMessage(new()
                {
                    FromId       = Server.Info.Id,
                    FromUsername = Server.Info.Name,
                    Command      = Command.Error,
                    Data         = msg.ToBytes()
                });
            }

            if (!Directory.Exists("Content"))
            {
                Directory.CreateDirectory("Content");
            }

            File.WriteAllBytes($"Content/{filename}", Convert.FromBase64String(data));
            fileDataService.AddFileData(new() { Path = $"Content/{filename}" });
        }