コード例 #1
0
        public void UpdateGroupChat(GroupChat chat, Action <GroupChat> chatConsumer)
        {
            var request = new RestRequest($"/chats/{chat.Id}", Method.PUT);

            request.AddJsonBody(chat);
            _sender.Send(request, chatConsumer);
        }
コード例 #2
0
        public GroupChat CreateGroupChat(string owner, string name, List <string> members)
        {
            var chat = new GroupChat()
            {
                Name        = name,
                Owner       = _userRepo.GetOne(owner),
                ChatMembers = new List <ChatMember>()
            };

            _chatRepo.Add(chat);

            foreach (var member in members)
            {
                chat.ChatMembers.Add(new ChatMember()
                {
                    Chat = chat,
                    User = _userRepo.GetOne(member)
                });
            }
            ;

            _chatRepo.Save(chat);

            return(chat);
        }
コード例 #3
0
        public void StartGroupChat(GroupChat chat, Action <GroupChat> chatConsumer)
        {
            var request = new RestRequest("/chats", Method.POST);

            request.AddJsonBody(chat);
            _sender.Send(request, chatConsumer);
        }
コード例 #4
0
ファイル: Dialogs.cs プロジェクト: E-A-Volobuev/ChatChat
        ////отправка сообщений в группу
        //public string GroupMessage(string name,Message mes)
        //{
        //    var person = db.Users.FirstOrDefault(x => x.Email == name);
        //    var date = DateTime.Now;
        //    if(person.Ban==true&&date>person.BanDateTime.AddMinutes(5))
        //    {
        //        person.Ban = false;
        //        db.Entry(person).State = EntityState.Modified;
        //        db.SaveChanges();
        //    }
        //    if(person.Ban==false)
        //    {
        //        var chat = db.Chats.FirstOrDefault(x => x.Name == mes.ToName);
        //        Message mess = new Message { Text = mes.Text, FromId = person.Id, FromName = person.Email, ChatId = chat.Id, DateTime = DateTime.Now };
        //        db.Messages.Add(mess);
        //        db.SaveChanges();
        //        return "ок";
        //    }
        //    else
        //    {
        //        return "Вас заблокировали на 5 минут";
        //    }
        //}
        //создание беседы из нескольких человек
        public string Array(string name, GroupChat groupChat)
        {
            var clients = groupChat.MassivIdUser.ToList(); // id клиентов для создания беседы, без текущего пользователя
            var users   = db.Users.ToList();               // все пользователи из бд
            var person  = db.Users.FirstOrDefault(x => x.Email == name);
            var people  = new List <Person>();             //клиенты для беседы


            foreach (var i in clients)
            {
                foreach (var j in users)
                {
                    if (i == j.Id)
                    {
                        people.Add(j);
                    }
                }
            }
            Chat chat = new Chat {
                Name = groupChat.Name
            };

            chat.PeopleChat.Add(person);
            foreach (var x in people)
            {
                chat.PeopleChat.Add(x);
            }
            db.Chats.Add(chat);
            db.SaveChanges();
            return("беседа создана!");
        }
コード例 #5
0
        public IActionResult GroupChangeStatus(string id, int groupId)
        {
            Group  group     = repository.Groups.FirstOrDefault(g => g.GroupId == groupId);
            string newStatus = "Private";

            if (group.Status == "Private")
            {
                newStatus = "Public";

                //add notification if not exists
                if (repository.Notifications.Any(n => n.For == "Group" && n.ForId == groupId &&
                                                 n.Subject == "AddUserToGroup") == false)
                {
                    repository.NewNotification(id, "AddUserToGroup", "Group", group.GroupId);
                }
            }

            group.Status = newStatus;
            repository.SaveGroup(group);

            if (group.GroupChatId != 0)
            {
                GroupChat chat = repository.GroupChats.FirstOrDefault(c => c.ChatId == group.GroupChatId);
                chat.Status = newStatus;
                repository.EditGroupChat(chat);
            }

            return(RedirectToAction("GroupDetails", new { id, groupId }));
        }
コード例 #6
0
        public void AddMembers(GroupChat chat, IList <Account> newMembers, Action <GroupChat> chatConsumer)
        {
            var request = new RestRequest($"/chats/{chat.Id}/members", Method.POST);

            request.AddJsonBody(newMembers);
            _sender.Send(request, chatConsumer);
        }
