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ネットワークへのオブジェクト発行

 続いて近隣ユーザーに対して任意のデータ(オブジェクト)を公開してみましょう。

 まずはオブジェクトを公開するプログラムを作ります(Sample04)。オブジェクト公開のためのコードは次のとおりです。

Sample04実行ダイアログ
Sample04実行ダイアログ
Sample04(Window1.xaml.cs)
using System;
//中略
using System.Net.PeerToPeer.Collaboration; // People Near Me

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

    public partial class Window1 : Window
    {
        const string __GUID_OBJECT
          = "11111111-2222-3333-4444-555555555555";

        public Window1()
        {
            InitializeComponent();
            PeerCollaboration.SignIn(PeerScope.NearMe);
        }

        void ObjectPublishButton_Clicked(Object sender, 
                                         RoutedEventArgs e)
        {
            PeerObject obj
             = new PeerObject(new Guid(__GUID_OBJECT), 
                       Encoding.Unicode.GetBytes(ObjectTextBox.Text),
                       PeerScope.NearMe);
            PeerCollaboration.SetObject(obj);
        }
    }
}

 オブジェクトの公開にあたっては「GUID」「公開範囲」「公開するデータ」を設定する必要があります。これらの情報をセットしPeerObjectインスタンスを生成し、PeerCollaborationクラスのSetObjectメソッドをコールすることでオブジェクトを公開することができます。「Sample04」ではTextBoxに入力されて文字列情報をオブジェクトとして公開します。

 そして公開されたオブジェクトを取得するためのプログラムは次のとおりです(Sample05)。

Sample05実行ダイアログ
Sample05実行ダイアログ
Sample05(Window1.xaml.cs)
using System;
using System.Collections;
//中略
using System.Net.PeerToPeer.Collaboration; // People Near Me

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

    public partial class Window1 : Window
    {
        const string __GUID_OBJECT
         = "11111111-2222-3333-4444-555555555555";

        public Window1()
        {
            InitializeComponent();

            PeerCollaboration.SignIn(PeerScope.NearMe);
        }

        void ObjectListGetButton_Clicked(Object sender, 
                                         RoutedEventArgs e)
        {
            ListUpObject();
        }

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

            foreach (PeerNearMe pnm in pnms)
            {
                pnm.RefreshData();
                string szPublishData = pnm.Nickname;
                foreach (PeerObject obj in pnm.GetObjects(
                                             new Guid(__GUID_OBJECT)))
                {
                    string szObj
                     = Encoding.Unicode.GetString(obj.Data);
                    szPublishData += " : " + szObj;
                }
                ObjectList.Items.Add(szPublishData);
            }
        }

    }
}

 近隣ピアの持つオブジェクトを、GetObjectsメソッドをコールすることで取得することができます。なお、オブジェクトを取得するためにはRefreshDataを呼ぶ必要があります。リフレッシュをしないと取得ができませんのでご注意ください。

 さて、それではこのテストをしてみることにしましょう。まずいくつかのピアの上で「Sample04」のプログラムを実行してください。そして、「Sample04」を実行させたまま、「Sample05」のプログラムを実行してみましょう。「Sample05」プログラムのListBoxにピアのニックネームと共に公開されているオブジェクトの情報が表示されていることが分かります。

Sample05bオブジェクト一覧の取得
Sample05bオブジェクト一覧の取得

 以上がオブジェクトの公開、取得の方法です。今回はオブジェクトとして文字列を使いましたが、文字列以外のオブジェクトを利用することも可能です。

「にこにこメッセ」の実装

 さて今回のおさらいとして以上の機能のまとめとしてPNMへの参加、PNMオブジェクトの公開の機能を利用した「にこにこメッセ」を作ってみましょう。プロジェクト管理などに「にこにこカレンダー」を使っている方も多いとは思いますが、メッセージを送るときに自分のご機嫌状態も一緒に送ってあげることのできるメッセンジャーライクなアプリケーションを作ります。

にこにこメッセ
にこにこメッセ

 NikoMessengerプロジェクトをビルドし、デバッグしながらいろいろと操作してみてください。送信するメッセージはPNMオブジェクトとして扱い、通信するユーザーはPNMの参加・脱退の機構を利用し管理していることが分かると思います。

 内部実装の都合上、本アプリケーションはPNMからサインアウトされた状態で実行するようにしてください。詳細な説明はスペースの都合上省略させて頂きますが、本コードをいろいろカスタマイズしてPNMプログラムに対する参考にしてみてください。PNMを使ったアプリケーションのアイデアが浮かんでくるものと思います。

 なお、本サンプル中には多くの不備もあるとは思います。Beta1のクラスであることを踏まえ、ご了承ください。

まとめ

 今回はPeople Near Meの概要と近隣ユーザーの発見、近隣ユーザーの公開するオブジェクトの管理機能についての紹介と実装方法について述べてきました。このPeople Near Meはさまざまなコラボレーションソフトを実現するための有効な機能であると思います。皆さんもPeople Near Meを使って今までになかった素晴らしいコラボレーションソフトを開発していただけたらと思います。

 次回は「近隣ユーザーの持つアプリケーションの発見」、「特定ユーザーとの永続的コネクション管理」の機能についての解説を行う予定です。

 なお、本記事の内容は次期.NET Framework 3.5環境(Codename "Orcas" Beta1)の利用を前提に書かれていますので、正式リリース時点でサンプルコードが正常に動作することは保証されません。それをご理解の上、本記事を参照、利用するようにしてください。

参考資料

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

techcollab(テックコラボ)

N/A

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー