Exemple #1
0
        public async Task <string> DeleteConversation(string id)
        {
            Conversation exist = await conversationRepository.GetByIdAsync(ObjectId.Parse(id));

            if (exist != null)
            {
                //delete conversation
                await conversationRepository.DeleteAsync(ObjectId.Parse(id));

                //Delete notification group
                FilterDefinition <ClientGroup> finder = Builders <ClientGroup> .Filter.Eq("name", id);

                ClientGroup clientGroup = await clientGroupRepository.FindAsync(finder);

                if (clientGroup != null)
                {
                    await clientGroupRepository.DeleteAsync(clientGroup.Id);
                }

                return("Xóa cuộc trò chuyện thành công");
            }
            else
            {
                throw new Exception("Đã có lỗi xảy ra");
            }
        }
        public async Task SendMessage(string clientGroupName, MessageViewModel message)
        {
            FilterDefinition <ClientGroup> finder = Builders <ClientGroup> .Filter.Eq("name", clientGroupName);

            ClientGroup clientGroup = await clientGroupRepository.FindAsync(finder);

            foreach (string item in clientGroup.UserIds)
            {
                try
                {
                    FilterDefinition <FcmInfo> user = Builders <FcmInfo> .Filter.Eq("user_id", item);

                    string token  = (await fcmInfoRepository.FindAsync(user))?.DeviceToken;
                    User   sender = await userRepository.GetByIdAsync(ObjectId.Parse(message.SenderId));

                    var notifyBody = string.Empty;
                    switch (message.MessageType.Value)
                    {
                    case MessageBaseType.Text:
                        notifyBody = (message.Content as List <string>)[0];
                        break;

                    case MessageBaseType.Image:
                        notifyBody = "Đã gửi một ảnh. ";
                        break;

                    case MessageBaseType.MultiMedia:
                        notifyBody = "Đã gửi một phương tiện. ";
                        break;

                    case MessageBaseType.PostThumbnail:
                        notifyBody = "Đã gửi một liên kết. ";
                        break;

                    case MessageBaseType.ConversationActivity:
                        notifyBody = "Đã có hoạt động mới. ";
                        break;

                    case MessageBaseType.Other:
                        notifyBody = "Đã có thông báo mới. ";
                        break;

                    default:
                        break;
                    }

                    try
                    {
                        FirebaseAdmin.Messaging.Message mes = new FirebaseAdmin.Messaging.Message()
                        {
                            Token = token,
                            Data  = new Dictionary <string, string>()
                            {
                                { "message", JsonConvert.SerializeObject(message) }
                            },
                            Notification = new Notification()
                            {
                                Title    = sender.LastName,
                                Body     = notifyBody,
                                ImageUrl = sender.AvatarHash
                            }
                        };
                        string response = await FirebaseMessaging.DefaultInstance.SendAsync(mes).ConfigureAwait(true);
                    }
                    catch (Exception)
                    {
                        //Do nothing
                    }
                }
                catch (Exception)
                {
                    continue;
                }
            }
        }