今回も前回と前々回に引き続いてMessenger LibraryによるWebアプリケーションの作成です。そして,ひとまず完結編になります。前回までに作成したコードを元にLive Messengerとして機能するための事項を説明します。
localhostでの開発をサポート
はじめにMessenger Libraryのアップデート情報を紹介します。本連載 第11回のLive Messenger Library 前編の記事中で,ダイナミックDNSなどを用いた開発時の環境を紹介しました。これは開発時もlive.comサービスと通信するためURLドメインが必要なためでしたが,Messenger Libraryがアップデートされ,ドメインがlocalhostでも開発が可能になっています。簡単にMessenger Libraryの開発ができるようになりましたので,ぜひトライしてみてください。とはいえ,ダイナミックDNSを使った環境はほかのWindows Liveサービスを利用した開発で必要な場合がありますので構築しておいて損はありません。
プレゼンスの変更
さて,まずは前回までに作成したアプリケーションにて,ユーザのプレゼンスを変更できるようにしてみましょう。プレゼンスの表示はUserオブジェクトのPresenceプロパティ(IMAddressPresenceクラス型)を使用していました。プレゼンスの変更はこのPresenceプロパティに各種 値を設定するだけで可能です。ただし,表示アイコンのURLは読み取り専用のプロパティとなっているためMessenger Libraryから変更はできません。
Messenger Libraryの場合,プロパティとして扱われている値への設定は「set_」を接頭辞とした関数を使用していました。表示名・表示メッセージ・状態を変更は次のように記述します。
Gihyo.LiveSample.changePresence = function() {
var presence = Gihyo.LiveSample.User.get_presence();
if (presence.get_status() === Microsoft.Live.Messenger.PresenceStatus.offline) {
return;
}
presence.set_displayName($('displayNameText').value);
presence.set_personalMessage($('personalMessageText').value);
var selectedIndex = $('selectStatus').selectedIndex;
var statuses = [Microsoft.Live.Messenger.PresenceStatus.appearOffline,
Microsoft.Live.Messenger.PresenceStatus.away,
Microsoft.Live.Messenger.PresenceStatus.beRightBack,
Microsoft.Live.Messenger.PresenceStatus.busy,
Microsoft.Live.Messenger.PresenceStatus.idle,
Microsoft.Live.Messenger.PresenceStatus.inACall,
Microsoft.Live.Messenger.PresenceStatus.online,
Microsoft.Live.Messenger.PresenceStatus.outToLunch];
presence.set_status(statuses[selectedIndex]);
}
サインインしていない状態では変更しないように条件文を入れています。状態の変更は,selectタグとoptionタグを使ってユーザに選択してもらうことを想定しています。Microsoft.Live.Messenger.PresenceStatus列挙体の各値を格納した配列を作成し,それと対応するようにHTMLを記述します。HTMLは次のように記述しました。Default.htm内の適当な場所に追加してください。
<div>
<table>
<tr><td>Display Name: </td><td><input id="displayNameText" type="text" /></td></tr>
<tr><td>Message: </td><td><input id="personalMessageText" type="text" /></td></tr>
<tr><td>Status: </td>
<td>
<select id="selectStatus">
<option>オフライン</option>
<option>退席中</option>
<option>一時退席中</option>
<option>取り込み中</option>
<option>退席中 (自動)</option>
<option>通話中</option>
<option>オンライン</option>
<option>昼休み</option>
</select>
</td></tr>
</table>
<div><input type="button" value="Change Presence" onclick="Gihyo.LiveSample.changePresence();" /></div>
</div>
実行した結果は図1のようになります。