コード例 #7
0
        public async Task <IActionResult> CreateGroupChat([FromBody] GroupChatMember otherMember)
        {
            var user = await TokenHelper.GetUser(User, _userManager);

            if (user == null)
            {
                return(RequestHandler.Unauthorized());
            }

            if (user.Id.ToString() == otherMember.Id)
            {
                return(RequestHandler.BadRequest("You can't start a chat with yourself"));
            }

            var groupChat = await _groupChatService.GetExistingGroupChatAsync(user.Id.ToString(), otherMember.Id);

            if (groupChat != null)
            {
                return(RequestHandler.BadRequest($"You are already in a group chat with {otherMember.Name}"));
            }

            groupChat = new GroupChat();

            groupChat.Members.Add(new GroupChatMember
            {
                Id    = user.Id.ToString(),
                Name  = user.UserName,
                Email = user.Email,
            });

            groupChat.Members.Add(otherMember);

            await _groupChatService.SaveGroupChatAsync(groupChat);

            foreach (var member in groupChat.Members)
            {
                var clients = SignalRMemberService.GetConnectionsByUser(member.Id);
                if (clients == null)
                {
                    continue;
                }

                foreach (var connectionId in clients)
                {
                    await _signalRHub.Groups.AddToGroupAsync(connectionId, groupChat.Id);

                    if (member.Id == user.Id.ToString())
                    {
                        await _signalRHub.Clients.Client(connectionId).GroupChatUpdated(groupChat);
                    }
                    else
                    {
                        await _signalRHub.Clients.Client(connectionId).GroupChatCreated(groupChat, user.UserName);
                    }
                }
            }

            return(Ok(groupChat));
        }
コード例 #8
0
        public IActionResult AddUsers(NewGroupStep2ViewModel model)
        {
            //group
            Group group = repository.Groups
                          .FirstOrDefault(g => g.GroupId == model.GroupId);
            //Created by
            AppUser user = userManager.Users.FirstOrDefault(u => u.Id == group.CreatedBy.Id);

            if (model.UsersIdString != null)
            {
                //list of users id
                string userIdList = model.UsersIdString.Trim();
                while (userIdList.Trim().Length > 0)
                {
                    int index = userIdList.IndexOf(";");
                    if (index != -1)
                    {
                        string newUserId = userIdList.Substring(0, index);

                        repository.AddUserToGroup(newUserId, group.GroupId);
                        //notification
                        if (group.Status == "Public")
                        {
                            repository.NewNotification(group.CreatedBy.Id, "AddUserToGroup", "Group", group.GroupId, newUserId);
                        }
                        //group chat exists
                        if (group.GroupChatId != 0)
                        {
                            repository.AddUserToGroupChat(group.GroupChatId, newUserId);

                            GroupChat groupChat = repository.GroupChats
                                                  .FirstOrDefault(g => g.ChatId == group.GroupChatId);
                            AppUser addedUser = userManager.Users.FirstOrDefault(u => u.Id == newUserId);

                            string userName = (user.FirstName == null && user.LastName == null) ?
                                              user.UserName : user.FirstName + user.LastName;
                            string           content = $"{userName} added {addedUser}";
                            GroupChatMessage newMsg  = new GroupChatMessage
                            {
                                GroupChatId    = group.GroupChatId,
                                UserId         = user.Id,
                                MessageContent = content,
                                MessageType    = "SystemMsg"
                            };

                            repository.NewGroupChatMessage(newMsg, groupChat);
                        }

                        userIdList = userIdList.Replace(newUserId + ";", "");
                    }
                }
            }

            return(RedirectToAction("GroupDetails", new
            {
                id = group.CreatedBy.Id,
                groupId = group.GroupId
            }));
        }
コード例 #9
0
    public static PacketWriter Create(GroupChat groupChat)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.GroupChat);

        pWriter.Write(GroupChatPacketMode.Create);
        pWriter.WriteInt(groupChat.Id);
        return(pWriter);
    }
コード例 #10
0
        public ActionResult GetGroupChat()
        {
            string        tid     = Session["TID"].ToString();
            GroupChat     chat    = new GroupChat();
            List <NGroup> DetList = chat.GetGroupChat(tid);

            return(View(DetList));
        }
コード例 #11
0
 public List <string> GetAllGroupHistory(GroupChat groupChat)
 {
     if (_messagesHistory.ContainsKey(groupChat))
     {
         return(_messagesHistory[groupChat]);
     }
     return(new List <string>());
 }
