SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

VistaのPeople Near Meを使ったP2Pコラボレーションソフトの実装

第1回 People Near Me(PNM)の概要とかんたんなアプリケーションの作成

ダウンロード サンプルコード (94.4 KB)

People Near Me参加ユーザーのリストアップ

 次に他ピアとのコラボレーションのための第一歩として、People Near Meネットワークに参加しているユーザーの一覧を取得してみることにしましょう。準備作業として、同一サブネットワークに属している他のVistaマシンのユーザーでPNMに参加しておいてください(「ファイル名を指定して実行」から"p2phost"と入力して実行することでPNMホストプロセスを起動することができます)。

 複数マシンの用意が難しい方はVirtual PCなどでゲストOSとしてVistaを用意することも可能です。もし共に難しい場合は、今動作させているVistaマシンに新規ユーザーを作成しそのユーザーセッションにおいてPNMに参加してください。PNMはユーザーセッションごとに別なピアとして認識されます。

 準備作業が完了しましたら、「Sample02」のプロジェクトをビルドし実行してみてください。取得ボタンを押すと他ピアのニックネームの一覧表示されることと思います。

Sample02実行ダイアログ
Sample02実行ダイアログ

 では、コードを見ていくことにしましょう。

Sample02(Window1.xaml.cs)
using System;
//中略
using System.Net.PeerToPeer.Collaboration; // People Near Me

namespace Sample02
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>

    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            PeerCollaboration.SignIn(PeerScope.NearMe);
        }

        void PeerListGetButton_Clicked(Object sender, 
                                       RoutedEventArgs e)
        {
            ListupPeopleNearMe();
        }

        void ListupPeopleNearMe()
        {
            PeerNearMeCollection pnms
             = PeerCollaboration.GetPeersNearMe();

            foreach (PeerNearMe pnm in pnms)
            {
                PeerList.Items.Add(pnm.Nickname);
            }
        }
    }
}

 近隣ユーザー一覧の取得はPeerCollaborationクラスのGetPeersNearMeメソッドをコールすることで実現します。これによりPeerNearMeCollectionのインスタンスを取得でき、近隣ユーザーの情報を扱うことができるようになります。

他ユーザーのPeople Near Meネットワークの参加、脱退のイベント取得

 「Sampel2」のアプリケーションだと、ある時点でのPNMネットワークの状況は分かるもののリアルタイムにユーザーの参加・脱退を把握することができません。そこで続いてはユーザー参加、脱退のイベント処理について解説していきたいと思います。

 まずは「Sample3」を実行し、取得ボタンを押した後、近隣ピアのPNMへの参加・脱退状態を変化させてみてください。ListBoxに表示されているピア一覧情報がリアルタイムに変化することが分かります。

Sample03実行ダイアログ
Sample03実行ダイアログ

 それではコードを見ていきます。

Sample03(Window1.xaml.cs)
using System;
using System.Collections;
//中略
using System.Net.PeerToPeer.Collaboration; // People Near Me

namespace Sample03
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>

    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            PeerCollaboration.SignIn(PeerScope.NearMe);
        }

        void PeerListGetButton_Clicked(Object sender, 
                                       RoutedEventArgs e)
        {
            ListupPeopleNearMe();
            PeerNearMe.PeerNearMeChanged
             += new EventHandler<PeerNearMeChangedEventArgs>(
                                        PeerNearMe_PeerNearMeChanged);
        }

        void ListupPeopleNearMe()
        {
            PeerNearMeCollection pnms
             = PeerCollaboration.GetPeersNearMe();

            foreach (PeerNearMe pnm in pnms)
            {
                PeerList.Items.Add(pnm.Nickname);
            }
        }

        void PeerNearMe_PeerNearMeChanged(Object sender, 
                                         PeerNearMeChangedEventArgs e)
        {
            PeerNearMe pnm = e.PeerNearMe as PeerNearMe;

            switch (e.PeerChangeType)
            {
                case PeerChangeType.Added:
                    PeerList.Items.Add(pnm.Nickname);
                    break;
                case PeerChangeType.Deleted:
                    PeerList.Items.Add(pnm.Nickname);
                    break;
                case PeerChangeType.Updated:
                    break;
                default:
                    break;
            }
        }
    }
}

 近隣ピアの状態を通知するイベントはPeerNearMeクラス内PeerNearMeChangedイベントとして実装されています。そのため、PNMの状態をリアルタイムに把握するには、このイベントコールバックを実装すればよいということになります。

 イベント取得後はコールバック関数内(PeerNearMe_PeerNearMeChanged)でピアの変更イベント種別PeerChangeTypeの状態(AddedDeletedUpdated)に応じた処理をしています。

次のページ
People Near Meネットワークへのオブジェクト発行

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

techcollab(テックコラボ)

N/A

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1300 2007/06/06 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー