[[P2P地震情報:http://www11.plala.or.jp/taknet/p2pquake/]]のプラグインを介して送られてくる情報をキャラクタから扱えるようにするChararina用プラグインです。

* しくみ [#rafdd092]
- 以下,P2P地震情報側プラグインをサーバ,Chararina側プラグインをクライアントと呼びます。
** P2P地震情報側のプラグイン [#lb0f2661]
- [[P2P地震情報 - プラグイン仕様書:http://p2pquake.ddo.jp/p2pquake/plugin_011.html]]に従いP2P地震情報本体と通信を行います。
- 同時にTCPの任意のポート(設定可)でクライアントからの接続を待ちます。接続確立後,P2P地震情報本体側からデータを受信した場合,接続しているクライアント全てに送信します(「リレー」と呼んでいます)。
- また,UDPの任意のポート(設定可)に着信があり,所定のメッセージが含まれていた場合,送信元にサーバのIPアドレスとポート番号を通知します。
** Chararina側のプラグイン [#wcd7afc0]
- キャラクタが少なくとも1体起動した時点で動作を開始します。
- 接続先を自動検出する設定の場合,UDPブロードキャストにより接続先を問い合わせます。
-- この動作は,DHCPでIPアドレスを割り当てているネットワークにて,P2P地震情報が稼働しているPCと別のPCでクライアントを使用する状況を想定しています。
- サーバに接続後,データを受信するとキャラクタ側の関数を割り込みで呼び出します。

* 動作環境 [#j987ead4]
- Chararina 3.00以降
- [[Visual Studio 2013 の Visual C++ 再頒布可能パッケージ:http://www.microsoft.com/ja-jp/download/details.aspx?id=40784]]
- [[Microsoft .NET Framework 4:http://www.microsoft.com/ja-jp/download/details.aspx?id=17851]]

* ダウンロード [#i5ed6aeb]
** P2P地震情報側のプラグイン [#d78b022d]
&button(ダウンロード: ZIPアーカイブ,http://update.mxpj.net/files/P2PQPlugin_Relay_0.90.zip,primary);
- Version 0.90 (2014-05-10)
- P2PQPlugin_Relay.exeをP2P地震情報のインストール先(通常C:\Program Files\P2PQuake)のpluginフォルダの中に入れてください。
- 正常に起動すると,[プラグイン]メニューに[受信データリレー]項目が追加されます。このメニューを選択すると設定ができます。

** Chararina側のプラグイン [#e9fc3827]
&button(ダウンロード: インストーラ,http://update.mxpj.net/files/Plugin_P2PQRelayClient_0.92.exe,primary);
&button(ダウンロード: ZIPアーカイブ,http://update.mxpj.net/files/Plugin_P2PQRelayClient_0.92.zip,primary);
- Version 0.92 (2014/05/17)
- P2PQRelayClientフォルダをChararinaのインストール先(通常C:\Program Files\Praesens\Chararina)のpluginフォルダの中に入れてください。
- 正常に起動すると,[プラグインの設定]メニューに[P2P地震情報連携プラグインの設定]項目が追加されます。このメニューを選択すると設定ができます。

- 64bit版Windowsの場合,上記Program FilesはProgram Files (x86)に読み替えてください。

* 更新履歴 [#q587b1f0]
** 受信データリレープラグイン [#m282f06b]
- 2014-05-10 0.90 初版

** P2P地震情報連携プラグイン [#ca5d1e6f]
- 2014-05-17 0.92 再ビルド,プラグインアセンブリのファイル名変更(PWSPlugin_P2PQRelayClient.dll → P2PQRelayClient_Net.dll)
- 2014-05-13 0.91 キャラクタ切替後,データを受信すると異常終了する問題を修正
- 2014-05-10 0.90 初版

* キャラクタからの利用方法 [#q9a7b0e5]
- 常駐型のプラグインですので,キャラクタからLoadPluginする必要はありません。
- P2P地震情報側からデータを受信した場合,export void NH_P2PQUAKE_Notify(string)で定義されたユーザ関数を割り込みで呼び出します。
- 例:
#highlight(ayaori:nogutter:nocontrols){{
export void NH_P2PQUAKE_Notify(string msg)
{
    Talk("\e" + msg);
    return;
}
}}
- ここで,msgには[[P2P地震情報 - プラグイン仕様書:http://p2pquake.ddo.jp/p2pquake/plugin_011.html]]で定義されているデータについて,データ末尾の改行(CRLF)を削除してセットされます。
-- すなわち,「4桁のアルファベット + 半角スペース + データ」の形式となります。
- 受信データの例:
-- QUAK 08日20時50分,2,0,4,茨城県沖,20km,4.4,0,N36.8,E141.4,:-茨城県,+2,*日立市,*高萩市,*東海村,+1,*水戸市,*常陸太田市,*北茨城市,*ひたちなか市,*常陸大宮市,*土浦市,-福島県,+1,*白河市,*いわき市
-- QUAK 08日07時42分,1,0,4,宗谷地方北部,10km,2.2,0,N45.2,E141.8,:-北海道,+1,*稚内市
-- QUAK 07日01時13分,1,0,4,栃木県北部,ごく浅い,2.3,0,N36.9,E139.4,:-福島県,+1,*檜枝岐村
-- QUAK 07日00時35分,1,0,4,千葉県東方沖,30km,3.4,0,N35.8,E141.1,:-千葉県,+1,*銚子市
-- QUAK 06日16時17分,1,0,4,岐阜県美濃中西部,10km,2.5,0,N35.7,E136.6,:-岐阜県,+1,*揖斐川町
-- QUAK 06日00時30分,1,0,4,神奈川県東部,30km,2.7,0,N35.4,E139.5,:-東京都,+1,*日野市,*国分寺市,-神奈川県,+1,*横浜旭区,*横浜緑区,*横浜瀬谷区,*横浜泉区,*大和市,*相模原中央区
-- QUAK 06日08時00分,2,0,4,青森県東方沖,70km,4.4,0,N41.5,E142.0,:-青森県,+2,*階上町,*東通村,+1,*八戸市,*三沢市,*野辺地町,*七戸町,*横浜町,*東北町,*六ヶ所村,*五戸町,*青森南部町,*おいらせ町,*むつ市,-北海道,+1,*千歳市,*函館市,*厚真町,*安平町,*新ひだか町,*浦河町,*様似町,*えりも町,-岩手県,+1,*久慈市,*岩手洋野町,*盛岡市,*八幡平市,*軽米町
- ユーザ関数は割り込みで呼び出されます。緊急であればそのまま通知処理を行い,そうでなければ一旦プロパティに保存するなりして抜け,後で通知するなどしたらよいと思います。

* ライセンス [#k15ffcff]
Copyright (c) 2014 mxproject

以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。

上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。

ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。 作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。

* ソースコード [#qb6dc816]
&button(ダウンロード: Plugin_P2PQRelayClient_src_0.91a_20140513.zip,http://update.mxpj.net/files/Plugin_P2PQRelayClient_src_0.91a_20140513.zip,primary);
- Visual Studio Express 2013 for Desktopでビルドしています

#highlight(end)