ContactManager 类

定义

表示持久保存在 Windows 通讯簿中的 PeerContact 对象的集合。

public ref class ContactManager sealed : IDisposable
public sealed class ContactManager : IDisposable
type ContactManager = class
    interface IDisposable
Public NotInheritable Class ContactManager
Implements IDisposable
继承
ContactManager
实现

示例

以下示例代码演示如何枚举 并将其 PeerNearMe 作为 PeerContact 添加到本地 ContactManager

// Displays all contacts and asssociated peer endpoints (PeerEndPoint) in the PeerContactCollection.
private static void DisplayContacts(PeerContactCollection peerContactsCollection)
{
    if (peerContactsCollection == null ||
        peerContactsCollection.Count == 0)
    {
        Console.WriteLine("No contacts to display. To add a contact select option 0 from the menu.");
    }
    else
    {
        foreach (PeerContact pc in peerContactsCollection)
        {
            Console.WriteLine("The contact is: {0}", pc.DisplayName);
            DisplayEndpoints(pc.PeerEndPoints);
        }
    }
    return;
}

//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
// Displays all peer end points (PeerEndPoint) in the PeerEndPointCollection.

private static void DisplayEndpoints(PeerEndPointCollection endpointCollection)
{
    if (endpointCollection == null ||  endpointCollection.Count == 0)
    {
        Console.WriteLine("No peer endpoints in the collection to display.");
    }
    else
    {
        foreach (PeerEndPoint pep in endpointCollection)
        {
            Console.WriteLine("PeerEndPoint is: {0}", pep);
            Console.WriteLine("PeerEndPoint data is:\n  Name: {0}\n EndPoint IP address: {1}\n . Port: {2}\n",
                pep.Name,
                pep.EndPoint.Address,
                pep.EndPoint.Port);
        }
    }
    return;
}

//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
//List PeerNearMe objects that may be added as contacts.

private static void AddContact()
{
    PeerNearMeCollection pnmc = null;
    PeerContactCollection peerContacts = null;
    bool peerNameFound = false;

    PeerApplication application = null;

    try
    {
        Console.WriteLine("Listing the existing contacts...");
        peerContacts = PeerCollaboration.ContactManager.GetContacts();
    }
    catch (PeerToPeerException p2pEx)
    {
        Console.WriteLine("The Peer Collaboration Infrastructure is not responding to the contact enumeration request: {0}", p2pEx.Message);
    }
    catch (Exception ex)
    {
        Console.WriteLine("An unexpected error occurred while attempting to obtain the contact list: {0}", ex.Message);
    }

    DisplayContacts(peerContacts);

    try
    {
        //Adds one of the PeerNearMe objects as a contact.
        pnmc = GetPeersNearMe();
        Console.WriteLine("Please enter the nickname of the peer you wish to add as a contact:");
        string peerNameToAdd = Console.ReadLine();

        application = RegisterCollabApp();

        foreach (PeerNearMe pnm in pnmc)
        {
            PeerInvitationResponse res = null;
            if (pnm.Nickname.Contains(peerNameToAdd))
            {
                peerNameFound = true;
                if (!peerContacts.ToString().Contains(pnm.Nickname))
                {
                    Console.WriteLine("Adding peer {0} to the contact list.", pnm.Nickname);
                    pnm.AddToContactManager();
                }
                else
                {
                    Console.WriteLine("This peer already exists in your contact list.");
                    Console.WriteLine("Sending invitation using the Contact structure instead of the PeerNearMe.");
                    foreach (PeerContact pc in peerContacts)
                    {
                        if (pc.Nickname.Equals(pnm.Nickname))
                        {
                            res = pnm.Invite(application, "Peer Collaboration Sample", application.Data);
                            if (res.PeerInvitationResponseType == PeerInvitationResponseType.Accepted)
                            {
                                Console.WriteLine("Invitation to contact succeeded.");
                            }
                            else
                            {
                                Console.WriteLine("Invitation to contact {0}.", res.PeerInvitationResponseType);
                            }
                        }
                    }
                }
            }
        }

        if (!peerNameFound)
        {
            Console.WriteLine("No such peer exists near you. Cannot add to contacts.");
            return;
        }

        peerContacts = PeerCollaboration.ContactManager.GetContacts();

        Console.WriteLine("Listing the contacts again...");
        DisplayContacts(peerContacts);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error adding a contact: {0}", ex.Message);
    }
    finally
    {
        application.Dispose();
    }
    return;
}

注解

此类没有公共构造函数,因为 类返回 PeerCollaboration 对它的引用。

PeerContact 管理关联的通讯簿包括与主机对等方和远程对等方关联的通讯簿。 任一计算机均可与其他对等方协作;如果对等方是远程对等方本地的,但不是主机对等方,则可以将其添加到 ContactManager 主机对等方的 。 类上的 ContactManager 某些操作(如 AddContactDeleteContact)与正在远程对等方的 Windows 通讯簿上执行的关联操作相关联。

主机对等方有权访问此永久性存储以获取 PeerContact 信息,这些信息可以与对等方打算参与的应用程序相关联。 PeerApplication可以将自身标识为计算机上的永久性存储的用户ContactManager

属性

LocalContact

获取表示本地对等方的 PeerContact

SynchronizingObject

设置此属性值后,将在创建特定 SynchronizingObject 的线程上为因异步操作而未激发的所有事件回调关联的事件处理程序。

方法

AddContact(PeerContact)

将指定的 PeerContact 添加到本地对等的 ContactManager

CreateContact(PeerNearMe)

为指定的 PeerContact 对象创建一个 PeerNearMe 实例。

CreateContactAsync(PeerNearMe, Object)

为指定 PeerNearMe 对象创建一个连接实例。

DeleteContact(PeerContact)

从本地对等的 ContactManager 删除指定的 PeerContact

DeleteContact(PeerName)

从本地对等的 ContactManager 中删除与指定 PeerName 关联的 PeerContact

Dispose()

释放由 ContactManager 对象使用的所有资源。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetContact(PeerName)

返回具有指定 PeerContactPeerName 对象。

GetContacts()

返回一个 PeerContactCollection,其中包含远程对等方的 ContactManager 中的所有联系人。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)
UpdateContact(PeerContact)

更新与 PeerContact 关联的数据。

事件

ApplicationChanged

每当与 PeerApplication 中的 PeerContact 关联的 ContactManager 发生更改时引发。

CreateContactCompleted

每当 CreateContact(PeerNearMe) 方法完成时引发。

NameChanged

每当与 PeerName 中的 PeerContact 关联的 ContactManager 发生更改时引发。

ObjectChanged

每当联系人注册的 PeerObject 对象中有对象发生更改时引发。

PresenceChanged

每当 PeerContactContactManager 中的状态发生更改时引发。

SubscriptionListChanged

在订阅的联系人列表发生更改时引发。

适用于

另请参阅