XMPP接続からのVCardイベントと応答を処理する必要があります。
private void vcardToolStripMenuItem_Click(object sender, EventArgs e)
{
RosterNode node = rosterControl.SelectedItem();
if (node != null)
{
frmVcard f = new frmVcard(node.RosterItem.Jid, XmppCon);
f.Show();
}
}
上記は、AGSXMPPダウンロードのミニクライアントソリューションの例からのものです。これは、ユーザーがユーザーのVCARDを要求したときに発生することに注意してください。ただし、いつでもその要求を開始できます。
private void VcardResult(object sender, IQ iq, object data)
{
if (InvokeRequired)
{
// Windows Forms are not Thread Safe, we need to invoke this :(
// We're not in the UI thread, so we need to call BeginInvoke
BeginInvoke(new IqCB(VcardResult), new object[] { sender, iq, data });
return;
}
if (iq.Type == IqType.result)
{
Vcard vcard = iq.Vcard;
if (vcard!=null)
{
txtFullname.Text = vcard.Fullname;
txtNickname.Text = vcard.Nickname;
txtBirthday.Text = vcard.Birthday.ToString();
txtDescription.Text = vcard.Description;
Photo photo = vcard.Photo;
if (photo != null)
picPhoto.Image = vcard.Photo.Image;
}
}
}
これは、誰かがXMPPにVCARD情報を要求し、IQタイプが適切なデータと一致した場合に発生します。次に、から写真をプルできますvcard.Photo
。
次の方法でプルをトリガーします。
VcardIq viq = new VcardIq(IqType.get, new Jid(jid.Bare));
con.IqGrabber.SendIq(viq, new IqCB(VcardResult), null);
最初の行は、VCARDフォームがユーザー情報を要求するために使用するXMPPサーバーへの要求です。
そこでの2行目は、フォームが情報の到着を待機し、必要な情報を解析するために使用する別のグラバー(ある種のコールバック)を設定します。この場合、グラバーは新しい形式であるため、メインアプリケーションはその情報の解析について心配する必要はありません。
AGSXMPP zipファイルをローカルドライブに抽出し、Samples \ VS2008 \ miniclientフォルダーを確認することで、ソース全体を確認できます。