public static ChatUserModel GetUser(this ChatUserEventModel chatUserEvent)
 {
     return(new ChatUserModel()
     {
         userId = chatUserEvent.id, userName = chatUserEvent.username, userRoles = chatUserEvent.roles
     });
 }
示例#2
0
 private async Task <UserViewModel> AddUser(ChatUserEventModel chatUserEvent)
 {
     return(await this.AddUser(new ChatUserModel()
     {
         userId = chatUserEvent.id, userName = chatUserEvent.username, userRoles = chatUserEvent.roles
     }));
 }
 private async void ChatClient_OnUserLeaveOccurred(object sender, ChatUserEventModel chatUser)
 {
     await this.userJoinLeaveEventsSemaphore.WaitAndRelease(() =>
     {
         this.userLeaveEvents[chatUser.id] = chatUser;
         return(Task.FromResult(0));
     });
 }
示例#4
0
        private async void ChatClient_OnUserJoinOccurred(object sender, ChatUserEventModel e)
        {
            UserViewModel user = new UserViewModel(e);

            await this.AddUser(user);

            this.OnUserJoinOccurred(sender, user);
        }
示例#5
0
        private void ChatClient_OnUserLeaveOccurred(object sender, ChatUserEventModel e)
        {
            UserViewModel user = new UserViewModel(e);

            this.RemoveUser(user);

            this.OnUserLeaveOccurred(sender, user);
        }
        private void ChatClient_UserLeaveOccurred(object sender, ChatUserEventModel e)
        {
            ChatUser user = this.chatUsers.FirstOrDefault(u => u.ID.Equals(e.id));

            if (user != null)
            {
                this.chatUsers.Remove(user);
            }
        }
示例#7
0
        private async void ChatClient_OnUserLeaveOccurred(object sender, ChatUserEventModel e)
        {
            UserViewModel user = await ChannelSession.ChannelUsers.RemoveUser(e.id);

            if (user != null)
            {
                this.OnUserLeaveOccurred(sender, user);
            }
        }
示例#8
0
        private async void ChatClient_OnUserJoinOccurred(object sender, ChatUserEventModel e)
        {
            UserViewModel user = await this.AddUser(e);

            if (user != null)
            {
                this.OnUserJoinOccurred(sender, user);
            }
        }
        private void ChatClient_UserJoinOccurred(object sender, ChatUserEventModel e)
        {
            ChatUser user = this.chatUsers.FirstOrDefault(u => u.ID.Equals(e.id));

            if (user == null)
            {
                this.chatUsers.Add(new ChatUser(e));
            }
        }
