public void Delete(Channel channel, ChannelMember member)
 {
     Db.Query().CommandText("delete channelmembers where memberid = @memberId and channelid = @channelId")
     .SetParameter("@memberId", member.character.Id)
     .SetParameter("@channelId", channel.Id)
     .ExecuteNonQuery().ThrowIfZero(ErrorCodes.SQLDeleteError);
 }
 public void Insert(Channel channel, ChannelMember member)
 {
     Db.Query().CommandText("insert into channelmembers (memberid,role,channelid) values (@memberid,@role,@channelid)")
     .SetParameter("@role", member.role)
     .SetParameter("@memberId", member.character.Id)
     .SetParameter("@channelId", channel.Id)
     .ExecuteNonQuery().ThrowIfEqual(0, ErrorCodes.SQLInsertError);
 }
        public void Update(Channel channel, ChannelMember member)
        {
            const string cmd = "update channelmembers set role = @newRole where memberId = @memberId and channelId = @channelId";

            Db.Query().CommandText(cmd)
            .SetParameter("@newRole", member.role)
            .SetParameter("@memberId", member.character.Id)
            .SetParameter("@channelId", channel.Id)
            .ExecuteNonQuery().ThrowIfZero(ErrorCodes.SQLUpdateError);
        }
Exemplo n.º 4
0
        public void SendAddMemberToAll(ISessionManager sessionManager, ChannelMember member)
        {
            if (member == null || !sessionManager.IsOnline(member.character))
            {
                return;
            }

            var n = CreateNotificationMessage(ChannelNotify.AddMember, member.ToDictionary());

            SendToAll(sessionManager, n);
        }
Exemplo n.º 5
0
        public void SendMemberOnlineStateToAll(ISessionManager sessionManager, ChannelMember member, bool isOnline)
        {
            if (member == null)
            {
                return;
            }

            var data = new Dictionary <string, object> {
                { k.member, member.ToDictionary() }, { k.state, isOnline }
            };
            var n = CreateNotificationMessage(ChannelNotify.OnlineState, data);

            SendToAll(sessionManager, n);
        }
        private void SessionOnCharacterDeselected(ISession session, Character character)
        {
            foreach (var name in _channels.Keys)
            {
                ChannelMember m       = null;
                var           channel = UpdateChannel(name, c =>
                {
                    m = c.GetMember(character);
                    return(m == null ? c : c.RemoveMember(character));
                });

                channel?.SendMemberOnlineStateToAll(_sessionManager, m, false);
            }
        }
Exemplo n.º 7
0
        public void SendJoinedToMember(ISessionManager sessionManager, ChannelMember member)
        {
            if (member == null)
            {
                return;
            }

            var d = new Dictionary <string, object>
            {
                { k.member, member.ToDictionary() },
                { k.channel, ToDictionary(member.character, true) }
            };

            var n = CreateNotificationMessage(ChannelNotify.Joined, d);

            SendToOne(sessionManager, member.character, n);
        }
        public void JoinChannel(string channelName, Character member, ChannelMemberRole role, string password)
        {
            ChannelMember newMember = null;
            var           channel   = UpdateChannel(channelName, c =>
            {
                if (c.IsOnline(member))
                {
                    return(c);
                }

                if (_memberRepository.Get(c, member) != null)
                {
                    return(c);
                }

                if (member.AccessLevel.IsAdminOrGm())
                {
                    role |= PresetChannelRoles.ROLE_GOD;
                }
                else
                {
                    _banRepository.IsBanned(c, member).ThrowIfTrue(ErrorCodes.CharacterIsBanned);
                    c.CheckPasswordAndThrowIfMismatch(password);
                }

                newMember = new ChannelMember(member, role);
                _memberRepository.Insert(c, newMember);

                if (_sessionManager.IsOnline(member))
                {
                    return(c.SetMember(newMember));
                }

                return(c);
            });

            if (channel == null)
            {
                return;
            }

            channel.SendAddMemberToAll(_sessionManager, newMember);
            channel.SendJoinedToMember(_sessionManager, newMember);
            channel.Logger.MemberJoin(member);
        }
        public void KickOrBan(string channelName, Character issuer, Character character, string message, bool ban)
        {
            if (issuer == character)
            {
                return;
            }

            // adminokat / gm-eket nem lehet kickelni
            character.AccessLevel.IsAdminOrGm().ThrowIfTrue(ErrorCodes.AccessDenied);

            ChannelMember m = null;

            var channel = UpdateChannel(channelName, c =>
            {
                c.CheckRoleAndThrowIfFailed(issuer, PresetChannelRoles.ROLE_CAN_KICK_MEMBER);

                if (ban)
                {
                    _banRepository.Ban(c, character);
                }

                m = c.GetMember(character);

                return(LeaveChannel(c, character, true));
            });

            if (channel == null || m == null)
            {
                return;
            }

            var data = new Dictionary <string, object>
            {
                { k.issuerID, issuer.Id },
                { k.member, m.ToDictionary() },
                { k.ban, ban },
                { k.message, message }
            };

            var n = channel.CreateNotificationMessage(ChannelNotify.KickMember, data);

            channel.SendToAll(_sessionManager, n);
            channel.SendToOne(_sessionManager, character, n);
        }
Exemplo n.º 10
0
        public Channel SetMember(ChannelMember member)
        {
            if (member == null)
            {
                return(this);
            }

            var members = new Dictionary <Character, ChannelMember>(_members)
            {
                [member.character] = member
            };

            return(new Channel
            {
                Id = Id,
                Type = Type,
                Name = Name,
                Topic = Topic,
                Password = Password,
                Logger = Logger,
                _members = members
            });
        }
        public void SetMemberRole(string channelName, Character issuer, Character character, ChannelMemberRole role)
        {
            // adminokra / gm-ekre nem lehet
            if (character.AccessLevel.IsAdminOrGm() && role == ChannelMemberRole.Undefined)
            {
                return;
            }

            ChannelMember m       = null;
            var           channel = UpdateChannel(channelName, c =>
            {
                c.CheckRoleAndThrowIfFailed(issuer, PresetChannelRoles.ROLE_CAN_MODIFY_MEMBER_ROLE);

                m = c.GetMember(character);
                if (m == null)
                {
                    return(c);
                }

                m = m.WithRole(role);
                _memberRepository.Update(c, m);
                return(c.SetMember(m));
            });

            if (channel == null || m == null)
            {
                return;
            }

            var data = new Dictionary <string, object> {
                { k.issuerID, issuer.Id }, { k.member, m.ToDictionary() }
            };
            var n = channel.CreateNotificationMessage(ChannelNotify.ChangeMemberRole, data);

            channel.SendToAll(_sessionManager, n);
        }