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); }
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); }
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); } }
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); }
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); }