コード例 #12
0
        private GroupChat SendGroup(string groupName)
        {
            GroupChat groupChat = _data.AllGroupsChat.GetGroupsChat().Where(g => g.Name == groupName).First();

            _requests.SendModelMessage(_client, groupChat);

            return(groupChat);
        }
コード例 #13
0
        public IActionResult PutGroupChat(JObject obj)
        {
            GroupChat groupChat = obj["groupchat"].ToObject <GroupChat>();
            User      user      = obj["user"].ToObject <User>();

            GroupChatDataProvider.AddGroupChat(groupChat, user);
            return(Ok());
        }
コード例 #14
0
        public IActionResult RemoveGroupChatUser(JObject obj)
        {
            GroupChat groupChat = obj["groupchat"].ToObject <GroupChat>();
            User      user      = obj["user"].ToObject <User>();

            GroupChatDataProvider.RemoveGroupChatUserID(groupChat, user);
            return(Ok());
        }
コード例 #15
0
        public async Task <GroupChat> createGroupChat(GroupChat groupChat)
        {
            await _context.GroupChats.AddAsync(groupChat);

            await _context.SaveChangesAsync();

            return(groupChat);
        }
コード例 #16
0
        private void AddGroup(GroupChat newGroupChat, GroupChat oldGroupChat, Guid clientGuid)
        {
            _data.AllGroupsChat.RemoveGroupChat(oldGroupChat);
            _data.AllGroupsChat.AddGroupChat(newGroupChat);
            List <Guid> removeClients = GetRemoveClients(newGroupChat, oldGroupChat);

            SaveAlert(removeClients, oldGroupChat, clientGuid);
        }
コード例 #17
0
        public static Packet Leave(GroupChat groupChat)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.GROUP_CHAT);

            pWriter.WriteEnum(GroupChatPacketMode.Leave);
            pWriter.WriteInt(groupChat.Id);
            return(pWriter);
        }
コード例 #18
0
        public override void Connect()
        {
            base.Connect();

            // If it's the first access for the user, we send the added meta message
            if (FirstAccess)
            {
                SendMetaMessage(MetaState.Added);
            }

            // Now send a meta message, that the user is online
            SendMetaMessage(MetaState.Online);

            // Declare the queue for the user
            var queue = GroupChat.SharedSecret.GroupChatName + "." + GroupChat.ChatMember;

            Model.QueueDeclare(queue, true, false, false, null);
            var consumer = new EventingBasicConsumer(Model);

            consumer.Received += (obj, ea) =>
            {
                var message = BinaryFormatter <ChatMessage> .FromBinary(ea.Body);

                // Proof that receiver is not the sender
                if (message.Sender == GroupChat.ChatMember)
                {
                    return;
                }

                // Decrypt the message
                if (message.IsEncrypted)
                {
                    message = GroupChat.Decrypt(message);
                }

                // if Message can't decrypted (due to wrong shared key etc)
                if (message == null)
                {
                    return;
                }

                // Check, if the plain text is a json meta object
                var parsedJsonObject = JObject.Parse(message.PlainText);
                if (parsedJsonObject.IsValid(MetaMessageSchema))
                {
                    var metaMessage = JsonConvert.DeserializeObject <MetaMessage>(message.PlainText);
                    OnMetaMessageReceived?.Invoke(GroupChat.ChatMember, message.Sender, metaMessage);
                }
                else if (parsedJsonObject.IsValid(ContentMessageSchema))
                {
                    var contentMessage = JsonConvert.DeserializeObject <TMessageObject>(message.PlainText);
                    OnMessageReceived?.Invoke(GroupChat.ChatMember, message.Sender, contentMessage);
                }
            };

            Model.QueueBind(queue, "amq.fanout", GroupChat.SharedSecret.GroupChatName, null);
            Model.BasicConsume(queue, true, string.Empty, false, true, null, consumer);
        }
コード例 #19
0
        public void SendMessage(TMessageObject message, string chatMember = null)
        {
            var json        = JsonConvert.SerializeObject(message);
            var chatMessage = GroupChat.Encrypt(json);

            var queue = GroupChat.SharedSecret.GroupChatName + (chatMember != null ? $".{chatMember}" : "");

            Model.BasicPublish("amq.fanout", queue, true, new BasicProperties(), BinaryFormatter <ChatMessage> .ToBinary(chatMessage));
        }
