RaiseCreatingEvent() static private method

static private RaiseCreatingEvent ( [ e ) : void
e [
return void
Exemplo n.º 1
0
        public static PlayerInfo AddFakeEntry([NotNull] string name, RankChangeType rankChangeType)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            CheckIfLoaded();

            PlayerInfo info;

            lock ( AddLocker ) {
                info = Trie.Get(name);
                if (info != null)
                {
                    throw new ArgumentException("A PlayerDB entry already exists for this name.", "name");
                }

                var e = new PlayerInfoCreatingEventArgs(name, IPAddress.None, RankManager.DefaultRank, true);
                PlayerInfo.RaiseCreatingEvent(e);
                if (e.Cancel)
                {
                    throw new OperationCanceledException("Cancelled by a plugin.");
                }

                info = new PlayerInfo(name, e.StartingRank, false, rankChangeType);

                list.Add(info);
                Trie.Add(info.Name, info);
                UpdateCache();
            }
            PlayerInfo.RaiseCreatedEvent(info, false);
            return(info);
        }
Exemplo n.º 2
0
        public static PlayerInfo FindOrCreateInfoForPlayer([NotNull] string name, [NotNull] IPAddress lastIP)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (lastIP == null)
            {
                throw new ArgumentNullException("lastIP");
            }
            CheckIfLoaded();
            PlayerInfo info;

            // this flag is used to avoid executing PlayerInfoCreated event in the lock
            bool raiseCreatedEvent = false;

            lock (AddLocker)
            {
                info = Trie.Get(name);
                if (info == null)
                {
                    var e = new PlayerInfoCreatingEventArgs(name, lastIP, RankManager.DefaultRank, false);
                    PlayerInfo.RaiseCreatingEvent(e);
                    if (e.Cancel)
                    {
                        throw new OperationCanceledException("Cancelled by a plugin.");
                    }

                    info = new PlayerInfo(name, lastIP, e.StartingRank);
                    Trie.Add(name, info);
                    list.Add(info);
                    UpdateCache();

                    raiseCreatedEvent = true;
                }
            }

            if (raiseCreatedEvent)
            {
                PlayerInfo.RaiseCreatedEvent(info, false);
            }
            return(info);
        }
Exemplo n.º 3
0
        public static PlayerInfo FindOrCreateInfoForPlayer([NotNull] string givenName, [NotNull] IPAddress lastIP)
        {
            if (givenName == null)
            {
                throw new ArgumentNullException("givenName");
            }
            if (lastIP == null)
            {
                throw new ArgumentNullException("lastIP");
            }
            CheckIfLoaded();
            PlayerInfo info;

            // this flag is used to avoid raising PlayerInfoCreated event inside the lock
            bool raiseCreatedEvent = false;

            bool   isEmail = false;
            string name    = givenName;

            // handle email accounts
            if (name.Contains('@'))
            {
                isEmail = true;
                name    = EmailToPlayerName(name);
            }

            lock ( AddLocker ) {
                if (isEmail)
                {
                    // special treatment for email accounts
                    int i = 1;
                    while (true)
                    {
                        string newName = name + (i > 1 ? ("@" + i) : "@");
                        info = Trie.Get(newName);
                        if (info == null)
                        {
                            // found a new player, not in the database
                            name = newName;
                            break;
                        }
                        else if (givenName.CaselessEquals(info.Email))
                        {
                            // player with matching email found
                            return(info);
                        }
                        else
                        {
                            // increment number and retry
                            i++;
                            if ((name + "@" + i).Length > 16)
                            {
                                name = name.Substring(0, name.Length - 1);
                            }
                        }
                    }
                }
                else
                {
                    info = Trie.Get(name);
                }

                if (info == null)
                {
                    var e = new PlayerInfoBeingCreatedEventArgs(name, lastIP, RankManager.DefaultRank, false);
                    PlayerInfo.RaiseCreatingEvent(e);
                    if (e.Cancel)
                    {
                        throw new OperationCanceledException("Cancelled by a plugin.");
                    }

                    info = new PlayerInfo(name, lastIP, e.StartingRank);
                    if (isEmail)
                    {
                        info.Email       = givenName;
                        info.AccountType = AccountType.Free;
                    }
                    Trie.Add(name, info);
                    list.Add(info);
                    UpdateCache();

                    raiseCreatedEvent = true;
                }
            }

            if (raiseCreatedEvent)
            {
                PlayerInfo.RaiseCreatedEvent(info, false);
            }
            return(info);
        }