示例#1
0
        private EntityData CreateItem(EntityType type, string name)
        {
            EntityData ret = null;

            switch (type)
            {
            case EntityType.Character:
                ret = new CharacterData();
                break;

            case EntityType.Corporation:
                ret = new CorporationData();
                break;

            case EntityType.Alliance:
                ret = new AllianceData();
                break;

            default:
                return(null);
            }

            mCache.Add(name, ret);

            return(ret);
        }
        public void HandleRequest(IRequest request)
        {
            var corporationEids = request.Data.GetOrDefault <long[]>(k.eid);
            var result          = CorporationData.GetAnyInfoDictionary(corporationEids);

            Message.Builder.FromRequest(request).WithData(result).Send();
        }
示例#3
0
        public void HandleRequest(IRequest request)
        {
            var pattern = request.Data.GetOrDefault <string>(k.name);

            if (pattern.Equals(string.Empty) || pattern.Length < 2)
            {
                throw new PerpetuumException(ErrorCodes.SearchStringTooShort);
            }

            pattern = $"%{pattern}%";

            var corporationEids = Db.Query().CommandText("select top (32) eid from corporations where ([name] like @pattern or nick like @pattern) and defaultcorp=0")
                                  .SetParameter("@pattern", pattern)
                                  .Execute()
                                  .Select(r => DataRecordExtensions.GetValue <long>(r, 0))
                                  .ToArray();

            if (corporationEids.Any())
            {
                var result = CorporationData.GetAnyInfoDictionary(corporationEids);
                Message.Builder.FromRequest(request).WithData(result).WrapToResult().Send();
            }
            else
            {
                Message.Builder.FromRequest(request).WithEmpty().Send();
            }
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character      = request.Session.Character;
                var corporationEID = character.CorporationEid;
                var resultRole     = CorporationRole.NotDefined;

                var corporation = Corporation.GetOrThrow(corporationEID);

                var role = corporation.GetMemberRole(character);

                if (role.IsAnyRole(CorporationRole.CEO))
                {
                    resultRole = resultRole | CorporationRole.CEO; //force add ceo role
                }


                //not ceo, not boardmember -> drop role is permitted
                corporation.SetMemberRole(character, resultRole);
                corporation.WriteRoleHistory(character, character, resultRole, role);
                CorporationData.RemoveFromCache(corporation.Eid);

                Message.Builder.FromRequest(request).WithOk().Send();

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

                var corporationeid = character.CorporationEid;
                DefaultCorporationDataCache.IsCorporationDefault(corporationeid).ThrowIfTrue(ErrorCodes.CharacterMustBeInPrivateCorporation);

                var role = Corporation.GetRoleFromSql(character);
                role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.HRManager, CorporationRole.PRManager).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

                //do the work
                _corporationManager.DeleteYellowPages(corporationeid);

                var entry  = _corporationManager.GetYellowPages(corporationeid);
                var result = new Dictionary <string, object> {
                    { k.data, entry }
                };
                Message.Builder.FromRequest(request).WithData(result).Send();
                CorporationData.RemoveFromCache(corporationeid);

                scope.Complete();
            }
        }
