1

私が書いている Jabbernet クライアントに次のコードを追加しました。

    private void Roster_OnRosterEnd(object sender)
    {
        QueryUser(new JID("lixo@icts.br"));
        QueryUser(new JID("abc@icts.br"));
        QueryUser(new JID("nilo@icts.br"));
        QueryUser(new JID("simone@icts.br"));
    }

    private void QueryUser(JID jid)
    {
        IQ search = new IQ(Client.Document);
        search.From = Client.User.ToString() + "@" + Client.Server.ToString();
        search.To = "search." + Client.Server.ToString();
        search.ID = "search2";
        search.Type = IQType.set;
        search.InnerXml = "<query xmlns='jabber:iq:search'><nick>" + jid.User + "</nick></query>";
        Client.Tracker.BeginIQ(search, new jabber.connection.IqCB(OnSearch), jid);
    }

    private void OnSearch(object sender, IQ iq, object data)
    {
        Error err = iq.Error;
        if (err != null)
            Console.WriteLine("Error " + err.Condition + " on querying user " + data);

        if (iq.Query.ChildNodes.Count == 0)
        {
            Console.WriteLine("No answer querying user " + data);
        }

        foreach (Element a in iq.Query) 
        {
            Console.WriteLine("Answer querying user: " + data + " --> " + a.OuterXml);
        } 
    }

問題は、メソッド OnSearch が実行されるのは 1 回だけであることです。何度検索を試みても実行されません。そのメソッドは、送信する検索ごとに1回実行されると思います...

私は何が欠けていますか?

アップデート

明確にするために...私は、ユーザーが存在するかどうかを発見しようとしています.trueの場合、招待を受け取るユーザーのVCardに含まれるフィールドの内容に応じて、招待を送信できます。送信できるかどうか。

ティア、ニロ

4

1 に答える 1

2

リクエストごとに異なる ID を使用します。あなたのエラーはこの行にあります:

search.ID = "search2";

カウンターを保持するか、IQ コンストラクターがカウンターを生成できるようにします。さらに、差出人アドレスを設定する必要はありません。

search.From = Client.User.ToString() + "@" + Client.Server.ToString();

これらの 2 行を削除すると、機能するはずです。

于 2013-05-07T21:36:26.883 に答える