public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;

                var playersToRegister = request.Data.GetOrDefault <int[]>(k.members).Select(Character.Get).ToArray();
                var probeEid          = request.Data.GetOrDefault <long>(k.eid);

                playersToRegister.Length.ThrowIfEqual(0, ErrorCodes.WTFErrorMedicalAttentionSuggested);

                var probe = _unitHelper.GetUnitOrThrow <ProximityProbeBase>(probeEid);
                probe.HasAccess(character).ThrowIfError();

                var corporation = character.GetPrivateCorporationOrThrow();

                var members = corporation.GetCharacterMembers();

                var processedCharacters = playersToRegister.Intersect(members).ToArray();

                if (processedCharacters.Length <= 0)
                {
                    return;
                }

                var bosses = corporation.Members.Where(m => m.role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO)).Select(m => m.character).ToArray();

                probe.GetMaxRegisteredCount().ThrowIfLess(processedCharacters.Length - bosses.Length, ErrorCodes.MaximumAllowedRegistrationExceeded);

                PBSRegisterHelper.ClearMembersFromSql(probeEid);

                //add bosses
                processedCharacters = processedCharacters.Concat(bosses).Distinct().ToArray();

                PBSRegisterHelper.WriteRegistersToDb(probeEid, processedCharacters);


                Transaction.Current.OnCommited(() =>
                {
                    probe.ReloadRegistration();
                    probe.SendUpdateToAllPossibleMembers();
                });

                scope.Complete();
            }
        }
Exemplo n.º 2
0
        public void HandleRequest(IRequest request)
        {
            var character   = request.Session.Character;
            var corporation = character.GetPrivateCorporationOrThrow();
            var role        = corporation.GetMemberRole(character);

            var allProbes = ProximityProbeBase.IsAllProbesVisible(role);
            var probeEids = allProbes ? corporation.GetProximityProbeEids() : PBSRegisterHelper.PBSRegGetEidsByRegisteredCharacter(character);

            var probesDict = _zoneManager.Zones.GetUnits <ProximityProbeBase>()
                             .Where(probeBase => probeEids.Contains(probeBase.Eid))
                             .ToDictionary("c", p => p.ToDictionary());

            var reply = new Dictionary <string, object>
            {
                { k.probes, probesDict },
            };

            Message.Builder.FromRequest(request).WithData(reply).Send();
        }
Exemplo n.º 3
0
 public Character[] GetRegisteredCharacters()
 {
     return(LazyInitializer.EnsureInitialized(ref _registeredCharacters, () => PBSRegisterHelper.GetRegisteredMembers(_sourceUnit.Eid).ToArray()));
 }