// 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"); } }
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() }); }
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() }); }
// 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() }); }
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() }); }
// 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}" }); }