コード例 #20
0
 public async Task <ChatMessage> GetMessageByIdAsync(GroupChat chat, string msgId)
 {
     return(await _context
            .Entry(chat)
            .Collection(x => x.Messages)
            .Query()
            .Include(x => x.SentBy)
            .SingleOrDefaultAsync(x => x.Id.Equals(msgId, StringComparison.Ordinal)));
 }
コード例 #21
0
    public static PacketWriter LoginNotice(GroupChat groupChat, Player player)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.GroupChat);

        pWriter.Write(GroupChatPacketMode.LoginNotice);
        pWriter.WriteInt(groupChat.Id);
        pWriter.WriteUnicodeString(player.Name);
        return(pWriter);
    }
コード例 #22
0
 public static void ChatSystemUpdate()
 {
     Console.WriteLine("----------------ChatSystemUpdate----------------");
     new Thread(() => PrivateChat.GetPage().Update()).Start();
     new Thread(() => Chat.GetPage().Update()).Start();
     new Thread(() => GroupChat.GetPage().Update()).Start();
     new Thread(() => GroupSetting.GetPage().Update()).Start();
     new Thread(() => Group.getPage().Update()).Start();
 }
コード例 #23
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            GroupChat groupChat = await _db.groupChats.FindAsync(id);

            _db.groupChats.Remove(groupChat);
            await _db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
コード例 #24
0
        public void AddGroupChat([FromBody] GroupChat groupChat, int groupId)
        {
            var             group = groupRepository.GetById(groupId);
            GroupController gc    = new GroupController();

            groupChatRepository.Add(groupChat);

            groupChatRepository.SaveChanges(groupChat);
        }
コード例 #25
0
        public void RemoveSelectedMessages()
        {
            List <Message> removeMessages = LocalMessages.Where(m => m.Selecting).ToList();

            removeMessages.ForEach(m => _db.Entry(m).State = EntityState.Deleted);
            _db.SaveChanges();
            GroupChat.RemoveMessages(groupChat.Messages, removeMessages);
            groupChat.UpdateChat(removeMessages);
        }
コード例 #26
0
        public static Packet LogoutNotice(GroupChat groupChat, Player player)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.GROUP_CHAT);

            pWriter.WriteEnum(GroupChatPacketMode.LogoutNotice);
            pWriter.WriteInt(groupChat.Id);
            pWriter.WriteUnicodeString(player.Name);
            return(pWriter);
        }
コード例 #27
0
        private void AddGroup(GroupChat groupChat, Guid clientGuid)
        {
            groupChat.Managers.Add(clientGuid);
            groupChat.Participants.Add(clientGuid);
            _data.AllGroupsChat.AddGroupChat(groupChat);
            _logger.LogInformation($"add new group {groupChat.Name}");

            SaveAlert(groupChat, clientGuid);
        }
コード例 #28
0
        // All API calls for GroupChat
        // All API calls for GroupChat
        // All API calls for GroupChat

        public async Task <bool> CreateGroupChat(int groupId, GroupChat chat)
        {
            var         client   = new HttpClient();
            var         json     = JsonConvert.SerializeObject(chat);
            HttpContent content  = new StringContent(json, Encoding.UTF8, "application/json");
            var         response = await client.PostAsync(ConnectionString + "api/GroupChat/AddGroupChat/" + groupId.ToString() + "/", content);

            return(response.IsSuccessStatusCode);
        }
コード例 #29
0
        private void SaveAlerts(List <TcpClient> allClientsNotConnected, GroupChat group)
        {
            Alert          alert = new Alert(AlertOptions.NEW_MESSAGE, $"you have message in group {group.Name}");
            MessageRequest messageRequestAlert = new MessageRequest(MessageKey.ALERT, alert);

            foreach (var client in allClientsNotConnected)
            {
                _data.ClientsAlerts.AddNewAlert(client, messageRequestAlert);
            }
        }
コード例 #30
0
 public GroupChatForm(GroupChat chat, User[] users, ListBox AllUsers)
 {
     InitializeComponent();
     this.chat               = chat;
     chat.OnClose           += OnClose;
     chat.OnGetMessage      += GetMessage;
     chat.OnUserUpdateState += UpdateUser;
     InitializeUsers(users);
     this.AllUsers = AllUsers;
 }
