예제 #1
0
        void GroupManager_connectionChanged(ConnectionManager.ConnectionInformation information, ConnectionManager.ConnectionState state)
        {
            // Called when user connection is changed (AKA disconnect)
            if (state != ConnectionManager.ConnectionState.closed)
                return;

            GameClient client = FirewindEnvironment.GetGame().GetClientManager().GetClient((uint)information.getConnectionID());
            Habbo user = client.GetHabbo();

            if (user == null || user.Groups.Count == 0)
                return;

            lock (_groupDeleteQueue.SyncRoot)
            {
                foreach (int groupID in user.Groups)
                {
                    if (!_groupReferences.ContainsKey(groupID))
                        continue;

                    if (--_groupReferences[groupID] <= 0) // No more references, we can delete this group from cache
                    {
                        _groupReferences.Remove(groupID);
                        if (!Groups.ContainsKey(groupID))
                            continue;
                        _groupDeleteQueue.Enqueue(groupID);
                    }
                }
            }
        }