使ってみよう! Windows Live SDK/API

第12回 Live Messenger Library ―― オリジナルLive Messengerの作成(中編)

この記事を読むのに必要な時間:およそ 9 分

プレゼンスの表示

前回はユーザのアカウントアドレスの表示で終わっていましたので,まずはユーザのプレゼンスを取得して表示してみましょう。プレゼンスには表示名や表示メッセージ,オンラインや退席中などの状態が含まれます。

ユーザのプレゼンスの取得は次の手順で行います。

  1. Userオブジェクト,Presenceプロパティ(IMAddressPresenceクラス型)のPropertyChanged イベントの関連付け
  2. IMAddressPresenceクラスの各プロパティ値の取得

以下のコードは,前回の最後に示したユーザのサインイン完了後に呼ばれるメソッドです。この時点ではUserオブジェクトのPresenceプロパティには欲しい情報は格納されていません。そのため,代わりにユーザのアカウントアドレスを取得していました。

Gihyo.LiveSample.signInCompleted = function(sender, e) {
    if (e.get_resultCode() === Microsoft.Live.Messenger.SignInResultCode.success) {
        var address = Gihyo.LiveSample.User.get_address().get_address();
        $('userInfo').appendChild(document.createTextNode(address));
    }   
}

ユーザアカウントを取得・表示している部分は削除して,次のように書き換えます。PreseceプロパティのPropertyChangedイベントをGihyo.LiveSample.userPresencePropertyChangedメソッドに関連付けます。

// var address = Gihyo.LiveSample.User.get_address().get_address();
// $('userInfo').appendChild(document.createTextNode(address));

Gihyo.LiveSample.User.get_presence().add_propertyChanged(Delegate.create(null, Gihyo.LiveSample.userPresencePropertyChanged));

IMAddressPresenceクラスは次のプロパティを使用します。

  • DisplayName: 表示名
  • PersonalMessage: 表示メッセージ
  • DisplayPictureUrl: 表示アイコンのURLアドレス
  • Status: 状態

DisplayNameとPersonalMessageは文字列,DisplayPictureUrl はMicrosoft.Live.Core.Uriクラス型です。また,StatusはMicrosoft.Live.Messenger.PresenceStatusという列挙体として表されています。

Gihyo.LiveSample.userPresencePropertyChangedメソッドは次のようになります。Statusはコード中のようにMessenger Libraryに用意されているEnum.toStringメソッドを使用すると,数値から文字列へ変換が可能です。ここでは変換した文字列をそのまま表示しています。DisplayPictureUrlは,表示アイコンが設定されていない場合nullとなっているため条件式を入れています。

Gihyo.LiveSample.userPresencePropertyChanged = function(sender, e) {
    var presence = Gihyo.LiveSample.User.get_presence();

    $('displayName').innerHTML = presence.get_displayName();
    $('personalMessage').innerHTML = presence.get_personalMessage();

    var status = presence.get_status();
    $('status').innerHTML = Enum.toString(Microsoft.Live.Messenger.PresenceStatus, status);
    
    if (presence.get_displayPictureUrl() != null) {
        $('displayPicture').innerHTML = '<img src="' + presence.get_displayPictureUrl().toString() + '" />';
    }
}

以上でサインインしたときにユーザのプレゼンス表示ができました。図2に表示した例を示します。プレゼンスが変化すると作成したメソッドが呼び出されるため,Sign-in Controlからサインインした後,別の場所からサインインすると状態がofflineになることがわかります。

図2 ユーザプレゼンスの表示

図2 ユーザプレゼンスの表示

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp