예제 #1
0
        public Result Add(string token, long chatId, long userId)
        {
            var result = new Result();
            var usr    = Helpers.CheckerTokenHelper.GetUser(token);

            if (usr is null)
            {
                var error = new Error();
                error.Code    = 2;
                error.Message = "Неверный токен.";

                result.Data   = error;
                result.Status = false;

                return(result);
            }

            using (var db = new DatabaseContext())
            {
                var chat     = db.GroupChats.SingleOrDefault(c => c.ChatId == chatId);
                var userchat = new UsersChat();
                userchat.Messages = chat.Messanges;
                userchat.Owner    = userId;
                userchat.ChatId   = chatId * -1;


                var user = db.Users.SingleOrDefault(u => u.UserId == userId);

                chat.Members += $"{user.UserId},";
                //создание сервисного сообщения
                var msg = new Message();
                msg.Text           = $"{usr.FirstName} {usr.LastName} добавил(а) {user.FirstName} {user.LastName} в чат";
                msg.ServiceMessage = true;
                msg.Time           = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                msg.MsgId          = db.Messages.Count() + 1;
                msg.ChatId         = chatId * -1;
                db.Messages.Add(msg);

                chat.Messanges += $"{msg.MsgId},";

                userchat.LastMessage = msg.MsgId;
                db.UsersChats.Add(userchat);

                foreach (var memberStr in chat.Members.Split(","))
                {
                    if (memberStr != "")
                    {
                        var update = db.UnreadMessages.SingleOrDefault(u => u.UserId == long.Parse(memberStr));
                        update.Messages += $",{msg.MsgId}";
                    }
                }

                db.SaveChanges();

                result.Status = true;
                result.Data   = true;
            }

            return(result);
        }
예제 #2
0
        public Result Create(string token, string name)
        {
            var result = new Result();
            var usr    = Helpers.CheckerTokenHelper.GetUser(token);

            if (usr is null)
            {
                var error = new Error();
                error.Code    = 2;
                error.Message = "Неверный токен.";

                result.Data   = error;
                result.Status = false;

                return(result);
            }

            using (var db = new DatabaseContext())
            {
                var chat = new GroupChat();
                chat.Admin   = usr.UserId;
                chat.Members = $"{usr.UserId},";

                //создание тестового сообщения..
                var msg = new Message();
                msg.Text           = $"{usr.FirstName} {usr.LastName} создал(а) групповой чат {name}";
                msg.ServiceMessage = true;
                msg.Time           = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                msg.MsgId          = db.Messages.Count() + 1;
                db.Messages.Add(msg);

                chat.Messanges = $"{msg.MsgId},";
                chat.Title     = name;
                chat.ChatId    = db.GroupChats.Count() + 1;
                db.GroupChats.Add(chat);

                var userchat = new UsersChat();
                userchat.Messages    = chat.Messanges;
                userchat.Owner       = usr.UserId;
                userchat.LastMessage = msg.MsgId;
                userchat.ChatId      = chat.ChatId * -1;
                db.UsersChats.Add(userchat);



                db.SaveChanges();

                result.Data = chat;

                result.Status = true;
                return(result);
            }
        }
