Silverlight4でnetTcpBindingの双方向通信を使う。

Silverlight4からnetTcpBindingが使えるようになり、
通信のパフォーマンスが大幅に向上したみたいなので、いろいろメモ。

VisualStudio2010でのSilverlightにおけるサービス参照の追加がより便利になりました。
外部のSvcutilのようなものを使わなくてもIDEが勝手にプロキシコード生成してくれます。


silverlight4をnettcpを使用する際に必要だったこと。
WCFサービス関連
silverlight4のDuplex通信では、request/reply型のcallbackが使用できないようです。
そのため、callbackのメソッドに
[OperationContract(IsOneWay = true, AsyncPattern = true)]
みたく、IsOneWayを宣言してやる必要があるようです。


■ポート関連
silverlight4で使用できるポートは、4502-4534に限られているようです。
また、ポート943を最初に使用するようです。
これらのポートを解放する必要がありました。

Silverlight TCP Socket Policy」
http://visualstudiogallery.msdn.microsoft.com/ja-JP/c4534af5-e864-42c2-b351-094593864e78
自動で943Portに確認しにきたものに対して返答してくれるプログラム。
これを起動しておけば、943への返答を自動で行ってくれるようです。


IIS関連
nettcpを使用するために、iisのウェブサイトに設定をする必要がある。
「バインドの編集」と「詳細設定」でnettcpを許可する。




詳しくは下記のページを参照するといいと思います。
http://www.silverlightshow.net/items/WCF-NET.TCP-Protocol-in-Silverlight-4.aspx

http://tomasz.janczuk.org/2009/11/wcf-nettcp-protocol-in-silverlight-4.html

dotwowAPIのWCFサービスを公開。.NETプログラムからでも通信プログラムが簡単に開発できます。

dotWowのAPIを.NETFramework経由でも使用できるように公開しました。
C#,VB.netなどからでもdotwowAPIを利用してユーザー同士のコミュニケーションを簡単に実装できるはずです。

[dotWowServiceReference]
http://www99.dotwow.net/chatservice.svc
このURLをVisualStudioのサービス参照の追加をすれば、
WCFサービスとして使用することができます。

使用方法。
1・IChatCallbackを実装したクラスを作成します。

public class ChatCallBack : IChatCallback
{
   //略・実装
}

2・サービスクライアントの作成方法

InstanceContext context = new InstanceContext(new ChatCallBack());
ChatClient client = new ChatClient(context, "NetTcpBinding_IChat");
EndpointAddressBuilder builder = new EndpointAddressBuilder(client.Endpoint.Address);
AddressHeader header = AddressHeader.CreateAddressHeader("id", "http://www.dotwow.net", "***あなたのApiId");
            builder.Headers.Add(header);

AddressHeader headerKey = AddressHeader.CreateAddressHeader("key", "http://www.dotwow.net", "***あなたのApiKey");
            builder.Headers.Add(headerKey);
 client.Endpoint.Address = builder.ToEndpointAddress();

3・クライアント経由で様々なメソッドを実行できます。

client.join(***);
client.Say(***);


とりあえずヘッダーにAPI情報を記入する形にしてしまいました。
そのうち変更するかもしれません。

APIKeyやAPIIDは以下のページから作成してください。
http://www.dotwow.net/api/default.aspx


クラインとを作成すれば、dotwowのユーザアカウントでログインすると、stringで値が返ってきます。
その後は、その値(key)とユーザーIDでdotwowのさまざまなAPIが使用できます。
このKeyはログインするたびに変更されます。
一部メソッドが正確に動作しません。

詳しくは、そのうちヘルプに記載する予定です。

JavaScriptでの双方向通信用ライブラリを公開。

dotwowのAPIを利用して、JavaScriptで通信するライブラリを公開しました。
「dotWowConnectScriptLibrary(.WCSL)」
http://www.dotwow.net/api/default.aspx
少量のコードを書くだけで、ページ閲覧者同士が通信できるようになります。
Comet(Ajaxの通信形態のひとつ)を利用しているので、スムーズな通信が可能です。
あなたのウェブページ上で手軽にユーザーとのリアルタイム通信機能を追加することができます。


上記のURLより、アプリIDとアプリKEYを登録してご利用ください。(ユーザー登録が必要です)


■サンプルコード(AppidとappKeyを入力してください)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">    google.load("jquery", "1.3.2");</script>
    <script src="connectscript.js" type="text/javascript"></script>
    <script type="text/javascript">
        function received(data) {
            for (var i in data) {
                $("#conversation").append(data[i].SenderId + ":" + data[i].Message+"<br />");
            }
         }
         function joined(data) {
             $("#userID").append("Your ID: " + connectScript.userId);
             for (var i in connectScript.users) {
                 $("#SelectTarget").append("<option>" + connectScript.users[i].UserID + "</option>");
             }
         }
         var connectScript = new connectScript();
         function startConnect() {
             connectScript.appId = "*********";
             connectScript.appKey = "*********";
             connectScript.set_receive(received);
             connectScript.set_join(joined);
             connectScript.initialize();
         }
         function send() {
             var target = $("#SelectTarget").val();
             var content = $("#contentTextBox").val();
             connectScript.send(target, content);
         }
         
   </script>
