Пример #1
0
 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++;
     }
 }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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();
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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();
        }
Пример #7
0
        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}
            });
        }