Пространство имен System.Net.PeerToPeer.Collaboration
95C# и .NET --- Сетевое программирование --- Пространство имен System.Net.PeerToPeer.Collaboration
Классы в пространстве имен System.Net.PeerToPeer.Collaboration предоставляют каркас, который можно использовать для создания приложений, предусматривающих работу со службой People Neat Me и API-интерфейсом совместной работы посредством P2P (P2P Collaboration API). Как упоминалось ранее, это было возможно только в ОС Windows Vista или Windows 7.
Классы, определенные в этом пространстве имен, можно использовать для взаимодействия с соседними равноправными участниками и приложениями, включая выполнение следующих функций:
осуществление входа (sign in) и выхода (sign out);
обнаружение других равноправных участников;
управление контактами и выявление присутствия других равноправных участников в сети.
Классы из этого пространства имен можно также применять для приглашения других пользователей присоединиться к работе в каком-то приложении или для обеспечения возможности обмена данными между пользователями и приложениями. Однако для того чтобы делать это, необходимо создавать собственные приложения, поддерживающие 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.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 контактов.