public void JoinMember(Gang gang, Character member, bool joinChannel) { _gangRepository.InsertMember(gang, member); void Finish() { gang.SetMember(member); var data = new Dictionary <string, object> { { k.data, gang.GetGangData() }, { k.memberID, member.Id } }; Message.Builder.SetCommand(Commands.GangAddMember).WithData(data).ToCharacters(gang.GetMembers()).Send(); GangMemberJoined?.Invoke(gang, member); if (joinChannel) { _channelManager.JoinChannel(gang.ChannelName, member); } } if (Transaction.Current != null) { Transaction.Current.OnCommited(Finish); } else { Finish(); } }
public void RemoveMember(Gang gang, Character member, bool isKick) { if (gang == null) { return; } if (!gang.IsMember(member)) { throw new PerpetuumException(ErrorCodes.CharacterNotInTheCurrentGang); } _gangRepository.DeleteMember(gang, member); void Finish() { var data = new Dictionary <string, object> { { k.data, gang.GetGangData() }, { k.memberID, member.Id } }; var cmd = isKick ? Commands.GangKickMember : Commands.GangRemoveMember; Message.Builder.SetCommand(cmd).WithData(data).ToCharacters(gang.GetMembers()).Send(); gang.RemoveMember(member); _channelManager.LeaveChannel(gang.ChannelName, member); OnGangMemberRemoved(gang, member); } if (Transaction.Current != null) { Transaction.Current.OnCommited(Finish); } else { Finish(); } }
public void DisbandGang(Gang gang) { _gangRepository.Delete(gang); void Finish() { Message.Builder.SetCommand(Commands.GangDelete).WithData(gang.GetGangData()).ToCharacters(gang.GetMembers()).Send(); _channelManager.DeleteChannel(gang.ChannelName); _gangs.Remove(gang.Id); GangDisbanded?.Invoke(gang); } if (Transaction.Current != null) { Transaction.Current.OnCommited(Finish); } else { Finish(); } }