예제 #3
0
        public ResponseCommand Execute(object data, User user, ILoggerService logger)
        {
            var response = new ResponseCommand();

            if (!(data is Shared.Models.Messages.Send))
            {
                response.Data     = 5;
                response.TypeData = "error";
                return(response);
            }

            var msg = (Shared.Models.Messages.Send)data;

            if (msg.ChatId > 0)
            {
                //Отправка сообщения пользователю.

                using (var db = new ServerData())
                {
                    try
                    {
                        //Проверка есть ли такой пользователь вообще.

                        if (db.Users.Any(u => u.UserId == msg.ChatId))
                        {
                            //Пользователь есть
                            var usr = db.Users.Single(u => u.UserId == msg.ChatId);

                            //Проверяем есть ли чат с этим пользователем.
                            if (db.UsersChats.Any(c => c.Owner == user.UserId && c.ChatId == usr.UserId))
                            {
                                //ничего не делаем
                            }
                            else
                            {
                                //Создавать чат для отправителя.

                                var usrChat = new UsersChat();
                                usrChat.Messages    = "";
                                usrChat.Owner       = user.UserId;
                                usrChat.ChatId      = usr.UserId;
                                usrChat.LastMessage = 0;
                                usrChat.LocalId     = db.UsersChats.Count() + 1;
                                db.UsersChats.Add(usrChat);

                                db.SaveChanges();


                                //Создание чата для принимающего.

                                var usrChat2 = new UsersChat();
                                usrChat2.Messages    = "";
                                usrChat2.Owner       = usr.UserId;
                                usrChat2.LastMessage = 0;
                                usrChat2.ChatId      = user.UserId;
                                usrChat2.LocalId     = db.UsersChats.Count() + 1;
                                db.UsersChats.Add(usrChat2);
                            }


                            //Отправляем ему сообщение

                            var msgObj = new Database.Message()
                            {
                                MsgId      = db.Messages.Count() + 1,
                                ChatId     = 0,
                                RecieverId = usr.UserId,
                                SenderId   = user.UserId,
                                Text       = msg.Text,
                                Time       = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds
                            };

                            //Добавление сообщения в бд
                            db.Messages.Add(msgObj);

                            //Добавление id сообщения в список.

                            var chats1 = db.UsersChats.Single(c => c.Owner == user.UserId && c.ChatId == usr.UserId);
                            chats1.Messages   += $",{msgObj}";
                            chats1.LastMessage = msgObj.Time;

                            var chats2 = db.UsersChats.Single(c => c.Owner == usr.UserId && c.ChatId == user.UserId);
                            chats2.Messages   += $",{msgObj}";
                            chats2.LastMessage = msgObj.Time;


                            db.SaveChanges();
                            var rsp = new SendResponse();
                            rsp.MsgId = msgObj.MsgId;

                            response.Data     = rsp;
                            response.TypeData = "msg.snd";
                            return(response);
                            //Todo: сделать оповещение юзера.
                        }
                        else
                        {
                            //Пользователя с таким Id не существует.
                            response.Data     = 8;
                            response.TypeData = "error";
                            return(response);
                        }
                    }
                    catch (Exception e)
                    {
                        logger.Error("Произошла ошибка при отправке сообщения", e);
                        response.Data     = e.Message;
                        response.TypeData = "exception";
                        return(response);
                    }
                }
            }
            else
            {
                return(null);
            }
        }
예제 #4
0
        public Result Get(string text, long chatId, string token, long attach = 0)
        {
            _logger.Debug($"msg.send?text={text}&chatId={chatId}&token={token}&attach={attach}");
            var result = new Result();
            var user   = Helpers.CheckerTokenHelper.GetUser(token);

            if (user is null)
            {
                var error = new Error();
                error.Code    = 2;
                error.Message = "Неверный токен.";

                result.Data   = error;
                result.Status = false;

                return(result);
            }


            using (var db = new DatabaseContext())
            {
                if (chatId > 0) //отправка в лс..
                {
                    //Проверка есть ли такой пользователь.
                    if (db.Users.Any(u => u.UserId == chatId))
                    {
                        //получение пользователя
                        var usr = db.Users.Single(u => u.UserId == chatId);

                        if (db.UsersChats.Any(c => c.Owner == user.UserId && c.ChatId == usr.UserId))
                        {
                            //Ничего не делаем
                        }
                        else
                        {
                            //Создание  чат для отправителя.

                            var userChat = new UsersChat();
                            userChat.Messages    = "";
                            userChat.Owner       = user.UserId;
                            userChat.ChatId      = usr.UserId;
                            userChat.LastMessage = 0;
                            userChat.LocalId     = db.UsersChats.Count() + 1;
                            db.UsersChats.Add(userChat);

                            db.SaveChanges();

                            //Создание чата для принимающего.

                            var userChat2 = new UsersChat();
                            userChat2.Messages    = "";
                            userChat2.Owner       = usr.UserId;
                            userChat2.LastMessage = 0;
                            userChat2.ChatId      = user.UserId;
                            userChat2.LocalId     = db.UsersChats.Count() + 1;
                            db.UsersChats.Add(userChat2);

                            db.SaveChanges();
                        }

                        //Отправлем ему сообщение

                        var msgObj = new Message()
                        {
                            MsgId       = db.Messages.Count() + 1,
                            ChatId      = 0,
                            RecieverId  = usr.UserId,
                            SenderId    = user.UserId,
                            ImageSender = user.PathProfilePic,
                            NameSender  = user.FirstName + " " + user.LastName,
                            Text        = text,
                            Attach      = attach,
                            Time        = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds
                        };

                        //Добавление сообщение в бд
                        db.Messages.Add(msgObj);

                        //Добавление id сообщения в список.

                        var chats1 = db.UsersChats.Single(c => c.Owner == user.UserId && c.ChatId == usr.UserId);
                        chats1.Messages   += $",{msgObj.MsgId}";
                        chats1.LastMessage = msgObj.Time;

                        var chats2 = db.UsersChats.Single(c => c.Owner == usr.UserId && c.ChatId == user.UserId);
                        chats2.Messages   += $",{msgObj.MsgId}";
                        chats2.LastMessage = msgObj.Time;

                        var update = db.UnreadMessages.SingleOrDefault(u => u.UserId == usr.UserId);
                        update.Messages += $",{msgObj.MsgId}";

                        db.SaveChanges();

                        var response = new Shared.Models.Messages.Send();
                        response.MsgId = msgObj.MsgId;

                        result.Data   = response;
                        result.Status = true;
                    }
                }
                else
                {
                    var groupChatId = chatId * -1;

                    var chat = db.GroupChats.SingleOrDefault(c => c.ChatId == groupChatId);

                    var msg = new Message();
                    msg.Attach         = attach;
                    msg.Text           = text;
                    msg.Time           = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                    msg.ChatId         = chatId;
                    msg.ImageSender    = user.PathProfilePic;
                    msg.NameSender     = user.FirstName + " " + user.LastName;
                    msg.RecieverId     = chatId;
                    msg.SenderId       = user.UserId;
                    msg.ServiceMessage = false;
                    msg.UsersReaded    = "";
                    msg.MsgId          = db.Messages.Count() + 1;

                    db.Messages.Add(msg);

                    chat.Messanges += $"{msg.MsgId},";

                    foreach (var memberStr in chat.Members.Split(","))
                    {
                        if (memberStr != "")
                        {
                            var member = long.Parse(memberStr);

                            var userChat = db.UsersChats.SingleOrDefault(c => c.Owner == member && c.ChatId == chatId);
                            userChat.Messages   += $"{msg.MsgId},";
                            userChat.LastMessage = msg.MsgId;

                            //уведомления о новом сообщении других пользователей.
                            var update = db.UnreadMessages.SingleOrDefault(u => u.UserId == long.Parse(memberStr));
                            update.Messages += $",{msg.MsgId}";
                        }
                    }

                    db.SaveChanges();

                    var response = new Shared.Models.Messages.Send();
                    response.MsgId = msg.MsgId;
                    result.Data    = response;
                    result.Status  = true;
                }

                return(result);
            }
        }
