方法: 会話の管理
ユーザーがメンバー リストのメンバーとオンラインで会話できる機能を実装することができます。これを行うには、アプリケーションで以下のことを行う必要があります。
- Microsoft.Live.Messenger.Conversation のインスタンスを作成します。
- Microsoft.Live.Messenger.MessageReceivedEventHandler にサブスクライブします。
- メッセージを送信する関数を作成します。
- 受信メッセージを処理する関数を作成します。
手順
Microsoft.Live.Messenger.Conversation. のインスタンスを作成するには
Microsoft.Live.Messenger.Conversation の Create メソッドを呼び出して、会話を始める相手のユーザーの IMAddress を渡します。
var imaddress = contact.get_currentAddress(); HelloWorld.App._conv = HelloWorld.App._user.get_conversations().create(imaddress);
メッセージを送信するには
Microsoft.Live.Messenger.Message のインスタンスを作成します。
var message = new Microsoft.Live.Messenger.TextMessage("A message.", null);
会話オブジェクトの SendMessage を呼び出します。
HelloWorld.App._conv.sendMessage(message, null);
Microsoft.Live.Messenger.MessageReceivedEventHandler にサブスクライブするには
会話オブジェクトの
add_messageReceived
アクセサ関数を呼び出します。HelloWorld.App._conv.add_messageReceived(Delegate.create(null, HelloWorld.App.recvMsg));
受信メッセージを処理するには
送信者オブジェクトと
Microsoft.Live.Messenger.MessageReceivedEventArgs
を入力パラメータとして取る、新しい関数を作成します。HelloWorld.App.recvMsg = function (sender, e) { }
メッセージ オブジェクトを取得し、それを使用してメッセージ テキスト、送信者情報、およびタイムスタンプを取得します。
var message = e.get_message(); var sender = message.get_sender().get_presence().get_displayName() var msgText = message.get_text(); var timestamp = message.get_timestamp();
例
説明
以下のコード例は、HelloWorld アプリケーション サンプルのうち、会話の作成、メッセージの送信、受信メッセージの処理、および会話ウィンドウの更新を実際に行う関数の部分を示しています。
コード
// 選択されたユーザーとの新しい会話を作成します。
HelloWorld.App._conv = HelloWorld.App._user.get_conversations().create(HelloWorld.App._addressList[index]);
// Microsoft.Live.Messenger.MessageReceivedEventHandler にサブスクライブします。
HelloWorld.App._conv.add_messageReceived(Delegate.create(null, HelloWorld.App.recvMsg));
// ページを更新して、会話中の相手のユーザーの名前を表示します。
$('contactLabel').innerText = '現在の会話の相手:' + HelloWorld.App._addressList[index].get_address();
}
// 送信ボタンがクリックされたらメッセージを送信します。
HelloWorld.App.sendMsg = function () {
// メッセージ テキストは、テキスト入力 'txtMessage' から取得されます。
var txtMessage = $('txtMessage');
var messageText = txtMessage.value;
// 新しい Microsoft.Live.Messenger.Message を作成します。
var message = new Microsoft.Live.Messenger.TextMessage(messageText, null);
// ユーザーがサインインしており、メッセージが空白でない場合、
// メッセージが送信されます。
if ((HelloWorld.App._user) && (txtMessage.value !== '')) {
HelloWorld.App._conv.sendMessage(message, null);
}
// displayMsg 関数を呼び出してウィンドウを更新します。
HelloWorld.App.displayMsg(message);
// テキスト ボックスをクリアし、最後までスクロールします。
txtMessage.value = '';
txtMessage.scrollIntoView();
}
// 受信メッセージを処理します。
HelloWorld.App.recvMsg = function (sender, e) {
// 送信された Microsoft.Live.Messenger.TextMessage を取得します。
var message = e.get_message();
// displayMsg 関数を呼び出してウィンドウを更新します。
HelloWorld.App.displayMsg(message);
// メッセージ情報を表示します。
$('msgLastRecv').innerText = 'Last message at:' + HelloWorld.App._conv.get_history().get_lastReceived().toString();
}
// 会話ウィンドウを更新して、送受信したメッセージのテキストを表示します。
HelloWorld.App.displayMsg = function (message) {
var elMsg = document.createElement('p');
elMsg.innerHTML = message.get_sender().get_presence().get_displayName() + ' の発言:' + message.get_text();
$('txtConv').appendChild(elMsg);
}