Пространство имен System.Net.PeerToPeer.Collaboration

95

Классы в пространстве имен System.Net.PeerToPeer.Collaboration предоставляют каркас, который можно использовать для создания приложений, предусматривающих работу со службой People Neat Me и API-интерфейсом совместной работы посредством P2P (P2P Collaboration API). Как упоминалось ранее, это было возможно только в ОС Windows Vista или Windows 7.

Классы, определенные в этом пространстве имен, можно использовать для взаимодействия с соседними равноправными участниками и приложениями, включая выполнение следующих функций:

Классы из этого пространства имен можно также применять для приглашения других пользователей присоединиться к работе в каком-то приложении или для обеспечения возможности обмена данными между пользователями и приложениями. Однако для того чтобы делать это, необходимо создавать собственные приложения, поддерживающие PNM.

Осуществление входа и выхода

Одним из наиболее важных классов в пространстве имен System.Net.PeerToPeer.Collaboration является PeerCollaboration. Это статический класс с множеством статических методов, которые можно применять для самых различных целей, как будет показано в этом и следующем разделах. В частности, для осуществления входа и выхода из службы People Near Me предназначены его методы SignIn() и SignOut(). Оба метода принимают единственный параметр типа PeerScope, который может иметь одно из перечисленных ниже значений:

PeerScope.None

В случае использования этого значения методы SignIn()и SignOut()не будут иметь никакого эффекта.

PeerScope.NearMe

Указание этого значения позволяет осуществлять вход и выход из локальных облаков.

PeerScope.Internet

Применение этого значения позволяет осуществлять вход и выход из глобального облака (это может понадобится для установки связи с контактным лицом, которого в текущий момент нет в локальной подсети).

PeerScope.All

Указание этого значения позволяет осуществлять вход и выход из всех доступных облаков.

При необходимости вызов SignIn() будет приводить к отображению диалогового окна конфигурирования People Near Me. После входа в службу можно для свойства PeerCollaboration.LocalPresenceInfo установить значение типа PeerPresenceInfo. Это сделает доступной стандартную функциональность мгновенного обмена сообщениями (IM), например, возможность установки состояния в "отошел".

Для свойства PeerPresenceInfo.DescriptiveText можно установить строку Unicode длиной до 255 символов, а для свойства PeerPresenceInfo.PresenceStatus — значение перечисления PeerPresenceStatus. Значения этого перечисления описаны ниже:

Перечисление PeerPresenceStatus
Значение Описание
PeerPresenceStatus.Away Равноправного участника нет на месте.
PeerPresenceStatus.BeRightBack Равноправного участника нет на месте, но он скоро вернется.
PeerPresenceStatus.Busy Равноправный участник занят.
PeerPresenceStatus.Idle Равноправный участник неактивен.
PeerPresenceStatus.Offline Равноправного участника нет в сети.
PeerPresenceStatus.Online Равноправный участник находится в сети и доступен для связи.
PeerPresenceStatus.OnThePhone Равноправный участник разговаривает по телефону.
PeerPresenceStatus.OutToLunch Равноправного участника нет на месте, но он вернется после обеда.

Обнаружение соседей

После подключения к локальному облаку можно получить список всех равноправных участников сети, которые находятся по соседству. Это делается с помощью метода PeerCollaboration.GetPeersNearMe(), который возвращает объект PeerNearMeCollection, содержащий в себе объекты PeerNearMe.

Свойство Nickname объекта PeerName позволяет получить имя обнаруженного соседа, свойство IsOnline — определить, находится ли он в текущий момент в сети, а (в случае низкоуровневых операций) свойство PeerEndPoints — определить имеющие к нему отношение конечные точки. С помощью свойства PeerEndPoints также можно выяснить статус объекта PeerNearMe в сети.

Для получения объекта PeerPresenceInfo необходимо передать методу GetPresenceInfo() информацию о конечной точке, как было описано в предыдущем разделе.

Управление контактами и определение присутствия соседей в сети

Контакты представляют собой способ, которым можно запоминать других равноправных участников сети. Обнаруженных посредством службы People Near Me пользователей сети можно добавить в свои контакты и после этого связываться с ними в любой момент, когда они будут появляться в сети. Связываться с контактами можно как через локальные, так и через глобальные облака (при условии наличия IPv6-подключения к Интернету).

Чтобы добавить обнаруженного пользователя в контакты, необходимо вызвать метод PeerNearMe.AddToContactManager(). При вызове этого метода можно закрепить за контактом отображаемое имя, псевдоним (nickname) и адрес электронной почты. Однако обычно управление контактами осуществляется с помощью класса ContactManager.

В любом случае при манипулировании контактами приходится иметь дело с объектами PeerContact. Класс PeerContact, как и PeerNearMe, унаследован от абстрактного базового класса Peer, но имеет больше свойств и методов, чем PeerNearMe.

Так, например, он включает в себя свойства DisplayName и EmailAddress, которые позволяют более подробно описывать обнаруженного PNM пользователя. Другое отличие между этими двумя классами связано с тем, что PeerContact имеет более явные отношения с классом System.Net.PeerToPeer.PeerName. С помощью свойства PeerContact.PeerName можно извлечь объект PeerName, после чего приступить к взаимодействию с любыми конечными точками, которые этот объект PeerName предоставляет, используя описанные ранее приемы.

Информация о локальном соседе также доступна в статическом свойстве ContactManager.LocalContact. Это позволит далее иметь дело со свойством PeerContact и деталями о локальном соседе.

Для добавления объектов PeerNearMe в локальный список контактов применяется либо метод ContactManager.CreateContact(), либо метод CreateContactAsync(), а объектов PeerName — метод GetContact(). Удаление контактов, представляемых объектами PeerNearMe или PeerName, производится с помощью метода DeleteContact().

И, наконец, существуют события, которые можно обрабатывать в ответ на изменения в контактах. Например, событие PresenceChanged можно обрабатывать в ответ на изменения в информации о присутствии любого из известных ContactManager контактов.

Пройди тесты
Лучший чат для C# программистов