示例#6
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var corpName  = request.Data.GetOrDefault <string>(k.name).Trim();
                var nick      = request.Data.GetOrDefault <string>(k.nick).Trim();
                var character = request.Session.Character;

                //get corp and role check
                var corporation = character.GetCorporation().CheckAccessAndThrowIfFailed(character, CorporationRole.CEO, CorporationRole.DeputyCEO);

                (corporation is PrivateCorporation).ThrowIfFalse(ErrorCodes.CorporationMustBePrivate);

                //nick check
                nick.Length.ThrowIfGreater(6, ErrorCodes.CorporationNickTooLong);
                nick.Length.ThrowIfLess(2, ErrorCodes.CorporationNickTooShort);
                nick.AllowExtras().ThrowIfFalse(ErrorCodes.CorporationNickNotAllowedCharacters);
                string.IsNullOrEmpty(nick).ThrowIfTrue(ErrorCodes.CorporationNickNotDefined);

                //name check
                corpName.Length.ThrowIfGreater(128, ErrorCodes.CorporationNameTooLong);
                corpName.Length.ThrowIfLessOrEqual(3, ErrorCodes.CorporationNameTooShort);
                corpName.AllowExtras().ThrowIfFalse(ErrorCodes.CorporationNameNotAllowedCharacters);
                string.IsNullOrEmpty(corpName).ThrowIfTrue(ErrorCodes.CorporationNameNotDefined);

                //existence check
                Corporation.IsNameOrNickTaken(corpName, nick).ThrowIfTrue(ErrorCodes.NameTaken);

                //write OLD name to alias history
                Corporation.WriteRenameHistory(corporation.Eid, character, corporation.CorporationName, corporation.CorporationNick);

                var product = _mtProductHelper.GetByAccountTransactionType(AccountTransactionType.CorporationRename);

                var account = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);
                var wallet  = _accountManager.GetWallet(account, AccountTransactionType.CorporationRename);
                wallet.Balance -= product.price;

                var e = new AccountTransactionLogEvent(account, AccountTransactionType.CorporationRename)
                {
                    Credit = wallet.Balance, CreditChange = -product.price
                };
                _accountManager.LogTransaction(e);

                corporation.SetName(corpName, nick);

                _accountRepository.Update(account);

                Transaction.Current.OnCommited(() =>
                {
                    //force cache reload
                    CorporationData.RemoveFromCache(corporation.Eid);

                    //send to members
                    var corpInfo = corporation.GetInfoDictionaryForMember(character);
                    Message.Builder.SetCommand(Commands.CorporationGetMyInfo).WithData(corpInfo).ToCharacters(corporation.GetCharacterMembers()).Send();
                });

                scope.Complete();
            }
        }
示例#7
0
        private async Task LoadCorporationHistory(CorporationData data, CorporationApi api)
        {
            List <GetCorporationsCorporationIdAlliancehistory200Ok> items;

            try
            {
                int id = (int)data.Subject.Id;
                items = await api.GetCorporationsCorporationIdAlliancehistoryAsync(
                    corporationId : id,
                    datasource : ESIConfiguration.DataSource);
            }
            catch (Eve.Api.Client.ApiException e)
            {
                ExceptionHandler.HandleApiException(this, e);
                return;
            }
            HistoryItem[] history   = new HistoryItem[items.Count];
            HistoryItem   last_item = null;

            for (int i = items.Count - 1; i >= 0; i--)
            {
                var item  = items[i];
                var hitem = history[i] = new HistoryItem();

                hitem.Organization = new MailRecipient(EntityType.Alliance, item.AllianceId.HasValue ? item.AllianceId.Value : 0);

                await mClient.AddLookupAsync(hitem.Organization);

                hitem.Closed       = item.IsDeleted.HasValue && item.IsDeleted.Value;
                hitem.HasStartDate = item.StartDate.HasValue;
                if (hitem.HasStartDate)
                {
                    hitem.StartDate = item.StartDate.Value;
                }
                else
                {
                    hitem.StartDateText = "(Unknown)";
                }

                hitem.HasEndDate  = false;
                hitem.EndDateText = "(Present)";

                if (last_item != null)
                {
                    last_item.HasEndDate  = hitem.HasStartDate;
                    last_item.EndDate     = hitem.StartDate;
                    last_item.EndDateText = hitem.StartDateText;
                }

                last_item = hitem;
            }

            data.History       = history;
            data.HistoryLoaded = true;
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var color     = request.Data.GetOrDefault <int>(k.color);

                var corporation = character.GetPrivateCorporationOrThrow().CheckAccessAndThrowIfFailed(character, CorporationRole.CEO, CorporationRole.DeputyCEO);

                corporation.SetColor(color);

                var corpInfo = corporation.GetInfoDictionaryForMember(character);
                Message.Builder.FromRequest(request).WithData(corpInfo).Send();

                CorporationData.RemoveFromCache(corporation.Eid);

                scope.Complete();
            }
        }
