Ejemplo n.º 1
0
        public async Task AddUserConnectionId(Usuario user)
        {
            try
            {
                Usuario userDB = await UsersService.GetInstance().GetUser(Constants.IdQuery, user.Id);

                if (userDB == null)
                {
                    await Clients.Caller.SendAsync("ReceiveAddUserConnectionId", false, "Usuário não localizado no banco de dados.");
                }
                else
                {
                    var           currentConnectionId = Context.ConnectionId;
                    List <string> connectionsId;

                    if (string.IsNullOrEmpty(userDB.ConnectionID))
                    {
                        connectionsId = new List <string>
                        {
                            currentConnectionId
                        };
                    }
                    else
                    {
                        connectionsId = JsonConvert.DeserializeObject <List <string> >(userDB.ConnectionID);

                        if (!connectionsId.Contains(currentConnectionId))
                        {
                            connectionsId.Add(currentConnectionId);
                        }
                    }

                    userDB.IsOnline     = true;
                    userDB.ConnectionID = JsonConvert.SerializeObject(connectionsId);

                    await UsersService.GetInstance().UpdateUser(userDB);

                    //Adicionar ConnectionsIds aos grupos de conversa do SignalR
                    string groupName = userDB.IdComunidadeUsu;
                    var    groups    = await GrupoService.GetInstance().GetGroupList(Constants.NameQuery, groupName);

                    foreach (var connectionId in connectionsId)
                    {
                        foreach (var group in groups)
                        {
                            await Groups.AddToGroupAsync(connectionId, group.Nome);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                StringBuilder msgSb = new();
                msgSb.Append("O documento não pode ser salvo!");
                msgSb.Append(Environment.NewLine);
                msgSb.Append("Código do Erro: ");
                msgSb.Append(e.ToString());
                await Clients.Caller.SendAsync("ReceiveAddUserConnectionId", false, msgSb.ToString());
            }
        }
Ejemplo n.º 2
0
        public async Task DelUserConnectionId(Usuario user)
        {
            Usuario userDB = await UsersService.GetInstance().GetUser(Constants.IdQuery, user.Id);

            if (userDB == null)
            {
                //await Clients.Caller.SendAsync("DelUserConnectionId", false, null, "Usuário não localizado no Banco de Dados!");
            }
            else
            {
                List <string> connectionsId = null;
                if (!string.IsNullOrEmpty(userDB.ConnectionID))
                {
                    var currentConnectionId = Context.ConnectionId;

                    connectionsId = JsonConvert.DeserializeObject <List <string> >(userDB.ConnectionID);
                    if (connectionsId.Contains(currentConnectionId))
                    {
                        connectionsId.Remove(currentConnectionId);
                    }
                    userDB.ConnectionID = JsonConvert.SerializeObject(connectionsId);
                }

                if (connectionsId.Count <= 0)
                {
                    userDB.IsOnline = false;
                }

                await UsersService.GetInstance().UpdateUser(userDB);

                //Remover ConnectrionsIds dos grupos de conversa do SignalR
                string groupName = userDB.IdComunidadeUsu;
                var    groups    = await GrupoService.GetInstance().GetGroupList(Constants.NameQuery, groupName);

                foreach (var connectionId in connectionsId)
                {
                    foreach (var group in groups)
                    {
                        await Groups.RemoveFromGroupAsync(connectionId, group.Nome);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public async Task SendMessage(Usuario user, string msgType, string msg, string groupName)
        {
            try
            {
                Grupo group = await GrupoService.GetInstance().GetGroup(groupName);

                if (!group.Usuarios.Contains(user.Id))
                {
                    StringBuilder sbMsg = new();
                    sbMsg.Append("O usuário ");
                    sbMsg.Append(user.NomeUsuario);
                    sbMsg.Append(" não pertence ao grupo ");
                    sbMsg.Append(group.Nome);
                    await Clients.Caller.SendAsync("ReceiveMessage", null, group, sbMsg.ToString());
                }

                Notificacao message = new()
                {
                    Id          = Guid.NewGuid().ToString(),
                    GroupName   = groupName,
                    UserId      = user.Id,
                    UserJason   = JsonConvert.SerializeObject(user),
                    User        = user,
                    MsgType     = msgType,
                    Text        = msg,
                    Completed   = false,
                    CreatedDate = DateTime.Now
                };

                var success = NotifMsgService.GetInstance().AddNotifMsg(message);
                await Clients.Group(groupName).SendAsync("ReceiveMessage", message, group, user.Id);

                await Clients.Caller.SendAsync("ReceiveMessage", message, group, user.Id);
            }
            catch (Exception e)
            {
                StringBuilder sbError = new();
                sbError.Append("Erro: ");
                sbError.Append(e.ToString());
                await Clients.Caller.SendAsync("ReceiveMessage", null, null, sbError.ToString());
            }
        }
Ejemplo n.º 4
0
        public async Task MonitoringNotification(Notificacao msg)
        {
            try
            {
                List <Monitoring> monitoringList = new();
                Grupo             group          = await GrupoService.GetInstance().GetGroup(msg.GroupName);

                List <String> msgRecipients = JsonConvert.DeserializeObject <List <string> >(group.Usuarios);
                foreach (string userId in msgRecipients)
                {
                    Usuario user = await UsersService.GetInstance().GetUser(Constants.IdQuery, userId);

                    Monitoring monitoring;
                    if (Context.ConnectionId != user.ConnectionID)
                    {
                        monitoring = new Monitoring
                        {
                            Id       = user.Id,
                            Nome     = user.NomeUsuario,
                            IsOnline = user.IsOnline,
                            Resposta = user.RespostaNotifUsu,
                            TemPessoasComProbMobilidade = user.TemPessoasComProbMobilidade,
                        };
                        monitoringList.Add(monitoring);
                    }
                }

                await Clients.Caller.SendAsync("ReceiveMonitoringNotification", monitoringList, null);
            }
            catch (Exception e)
            {
                StringBuilder sbError = new();
                sbError.Append("Erro: ");
                sbError.Append(e.ToString());
                await Clients.Caller.SendAsync("ReceiveMonitoringNotification", null, sbError.ToString());
            }
        }
Ejemplo n.º 5
0
        public async Task CreateOrOpenGroup(Usuario currentUser)
        {
            try
            {
                bool isNewGrp;
                var  group = await GrupoService.GetInstance().GetGroup(currentUser.IdComunidadeUsu);

                if (group == null)
                {
                    isNewGrp = true;

                    //Se não encontrou o grupo no banco de dados, cria um.
                    group = new Grupo
                    {
                        Id   = Guid.NewGuid().ToString(),
                        Nome = currentUser.IdComunidadeUsu,
                    };
                }
                else
                {
                    isNewGrp       = false;
                    group.Usuarios = null;
                }

                IList <Usuario> listUsers = null;
                listUsers = await UsersService.GetInstance().GetUsersList(Constants.IdComunidadeQuery, group.Nome);

                List <string> listUserId = new();
                foreach (Usuario user in listUsers)
                {
                    listUserId.Add(user.Id);
                    //Adicionando os Connections Id's dos usuários no grupo do SignalR
                    if (!string.IsNullOrEmpty(user.ConnectionID))
                    {
                        var connectionsId = JsonConvert.DeserializeObject <List <string> >(user.ConnectionID);
                        foreach (var connectionId in connectionsId)
                        {
                            await Groups.AddToGroupAsync(connectionId, group.Nome);
                        }
                    }
                }

                if (!listUserId.Contains(currentUser.Id))
                {
                    listUserId.Add(currentUser.Id);
                }

                //Salvando os Id's dos usuários no grupo do Banco de dados.
                group.Usuarios = JsonConvert.SerializeObject(listUserId);
                if (isNewGrp)
                {
                    var success = await GrupoService.GetInstance().AddGroup(group);
                }
                else
                {
                    await GrupoService.GetInstance().UpdateGroup(group);
                }

                await Clients.Caller.SendAsync("OpenGroup", group.Nome);
            }
            catch (Exception e)
            {
                StringBuilder sbError = new();
                sbError.Append("Erro: ");
                sbError.Append(e.ToString());
                await Clients.Caller.SendAsync("OpenGroup", "", sbError);
            }
        }