void Listener_OnGroupMemberAdded(FizzGroupMemberEventData eventData)
 {
     if (UserId.Equals(eventData.MemberId))
     {
         Client.Chat.Groups.FetchGroup(eventData.GroupId, (groupMeta, ex) =>
         {
             if (ex == null)
             {
                 AddGroup(new FizzGroupModel(groupMeta, GroupTag));
                 FizzGroupModel group = GetGroup(groupMeta.Id);
                 if (eventData.State == FizzGroupMemberState.Pending)
                 {
                     GroupInvites.Add(group.Id, CreateUserGroup(eventData));
                 }
                 if (OnGroupAdded != null)
                 {
                     OnGroupAdded.Invoke(GetGroup(eventData.GroupId));
                 }
             }
         });
     }
     else
     {
         FizzGroupModel group = GetGroup(eventData.GroupId);
         if (group != null && OnGroupMembersUpdated != null)
         {
             OnGroupMembersUpdated.Invoke(group);
         }
     }
 }
        private IFizzUserGroup CreateUserGroup(FizzGroupMemberEventData eventData)
        {
            JSONClass userGroupJson = new JSONClass
            {
                { FizzJsonUserGroup.KEY_GROUP_ID, eventData.GroupId },
                { FizzJsonUserGroup.KEY_ROLE, eventData.Role.ToString() },
                { FizzJsonUserGroup.KEY_STATE, eventData.State.ToString() },
                { FizzJsonUserGroup.KEY_CREATED, Utils.GetCurrentUnixTimeStamp() }
            };

            return(new FizzJsonUserGroup(userGroupJson.ToString()));
        }
        private FizzGroupMemberEventData ParseMemberEventData(FizzTopicMessage message)
        {
            JSONClass payload             = JSONNode.Parse(message.Data).AsObject;
            FizzGroupMemberEventData data = new FizzGroupMemberEventData();

            data.MemberId = payload["id"];
            data.GroupId  = message.From;
            data.State    = FizzUtils.ParseState(payload["state"]);
            data.Role     = FizzUtils.ParseRole(payload["role"]);

            return(data);
        }
        void Listener_OnGroupMemberUpdated(FizzGroupMemberEventData eventData)
        {
            FizzGroupModel group = GetGroup(eventData.GroupId);

            if (group != null)
            {
                if (eventData.MemberId.Equals(UserId) && eventData.State == FizzGroupMemberState.Joined)
                {
                    GroupInvites.Remove(eventData.GroupId);
                }
                if (OnGroupMembersUpdated != null)
                {
                    OnGroupMembersUpdated.Invoke(group);
                }
            }
        }
        void Listener_OnGroupMemberRemoved(FizzGroupMemberEventData eventData)
        {
            if (UserId.Equals(eventData.MemberId))
            {
                FizzGroupModel group = GetGroup(eventData.GroupId);
                GroupInvites.Remove(eventData.GroupId);
                Groups.Remove(groupLookup[eventData.GroupId]);
                groupLookup.Remove(eventData.GroupId);

                if (group != null && OnGroupRemoved != null)
                {
                    OnGroupRemoved.Invoke(group);
                }
            }
            else
            {
                FizzGroupModel group = GetGroup(eventData.GroupId);
                if (group != null && OnGroupMembersUpdated != null)
                {
                    OnGroupMembersUpdated.Invoke(group);
                }
            }
        }