示例#9
0
        private async Task LoadCorporationInfo(CorporationData data, CorporationApi api)
        {
            GetCorporationsCorporationIdOk info;

            try
            {
                int id = (int)data.Subject.Id;
                info = await api.GetCorporationsCorporationIdAsync(
                    corporationId : id,
                    datasource : ESIConfiguration.DataSource);
            }
            catch (Eve.Api.Client.ApiException e)
            {
                ExceptionHandler.HandleApiException(this, e);
                data.LoadFailed = true;
                return;
            }

            data.Creator = info.CreatorId.HasValue ? new MailRecipient(EntityType.Character, info.CreatorId.Value) : null;
            data.CEO     = info.CeoId.HasValue ? new MailRecipient(EntityType.Character, info.CeoId.Value) : null;
            data.Founded = info.DateFounded.HasValue ? info.DateFounded.Value : EVE_CLIENT_LAUNCH;
            data.Ticker  = info.Ticker;

            data.PrimaryMembership = info.AllianceId.HasValue ? new MailRecipient(EntityType.Alliance, info.AllianceId.Value) : null;

            data.Description = info.Description;
            data.TaxRate     = info.TaxRate.HasValue ? info.TaxRate.Value : 0;
            data.Url         = info.Url;

            await mClient.AddLookupAsync(data.PrimaryMembership);

            await mClient.AddLookupAsync(data.Creator);

            await mClient.AddLookupAsync(data.CEO);

            data.HasSecurityStatus = false;

            data.InfoLoaded = true;
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                character.IsInTraining().ThrowIfTrue(ErrorCodes.TrainingCharacterInvolved);
                var corporation = character.GetCorporation();

                //deal with taxrate
                if (request.Data.TryGetValue(k.taxRate, out int taxRate))
                {
                    corporation.CanSetTaxRate(character).ThrowIfFalse(ErrorCodes.AccessDenied);
                    corporation.TaxRate = taxRate;
                }


                //deal with private profile
                if (request.Data.TryGetValue(k.privateProfile, out Dictionary <string, object> privateProfile))
                {
                    corporation.IsAnyRole(character, CorporationRole.PRManager, CorporationRole.CEO, CorporationRole.DeputyCEO).ThrowIfFalse(ErrorCodes.AccessDenied);
                    corporation.SetPrivateProfile(privateProfile);
                }

                //public profile
                if (request.Data.TryGetValue(k.publicProfile, out Dictionary <string, object> publicProfile))
                {
                    corporation.IsAnyRole(character, CorporationRole.PRManager, CorporationRole.CEO, CorporationRole.DeputyCEO).ThrowIfFalse(ErrorCodes.AccessDenied);
                    corporation.SetPublicProfile(publicProfile);
                }

                CorporationData.RemoveFromCache(corporation.Eid);

                var corpInfo = corporation.GetInfoDictionaryForMember(character);
                Message.Builder.SetCommand(Commands.CorporationGetMyInfo).WithData(corpInfo).ToCharacters(corporation.GetCharacterMembers()).Send();

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

                var primaryactivity   = request.Data.GetOrDefault(k.primaryActivity, -1);
                var primaryzone       = request.Data.GetOrDefault(k.zoneID, -1);
                var primarybase       = request.Data.GetOrDefault(k.baseEID, (long)-1);
                var orientation       = request.Data.GetOrDefault(k.orientation, -1);
                var lookingfor        = request.Data.GetOrDefault(k.lookingFor, -1);
                var preferredfaction  = request.Data.GetOrDefault(k.preferredFaction, -1);
                var providesinsurance = request.Data.GetOrDefault(k.providesInsurance, -1);
                var timezone          = request.Data.GetOrDefault(k.timeZone, -1);
                var requiredactivity  = request.Data.GetOrDefault(k.requiredActivity, -1);
                var communication     = request.Data.GetOrDefault(k.communication, -1);
                var services          = request.Data.GetOrDefault(k.services, -1);

                var updateList = new List <string>();
                var insertDict = new Dictionary <string, object>();

                var corporationeid = character.CorporationEid;

                DefaultCorporationDataCache.IsCorporationDefault(corporationeid).ThrowIfTrue(ErrorCodes.CharacterMustBeInPrivateCorporation);

                var role = Corporation.GetRoleFromSql(character);
                role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.HRManager, CorporationRole.PRManager).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

                var update = false;

                var query = Db.Query();

                var id = query.CommandText("select id from yellowpages where corporationeid=@corporationeid")
                         .SetParameter("@corporationeid", corporationeid)
                         .ExecuteScalar <int>();

                if (id > 0)
                {
                    update = true;
                }

                insertDict.Add("corporationeid", corporationeid);

                if (primaryactivity >= 0)
                {
                    insertDict.Add("primaryactivity", primaryactivity);
                    updateList.Add("primaryactivity=@primaryactivity ");
                    query.SetParameter("@primaryactivity", primaryactivity);
                }

                if (primaryzone >= 0)
                {
                    _zoneManager.ContainsZone(primaryzone).ThrowIfFalse(ErrorCodes.ZoneNotFound);
                    insertDict.Add("zoneID", primaryzone);
                    updateList.Add("zoneID = @primaryzone ");
                    query.SetParameter("@primaryzone", primaryzone);
                }

                //set explicitely on the client
                if (request.Data.ContainsKey(k.zoneID) && primaryzone == -1)
                {
                    updateList.Add("zoneID = NULL ");
                }

                //na ezert nem lehet pbs base-t a yellow pagesbe beallitani
                if (primarybase > 0)
                {
                    var dockingBase = _dockingBaseHelper.GetDockingBase(primarybase);
                    insertDict.Add("baseEID", dockingBase.Eid);
                    updateList.Add("baseEID = @primarybase ");
                    query.SetParameter("@primarybase", primarybase);
                }

                if (request.Data.ContainsKey(k.baseEID) && primarybase == -1)
                {
                    updateList.Add("baseEID = NULL ");
                }

                if (orientation >= 0)
                {
                    insertDict.Add("orientation", orientation);
                    updateList.Add("orientation=@orientation ");
                    query.SetParameter("@orientation", orientation);
                }

                if (lookingfor >= 0)
                {
                    insertDict.Add("lookingfor", lookingfor);
                    updateList.Add("lookingfor=@lookingfor ");
                    query.SetParameter("@lookingfor", lookingfor);
                }

                if (preferredfaction >= 0)
                {
                    insertDict.Add("preferredfaction", preferredfaction);
                    updateList.Add("preferredfaction = @preferredfaction ");
                    query.SetParameter("@preferredfaction", preferredfaction);
                }

                if (request.Data.ContainsKey(k.preferredFaction) && preferredfaction == -1)
                {
                    updateList.Add("preferredfaction = NULL ");
                }

                if (providesinsurance >= 0)
                {
                    insertDict.Add("providesinsurance", providesinsurance);
                    updateList.Add("providesinsurance=@providesinsurance ");
                    query.SetParameter("@providesinsurance", providesinsurance);
                }

                if (timezone >= 0)
                {
                    insertDict.Add("timezone", timezone);
                    updateList.Add("timezone=@timezone ");
                    query.SetParameter("@timezone", timezone);
                }

                if (requiredactivity >= 0)
                {
                    insertDict.Add("requiredactivity", requiredactivity);
                    updateList.Add("requiredactivity=@requiredactivity ");
                    query.SetParameter("@requiredactivity", requiredactivity);
                }

                if (communication >= 0)
                {
                    insertDict.Add("communication", communication);
                    updateList.Add("communication=@communication ");
                    query.SetParameter("@communication", communication);
                }

                if (services >= 0)
                {
                    insertDict.Add("services", services);
                    updateList.Add("services=@services");
                    query.SetParameter("@services", services);
                }

                updateList.Count.ThrowIfEqual(0, ErrorCodes.NothingDefined);

                string cmdStr;

                if (update)
                {
                    cmdStr = "update yellowpages set " + updateList.ArrayToString() + " where id=@id";
                    query.CommandText(cmdStr).SetParameter("@id", id);
                }
                else
                {
                    cmdStr = insertDict.ToInsertString("yellowpages", "nothing");
                    query.CommandText(cmdStr);
                }

                query.ExecuteNonQuery().ThrowIfNotEqual(1, ErrorCodes.SQLExecutionError);

                var entry  = _corporationManager.GetYellowPages(corporationeid);
                var result = new Dictionary <string, object> {
                    { k.data, entry }
                };
                Message.Builder.FromRequest(request).WithData(result).Send();
                CorporationData.RemoveFromCache(corporationeid);

                scope.Complete();
            }
        }