コード例 #31
0
        /// <summary>
        /// Static method that takes in an xml String and converts it to an AbstractMessage.
        /// 
        /// Will throw an XmlException if the xml String was in an unrecognized format.
        /// </summary>
        /// <param name="xml">A String with xml representing an AbstractMessage</param>
        /// <returns>The AbstractMessage parsed from the XML String</returns>
        public override AbstractMessage Parse(String xml)
        {
            XmlTextReader reader = new XmlTextReader(new StringReader(xml));
            AbstractMessage returnee = null;
            Int32 chatId = 0;

            String element = "";
            String textMessage = "";
            String username = "";
            String password = "";
            String sender = "";

            Boolean accepted = false;
            Boolean isAlreadyLoggedOn = true;
            Boolean alreadyExisted = false;
            Boolean authenticationDisabled = false;

            GroupChat chat = null;
            ExtendedHashSet<String> hashSet = null;

            try
            {
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.CDATA:
                            switch (element)
                            {
                                case "Message":
                                    textMessage = reader.Value;
                                    break;
                                case "Username":
                                    username = reader.Value;
                                    break;
                                case "Password":
                                    password = reader.Value;
                                    break;
                                case "User":
                                    hashSet.Add(reader.Value);
                                    break;
                                case "Participant":
                                    hashSet.Add(reader.Value);
                                    break;
                                case "Sender":
                                    sender = reader.Value;
                                    break;
                                case "Name":
                                    hashSet.Add(reader.Value);
                                    break;
                                default:
                                    break;
                            }
                            break;

                        case XmlNodeType.Element:
                            element = reader.Name; // define last known element
                            switch (element)
                            {
                                case "UserList":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                                case "Participants":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                                case "ToBeAdded":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                                case "ToBeRemoved":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                            }
                            break;

                        case XmlNodeType.EndElement:
                            switch (reader.Name)
                            {
                                case "TextMessage":
                                    returnee = new TextMessage(textMessage);
                                    break;
                                case "LoginMessage":
                                    returnee = new LoginMessage(username, password);
                                    break;
                                case "LoginResponseMessage":
                                    returnee = new LoginResponseMessage(accepted, isAlreadyLoggedOn, username);
                                    break;
                                case "AddToUserListMessage":
                                    returnee = new AddToUserListMessage(hashSet);
                                    break;
                                case "RemoveFromUserListMessage":
                                    returnee = new RemoveFromUserListMessage(hashSet);
                                    break;
                                case "GroupChatMessage":
                                    returnee = new GroupChatMessage(chat, textMessage, sender);
                                    break;
                                case "AddMemberToGroupChatMessage":
                                    returnee = new AddMemberToGroupChatMessage(chatId, hashSet);
                                    break;
                                case "RemoveMemberFromGroupChatMessage":
                                    returnee = new RemoveMemberFromGroupChatMessage(chatId, hashSet);
                                    break;
                                case "StartGroupChatRequestMessage":
                                    returnee = new StartGroupChatRequestMessage(hashSet);
                                    break;
                                case "StartGroupChatResponseMessage":
                                    returnee = new StartGroupChatResponseMessage(chatId, alreadyExisted);
                                    break;
                                case "GroupChatInfoRequestMessage":
                                    returnee = new GroupChatInfoRequestMessage(chatId);
                                    break;
                                case "GroupChatInfoResponseMessage":
                                    returnee = new GroupChatInfoResponseMessage(chat);
                                    break;
                                case "SignupRequestMessage":
                                    returnee = new SignupRequestMessage(username, password);
                                    break;
                                case "SignupResponseMessage":
                                    returnee = new SignupResponseMessage(accepted, alreadyExisted, authenticationDisabled);
                                    break;
                                case "GroupChat":
                                    chat = new GroupChat(hashSet, chatId);
                                    break;
                                default:
                                    break;
                            }
                            break;
                        case XmlNodeType.Text:
                            switch (element)
                            {
                                case "Accepted":
                                    accepted = Boolean.Parse(reader.Value);
                                    break;
                                case "IsAlreadyLoggedOn":
                                    isAlreadyLoggedOn = Boolean.Parse(reader.Value);
                                    break;
                                case "ChatID":
                                    chatId = int.Parse(reader.Value);
                                    break;
                                case "AlreadyExisted":
                                    alreadyExisted = Boolean.Parse(reader.Value);
                                    break;
                                case "AuthenticationDisabled":
                                    authenticationDisabled = Boolean.Parse(reader.Value);
                                    break;
                                default:
                                    break;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch
            {
                throw new XmlException("Unrecognized XML Format...");
            }
            reader.Close();
            if (returnee != null)
            {
                return returnee;
            }
            else
            {
                throw new XmlException("Unrecognized XML Format...");
            }
        }