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); }