示例#12
0
 private async Task LoadCorporationData(CorporationData data)
 {
     CorporationApi api = new CorporationApi();
     await Task.WhenAll(LoadCorporationInfo(data, api), LoadCorporationHistory(data, api));
 }
 public void HandleRequest(IRequest request)
 {
     CorporationData.FlushCache();
     Message.Builder.FromRequest(request).WithOk().Send();
 }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var member    = Character.Get(request.Data.GetOrDefault <int>(k.memberID));
                var role      = request.Data.GetOrDefault <CorporationRole>(k.role);

                character.IsInTraining().ThrowIfTrue(ErrorCodes.TrainingCharacterInvolved);


                var corporation = character.GetCorporation().CheckAccessAndThrowIfFailed(character, CorporationRole.CEO, CorporationRole.DeputyCEO);

                var isIssuerCEO = corporation.HasAllRoles(character, CorporationRole.CEO);

                //check target
                corporation.IsMember(member).ThrowIfFalse(ErrorCodes.NotMemberOfCorporation);

                _corporationManager.IsInLeavePeriod(member).ThrowIfTrue(ErrorCodes.RoleChangeOnLeavingMember);

                var CEOBitSet = ((int)role & (int)CorporationRole.CEO) > 0;

                if (!isIssuerCEO)
                {
                    //only CEO can set a roles of a CEO
                    corporation.HasAllRoles(member, CorporationRole.CEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges);
                }

                (CEOBitSet && !isIssuerCEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges);

                //issuer is ceo and he/she wants to clear his/her own CEO role
                if (isIssuerCEO && (member == character))
                {
                    CEOBitSet.ThrowIfFalse(ErrorCodes.CharacterIsCEOOperationFailed);
                }

                //if the CEO wants to resign
                if (isIssuerCEO && (member != character))
                {
                    //ceo bit set
                    if (CEOBitSet)
                    {
                        //target member VS current corpmember amount check
                        corporation.CheckMaxMemberCountAndThrowIfFailed(member);

                        //resign as CEO -----------

                        //old roles
                        var currentRole = corporation.GetMemberRole(character);
                        currentRole = currentRole.ClearRole(CorporationRole.CEO);
                        currentRole = currentRole.SetRole(CorporationRole.DeputyCEO);

                        //clear the current CEO's CEO role
                        corporation.SetMemberRole(character, currentRole);

                        //new roles
                        var newRole = corporation.GetMemberRole(character);

                        corporation.WriteRoleHistory(character, character, newRole, currentRole);
                        //%%% remove alliance board nem kene?
                    }
                }

                role = role.CleanUpHangarAccess();
                role = role.CleanUpCharacterPBSRoles();

                //target member's role
                var oldRole = corporation.GetMemberRole(member);

                const int deputyMask = (int)CorporationRole.DeputyCEO;

                var targetDeputyStatus    = (int)oldRole & deputyMask;
                var targetNewDeputyStatus = (int)role & deputyMask;

                (targetNewDeputyStatus != targetDeputyStatus && !isIssuerCEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges);

                //set the actual target member's role
                corporation.SetMemberRole(member, role);
                corporation.WriteRoleHistory(character, member, role, oldRole);
                //            corporation.GetLogger().SetMemberRole(character,member);
                corporation.Save();

                _channelManager.SetMemberRole(corporation.ChannelName, member, role);

                if (member.IsDocked)
                {
                    var dockingBase = _dockingBaseHelper.GetDockingBase(member.CurrentDockingBaseEid);
                    if (dockingBase is PBSDockingBase pbsDockingBase)
                    {
                        _channelManager.SetMemberRole(pbsDockingBase.ChannelName, member, role);
                    }
                }

                CorporationData.RemoveFromCache(corporation.Eid);

                scope.Complete();
            }
        }