</head>
<body onload="startConnect()">
<div id="userID"></div>
<div><select style="width:100px"
        id="SelectTarget" name="D1">
        <option></option>
    </select> <input id="contentTextBox"  style="width:200px" type="text" /><input type="button" onclick="send()" value="Send" /></div>

<div id="conversation"></div>
</body>
</html>

メッセージの種類やJSONのパラメータの説明など詳細は後程、helpに掲載する予定です。
http://help.dotwow.net/
要望やバグがありましたら、ご連絡してください。
また、現在はベータということで、「他のAPIからの接続許可」「コールバックURL」などは動作しません。
.WCSL及び、サンプルにはjQueryを使用しています。

Mixiアプリで話題のOpenSocial機能をドットワウに追加しました。

一般のユーザーが作成したアプリをドットワウに追加できます。
現在はとりあえず、今までに作成してきたコネクトを擬似アプリとして登録できるようにしました。
タブなどもアプリにあわせて機能を追加しました。

新しいアプリを登録するためには、
中央のサーチバーのコンボボックスをアプリにし、
アプリのXMLファイルがあるURLを記入して
表示を押してください。


専用のAPIなどを追加する予定。

http://www.dotwow.net/

ウェブLiveMessengerクライアントを作成しました。

いろいろなコミュニケーションツールを繋げようということで、
今回はLiveMessengerのクライアントを設置しました。
よろしければ使ってみてください。

メッセージを受け取ると、ホームタブでも表示されます。


「dotwow - LiveMessengerクライアント」
http://www.dotwow.net/?mode=live


ほぼLive Messenger Tool Kitをいじくっただけです。
イベントのフックは。
ConversationListにて、OnConversationCreated。
その引数のConversationにて、OnMessageReceivedをフックしています。
・・・OnMessageReceivedでは受け取った時のみ発生するので、
自分が送信した内容を獲得できない。
Sendするイベントを受け取ってホームのログに乗せたいのだけどどうすればいいのだろうかー。


参考URL
http://msdn.microsoft.com/ja-jp/library/cc298451.aspx
http://msdn.microsoft.com/en-us/library/microsoft.live.messenger.ui.tags.conversationtag_members.aspx
http://msdn.microsoft.com/en-us/library/microsoft.live.messenger.contact.addresses.aspx

ウェブIRCクライアントを作成しました。

dotwowにて、IRCに接続するwebサービスを公開しました。

「connect with IRC(beta)」
http://www.dotwow.net/?mode=irc


もともと自分はIRCのクライアントにはLimechatを使用していて、
それと同じようなインターフェースがウェブベースでも使えれば便利かなと考えてみました。
Limechat
http://limechat.net/


もしよかったら使ってみてください。
Aajxを利用しているので、リロードの必要はありません。
また、発言があった場合にはホームにも表示されます。

現在は、とりあえずつないで発言ができる程度です。
キーボードショートカットやコマンド、カスタマイズはまだほとんどできません。


バグや要望があればご連絡ください。

Mixiアプリ「Mixiルーム」を公開しました

dotwow2009-09-23

dotwowのルームをMixiでも使えるオープンソーシャルアプリを作成しました。
http://mixi.jp/view_appli.pl?id=8962
もしよろしければ使ってみてください。

[Mixiルームの機能]
アプリガジェットを設置すると、現在誰があなたのページを閲覧しているかがわかり、またそのユーザーとチャットをすることができます。
また、ログも残るので簡単な掲示板/BBSとしても利用できます。
左下のコンボボックスに、ユーザーIDを入力してメッセージを送信するとプライベートメッセージが送信できます。


■参考にしたページ
「MixiDeveloperCenter」apiについて全般
http://developer.mixi.co.jp/appli
opensocial-jqueryOpensocialで使えるJquery
http://code.google.com/p/opensocial-jquery/#Demo
「googleGroup」複数のビューについて
http://groups.google.co.jp/group/opensocial-japan/browse_thread/thread/85ac7603a532a15e
「のほほんラボ」adjustHeightについて
http://nohohonlab.exblog.jp/8458109/



せっかくオープンソーシャルアプリなので、Myspaceなどへも掲載していきたいと考えます。
それと、dotwow自体でもオープンソーシャルアプリのホストができたらおもしろそうなので、少し勉強します。


OpenSocial アプリケーションのホスト」 仕様
http://code.google.com/intl/ja/apis/opensocial/container.html
「pesta」.net制のコンテイナ
http://code.google.com/p/pesta/