예제 #5
0
        public Result GetChatMethod(long chatId, long count, long offset, string token)
        {
            _logger.Debug($"msg.getChat?chatId={chatId}&count={count}&offset={offset}&token={token}");
            var result = new Result();
            var usr    = Helpers.CheckerTokenHelper.GetUser(token);

            if (usr is null)
            {
                var error = new Error();
                error.Code    = 2;
                error.Message = "Неверный токен.";

                result.Data   = error;
                result.Status = false;

                return(result);
            }

            _logger.Debug("Обращение к бд.");
            using (var db = new DatabaseContext())
            {
                UsersChat chat = null;
                chat = db.UsersChats.SingleOrDefault(c => c.Owner == usr.UserId && c.ChatId == chatId);


                if (chat is null)
                {
                    var error = new Error();
                    error.Code    = 9;
                    error.Message = "Такого чата не существует.";
                    result.Data   = error;
                    result.Status = false;

                    return(result);
                }

                _logger.Debug("Поиск сообщений...");
                var chatMsgs = chat.Messages.Split(",").ToList();
                _logger.Debug($"db: {chat.Messages}");
                var chatModel = new Shared.Models.Messages.GetChat();
                chatModel.Messages = new List <Message>();

                try
                {
                    for (var i = offset; i < count; i++)
                    {
                        var msgId = chatMsgs[Convert.ToInt32(i)];
                        _logger.Debug($"db id msg: {msgId}");
                        if (msgId == "")
                        {
                            _logger.Debug("Пропуск числа.");
                            goto blep;
                        }
                        var id    = long.Parse(msgId);
                        var msgDb = db.Messages.SingleOrDefault(m => m.MsgId == id);
                        var itm   = msgDb.ConvertToMessage();
                        if (itm.SenderId != 0)
                        {
                            var sender = db.Users.SingleOrDefault(u => u.UserId == itm.SenderId);
                            itm.ImageSender = sender.PathProfilePic;
                        }
                        chatModel.Messages.Add(itm);

blep:
                        int i2 = 0;
                    }
                }
                catch (Exception e)
                {
                    _logger.Error("GetChat", e);
                }

                _logger.Debug($"Отправка {chatModel.Messages.Count} сообщений.");
                result.Data   = chatModel;
                result.Status = true;
                return(result);
            }
        }