示例#10
0
        private async void ChatClient_OnUserTimeoutOccurred(object sender, ChatUserEventModel e)
        {
            UserViewModel user = await ChannelSession.ChannelUsers.GetUser(e.user);

            if (user != null)
            {
                this.OnUserTimeoutOccurred(sender, user);

                if (ChannelSession.Constellation.CanUserRunEvent(user, EnumHelper.GetEnumName(OtherEventTypeEnum.MixerUserTimeout)))
                {
                    ChannelSession.Constellation.LogUserRunEvent(user, EnumHelper.GetEnumName(OtherEventTypeEnum.MixerUserTimeout));
                    await ChannelSession.Constellation.RunEventCommand(ChannelSession.Constellation.FindMatchingEventCommand(EnumHelper.GetEnumName(OtherEventTypeEnum.MixerUserTimeout)), user);
                }
            }
        }
        private async Task ChatterJoinLeaveBackground()
        {
            await BackgroundTaskWrapper.RunBackgroundTask(this.backgroundThreadCancellationTokenSource, async (tokenSource) =>
            {
                List <ChatUserEventModel> joinsToProcess = new List <ChatUserEventModel>();
                await this.userJoinLeaveEventsSemaphore.WaitAndRelease(() =>
                {
                    for (int i = 0; i < userJoinLeaveEventsTotalToProcess && i < this.userJoinEvents.Count(); i++)
                    {
                        ChatUserEventModel chatUser = this.userJoinEvents.Values.First();
                        joinsToProcess.Add(chatUser);
                        this.userJoinEvents.Remove(chatUser.id);
                    }
                    return(Task.FromResult(0));
                });

                if (joinsToProcess.Count > 0)
                {
                    IEnumerable <UserViewModel> processedUsers = await ChannelSession.ActiveUsers.AddOrUpdateUsers(joinsToProcess.Select(u => u.GetUser()));
                    this.OnUsersJoinOccurred(this, processedUsers);
                }

                List <ChatUserEventModel> leavesToProcess = new List <ChatUserEventModel>();
                await this.userJoinLeaveEventsSemaphore.WaitAndRelease(() =>
                {
                    for (int i = 0; i < userJoinLeaveEventsTotalToProcess && i < this.userLeaveEvents.Count(); i++)
                    {
                        ChatUserEventModel chatUser = this.userLeaveEvents.Values.First();
                        leavesToProcess.Add(chatUser);
                        this.userLeaveEvents.Remove(chatUser.id);
                    }
                    return(Task.FromResult(0));
                });

                if (leavesToProcess.Count > 0)
                {
                    IEnumerable <UserViewModel> processedUsers = await ChannelSession.ActiveUsers.RemoveUsers(leavesToProcess.Select(u => u.id));
                    this.OnUsersLeaveOccurred(this, processedUsers);
                }

                tokenSource.Token.ThrowIfCancellationRequested();

                await Task.Delay(2500, tokenSource.Token);

                tokenSource.Token.ThrowIfCancellationRequested();
            });
        }
        private async void ChatClient_OnUserUpdateOccurred(object sender, ChatUserEventModel chatUser)
        {
            UserViewModel user = await ChannelSession.ActiveUsers.AddOrUpdateUser(chatUser.GetUser());

            if (user != null)
            {
                this.OnUserUpdateOccurred(sender, user);

                if (chatUser.roles != null && chatUser.roles.Count() > 0 && chatUser.roles.Where(r => !string.IsNullOrEmpty(r)).Contains(EnumHelper.GetEnumName(MixerRoleEnum.Banned)))
                {
                    if (ChannelSession.Constellation.CanUserRunEvent(user, EnumHelper.GetEnumName(OtherEventTypeEnum.MixerUserBan)))
                    {
                        ChannelSession.Constellation.LogUserRunEvent(user, EnumHelper.GetEnumName(OtherEventTypeEnum.MixerUserBan));
                        await ChannelSession.Constellation.RunEventCommand(ChannelSession.Constellation.FindMatchingEventCommand(EnumHelper.GetEnumName(OtherEventTypeEnum.MixerUserBan)), user);
                    }
                }
            }
        }
示例#13
0
 private static void ChatClient_OnUserJoinOccurred(object sender, ChatUserEventModel e)
 {
     Log($"{e.username}\tjoined");
 }
示例#14
0
 private static void ChatClient_OnUserLeaveOccurred(object sender, ChatUserEventModel e)
 {
     System.Console.WriteLine(string.Format("{0} has left chat", e.username));
 }
示例#15
0
 private static void ChatClient_OnUserLeaveOccurred(object sender, ChatUserEventModel e)
 {
     Log($"{e.username}\tleft");
 }
示例#16
0
 public UserViewModel(ChatUserEventModel userEvent) : this(userEvent.id, userEvent.username, userEvent.roles)
 {
 }
 private void ChatClient_UserTimeoutOccurred(object sender, ChatUserEventModel e)
 {
     this.viewerCount--;
     this.CurrentViewersTextBlock.Text = this.viewerCount.ToString();
 }
示例#18
0
 public ChatUser(ChatUserEventModel userEvent) : this(userEvent.id, userEvent.username, userEvent.roles)
 {
 }
 private void ChatClient_UserTimeoutOccurred(object sender, ChatUserEventModel e)
 {
 }
示例#20
0
 /// <summary>
 /// Gets information about the specified user.
 /// </summary>
 /// <param name="user">The user to get</param>
 /// <returns>The user's information</returns>
 public async Task <UserWithChannelModel> GetUser(ChatUserEventModel user)
 {
     Validator.ValidateVariable(user, "user");
     return(await this.GetUser(user.id));
 }
 private void ChatClient_UserUpdateOccurred(object sender, ChatUserEventModel e)
 {
 }