Represents the information required to asynchronously resolve a User
        public virtual void ResolveAuth(IrcUser user, IrcUserAuthResolvedHandler authResolvedHandler)
        {
            if (pendingQueries.ContainsKey(user.UserName))
            {
                // already querying
                return;
            }

            IrcUserAuthQuery query = null;

            IrcProtocol.PacketHandler handler = packet => {
                var authName = OnAuthPacketReceived(user, packet);
                if (authName != null)
                {
                    user.AuthName = authName;
                    RemoveQuery(query);
                    authResolvedHandler(user);
                }
            };

            IrcProtocol.Instance.AddPacketHandler(AuthOpcode, handler);

            pendingQueries[user.UserName] = query = new IrcUserAuthQuery(user, handler);

            user.IrcClient.CommandHandler.Whois(user.Nick);
        }
        public virtual void ResolveAuth(IrcUser user, IrcUserAuthResolvedHandler authResolvedHandler)
        {
            if (pendingQueries.ContainsKey(user.UserName))
            {
                // already querying
                return;
            }

            IrcUserAuthQuery query = null;
            IrcProtocol.PacketHandler handler = packet => {
                var authName = OnAuthPacketReceived(user, packet);
                if (authName != null)
                {
                    user.AuthName = authName;
                    RemoveQuery(query);
                    authResolvedHandler(user);
                }
            };

            IrcProtocol.Instance.AddPacketHandler(AuthOpcode, handler);

            pendingQueries[user.UserName] = query = new IrcUserAuthQuery(user, handler);

            user.IrcClient.CommandHandler.Whois(user.Nick);
        }
 /// <summary>
 /// Removes (and therefor cancels) the given query
 /// </summary>
 /// <param name="query"></param>
 public void RemoveQuery(IrcUserAuthQuery query)
 {
     IrcProtocol.Instance.RemovePacketHandler(AuthOpcode, query.Handler);
     pendingQueries.Remove(query.User.UserName);
 }
 /// <summary>
 /// Removes (and therefor cancels) the given query
 /// </summary>
 /// <param name="query"></param>
 public void RemoveQuery(IrcUserAuthQuery query)
 {
     IrcProtocol.Instance.RemovePacketHandler(AuthOpcode, query.Handler);
     pendingQueries.Remove(query.User.UserName);
 }