public void LikeMessage(Model.Message message) { if (!string.IsNullOrEmpty(message.Id)) { var repo = new Domain.MessageRepository(); repo.UpdateMessageLikes(new ObjectId(message.Id), 1); message.Likes++; } }
public Message CreateMessage(Model.Message content) { var jsonContent = JsonConvert.SerializeObject(content); var message = ByteStreamMessage.CreateMessage(new ArraySegment<byte>(Encoding.UTF8.GetBytes(jsonContent))); message.Properties["WebSocketMessageProperty"] = new WebSocketMessageProperty() { MessageType = WebSocketMessageType.Text }; return message; }
public Domain.Message MapClientMessageToDomain(Model.Message message) { var messageDto = new Domain.Message() { SentDate = message.SentDate, Likes = message.Likes, Text = message.Text, Author = new BsonDocument { {"Id", new ObjectId(message.SenderId)}, {"Username", message.Username}, {"Avatar", new ObjectId(message.AvatarId)} } }; if (message.Id != null) messageDto.Id = new ObjectId(message.Id); return messageDto; }
private void BroadcastMessage(Model.Message message) { //Prevent modifying the collection when someone is sending message lock (NewsfeedService.clientsLock) { var manager = new NewsfeedManager(); foreach (var client in ClientsManager.Instance.Clients) { try { //get only usernames from the BsonDosument collection var blockedUsernames = client.Value.User.BlockedUsers.Select(u => u.GetElement("Username").Value.AsString); if (blockedUsernames.Contains(message.Username)) { continue; } client.Value.Callback.Send(manager.CreateMessage(message)); } catch { } } ClientsManager.Instance.ClearFailed(); } }
private void SendLikeNotification(Model.Message content, string username) { var notification = new Model.Message() { Action = ServiceAction.Notification.ToString(), Text = String.Format("{0} liked your message: {1}", username, content.Text), SentDate = DateTime.Now }; var manager = new NewsfeedManager(); var notificationMessage = manager.CreateMessage(notification); ChannelWrapper client; if (ClientsManager.Instance.Clients.TryGetValue(content.Username, out client)) { //TODO: save the notifcation in the database so the user can recieve it later when he is logged; client.Callback.Send(notificationMessage); } }
public void SaveMessage(Model.Message message, Domain.User user) { var messagesRepo = new Domain.MessageRepository(); var usersRepo = new Domain.UserRepository(); //a new message has been sent to the server message.SentDate = DateTime.Now; message.Username = user.Username; message.SenderId = user.Id.ToString(); message.AvatarId = user.Avatar.ToString(); //Save the message to the db var messageDto = MapClientMessageToDomain(message); messagesRepo.InsertMessage(messageDto); message.Id = messageDto.Id.ToString(); }
internal void BlockUser(Domain.User user, Model.Message content) { var repo = new Domain.UserRepository(); repo.Block(user.Id, new ObjectId(content.SenderId), content.Username); user.BlockedUsers.Add(new BsonDocument { {"_id", new ObjectId(content.SenderId)}, {"Username", content.Username} }); }