Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

WRT Widgetでチャットアプリケーションを作成する方法

From Wiki
Jump to: navigation, search
Article Metadata
Article
Translated:
By fnjwikimng
Last edited: hamishwillee (01 Aug 2012)


以下に示すガイドでは、JavaScriptPHP で実装される、簡単なチャットクライアントを作成する方法について示します。

Contents

動作原理

チャットのためのプロトコルとして、HTTP はあまり理想的なプロトコルではありません。実際のチャットサーバーを持ちたい場合は、IRC または Jabber を使用する必要があります。

ステートレスプロコトルで制限を克服できない一方で、少なくとも AJAX 技術ではサーバーを落とさずにWebチャットを実装することが可能です。しかし、実際のモバイルチャットについては、可能な限りリソースの効率を考えて実装される必要があります。

現在のチャットは、サーバー上での操作をより簡潔にするために拡張する必要があり、トラフィックを軽減するために、更新データのみクライアントへ送信する必要があります。

Chat.jpg

JavaScript

下記コードは、外部サーバへの呼出しを生成する方法を示しています。

    function sync(aMsg) {		
url = "http://localhost/forumnokia/forumnokia.php?msg=" + aMsg;
msg_sync = aMsg;
ext_doc = new XMLHttpRequest();
ext_doc.onreadystatechange = onMsgLoad;
 
try {
ext_doc.open("GET", url, true);
ext_doc.send(null);
} catch(e) {
alert(e);
}
}
 
function onMsgLoad() {
if(text_doc.readyState == 4|| text_doc.readyState == "complete") {
divMessaging = document.getElementById("divChatMessaging");
divMessaging.innerHTML = ext_doc.responseText;
}
}

PHP

以下のPHPファイルは、ある固有リソース中でのサーバサイドロジックを保有するため、本サンプルで使われます。

<?
function add_message($msg, $log_dir, $full_path) {
if(file_exists(($log_dir . '/'))) {
$f = fopen($full_path, "a");
$dt = date("Y-m-d h:i:s");
$msg = urlencode(strip_tags(stripslashes($msg)));
$msg = "$dt $msg\n";
$remote = $_SERVER["REMOTE_ADDR"];
 
fwrite($f, $msg);
fclose($f);
 
return $msg;
} else {
@mkdir("log", 0700);
add_message($msg);
}
}
 
function load_message($msg, $full_path) {
$content_array = file($full_path);
$saved = array_slice($content_array, -20);
$result = '';
 
foreach ($saved as $value) {
$result .= $value . '<br />';
}
 
if($msg != '1')
$result = substr($result, stripos($result, $msg) + strlen($msg) + 7, strlen($result));
if(strlen($result) == 0)
$result = 'nodata';
 
return $result;
}
 
$action = $_REQUEST['act'];
$msg = $_REQUEST['msg'];
 
$log_dir = 'log';
$log_file = 'wall.html';
$full_path = $log_dir . '/' . $log_file;
 
if(isset($msg)) {
if($action == 'add') {
echo add_message($msg, $log_dir, $full_path);
} else {
echo load_message($msg, $full_path);
}
}
?>

必要事項

Widgetのロジック部分はJavaScriptで記述され、XMLHttpRequest APIを使用して、PHPで記述されたサーバーからデータをリクエストします。 チャットメッセージは、より簡潔にするため、テキストファイルとして格納します。

今後の作業予定

本チュートリアルを補完するものとして、Flash Liteインタフェースを使用することができます。それにより、音声サポートを追加したり、クライアント側に(オプションの)ソケット接続を確立することができます。

Adobe Mobile and Devices Developer Center に があります。ここでは、Flash Lite 2.1以降で使用できるXML Socket接続を使用し、Java NIO Serverを使用して、モバイルFlash Liteマルチプレイヤーを作成する方法のハンズオンデモを提供しています。

フォローアップ

全ソースコードが必要な場合は、こちら にご連絡ください。また、Widget開発においてより確かに利用することができる、多くのリソース類があります。そのいくつかについては、以下のサイトをご確認ください。

Widgets for the S60 Platform eLearning

Getting Started with Web Runtime Widgets for S60 Screencast

Web Developer's Library

This page was last modified on 1 August 2012, at 05:23.
184 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×