【KukuTimer::Fairy プロトコル仕様】 (KukuTimer::Fairy Server v500/ 旧・TelopRecv Server v500 準拠) ■はじめに KukuTimer::Fairyはプレドラがランダム沸きだった時代にTelopRecvという名前で 開発していたもので、元々は身内用だった関係からスマートな実装ではありません。 更に機能追加に伴ってプロトコルにもよくわからない拡張を行っているので、本当に頭の悪い実装になっています。 運用ありきということで、実際に送られているデータを見ながらコード化してみてください。 ■サーバ仕様 ホストアドレス: fairy.kt.erinn.biz IPアドレス: 不定(DDNS)なのでホストから引いて下さい プロトコル: TCP 文字コード: SJIS ポート: 4492(トリアナ), 4493(ルエリ), 4494(マリー), 4495(タルラーク), 4496(モリアン), 4497(キホール) 収容数: 各ポートあたり200クライアント、計1000クライアント ■接続方法 サーバにTCPを開いて、開ければ接続完了です。 接続に関してはアプリケーション層でなんとかかんとかする必要はないです。 ■プロトコル仕様 サーバから来る/送るデータは、全て下記の形式になります。 (データ種別):(データ内容)<改行> たとえば、テロップデータ(TELOP)の場合は TELOP:[2009/09/29 04:24:37] (mabijp1@チャンネル9) 央輝さんがムユ砂漠中央に現れたサンドワームを倒しました! というデータになります。 ■受信データ(サーバからクライアントに送られるデータ) ------------------------------------------------ ◇[TELOP] テロップ情報 TELOP:[(日付)] ((サーバ)@(チャンネル)) (テロップ本文) サーバがテロップ情報を獲得した場合、このデータ種別で全てのクライアントに再送します。 巨大ボス、フィールドボスに問わず、そのまま送信します。クライアントで分離・分類する必要があります。 例: 「TELOP:[2009/09/29 04:24:37] (mabijp1@チャンネル9) 央輝さんがムユ砂漠中央に現れたサンドワームを倒しました!」 ------------------------------------------------ ◇[TRADE] 取引掲示板情報 TRADE:[(日付)],,(サーバ),,(タイトル),,(投稿者),,(URL),, サーバが取引掲示板投稿情報を獲得した場合、このデータ種別で全てのクライアントに再送します。 取引掲示板のクローラがFairyServerに居る状況でないとこの情報は入ってきません。 例: 「TRADE:[2009/09/29 04:24:37],,mabijp1,,買います : ピンクの万能鍋130k,,くくさまなな,,http://www.mabinogi.jp/6th/community/tradeBoardContent.asp?sv=ma&ix=405642,,」 ------------------------------------------------ ◇[NOTICE] 管理者からのお知らせ NOTICE:(お知らせ本文) メンテナンス等、利用者へのお知らせが必要な場合に送信します。 重要なお知らせなため、できるだけ見えるように表示するようお願いします。 例: 「NOTICE:KukuTimer::Fairyサーバメンテナンスのお知らせ」 ------------------------------------------------ ◇[LIVE] セッション維持 LIVE:(ランダムな数字) 長時間通信が無い場合にルータ等で勝手に通信が断絶される場合があるため、 このデータ送ってセッションを維持します。keep-aliveです。 ------------------------------------------------ ■送信データ(クライアントからサーバに送ることができるデータ) ------------------------------------------------ ◇[LIVE] セッション維持(必須) LIVE:(ランダムな数字) 長時間通信が無い場合にルータ等で勝手に通信が断絶される場合があるため、 このデータ送ってセッションを維持します。 ------------------------------------------------ ◇[GETCOUNTER] 出現中ボス情報 GETCOUNTER:<データなし> サーバへの接続時などに、現在生存しているボスの情報を要求します。 例: 「GETCHARGROUP:」 サーバからの返事は同じデータ種別で返ります。 GETCOUNTER:(チャンネル),,(ボス名),,(残り時間),,(最大生存時間),, 生存中のボスが複数いる場合は、改行で区切って複数返ります。 例: 「GETCHARGROUP:5,,巨大ライオン,,120,,1800,,」 この例では、ボス巨大ライオンが5chに出現中で、このボスは1800秒(30分)生存し、 消滅まであと120秒であることを示します。 残り時間が残っていても巨大生物に関してはフィニッシュテロップが来ると消しこみされます。 雑魚フィールドボスは何匹も出るので消滅時間までは消しこみされません。 これは接続時にのみ要求し、通常はクライアント側でテロップから計算することが望ましいです。 ------------------------------------------------ ◇[GETCHARGROUP] 観測キャラクター状態要求 GETCHARGROUP:<データなし> サーバにテロップ観測キャラクターのログイン状況を要求します。 サーバが稼動していてもテロップ観測キャラクターがログイン状態になければテロップ情報を 獲得できないため、テロップが得られるか否かを判断できます。 例: 「GETCHARGROUP:」 サーバからの返事は同じデータ種別で返ります。 GETCHARGROUP:(担当地域),,(ログイン中キャラクター数),,(担当キャラクター数),, 担当地域に何キャラクター配置しており、今現在何キャラクターからのシグナルがあるかを返します。 観測地域が複数ある場合は、改行で区切って複数返ります。 例: 「GETCHARGROUP:ラノ地域,,9,,10,, GETCHARGROUP:クルクレ地域,,8,,10,, GETCHARGROUP:ピシス地域,,10,,10,,」 この例では、ラノ地域に配置されている10キャラクターのうち9キャラクターがログイン状態、 クルクレ地域は10のうち8、ピシスは10のうち10ということを意味します。 ------------------------------------------------ ◇[GETCHINFO] チャンネル状態要求 GETCHINFO:<データなし> マビノギサーバのチャンネル状態リストを要求します。 例: 「GETCHINFO:」 サーバからの返事は同じデータ種別で返ります。 GETCHINFO:(マビノギサーバ名),,(情報の取得日時(UNIXTime)),,(チャンネル数),,[(チャンネル名@混雑状況),,]... Fiaryのサーバ(Fairyルエリならルエリ鯖)の各チャンネルの混雑状況を返します。 例: 「GETCHINFO:mabijp2,,1243134488,,7,,チャンネル1@2100,,チャンネル2@2100,,チャンネル 3@2100,,チャンネル4@1100,,チャンネル5@2100,,チャンネル6@1100,,チャンネル7@2100,,」 この例では、ルエリ(mabijp2)のUNIXTime'1243134488'現在のチャンネル混雑状況は ch1が2100, ch6が2100であることがわかります。チャンネル状況の数値は下記を参考にしてください。 チャンネル状況 = 4桁の数字 (ABCD) A = 混雑状況(0=点検, 1=快適, 2=混雑, 3=満員, 4=サーバー起動中, 5=点検) B = イベント状況(0=イベントなし, 1=イベント, 2=PVP, 3=点検中&イベント) C = 接続状況(0=正常, 1=接続不能, 2=接続不能, 3=接続不能) D = 点検状況(0=正常, 1=点検中, 2=点検中, 3=点検中) ------------------------------------------------ ◇[GETSTATUS] KukuTimer::Fairy サーバ状態要求 GETSTATUS:<データなし> KukuTimer::Fairy サーバの稼働状況を要求します。 例: 「GETSTATUS:」 サーバからの返事は同じデータ種別で返ります。 GETSTATUS:(接続クライアント数),,(接続特権クライアント数),,(サーバ起動日時),, 現在のサーバに接続しているクライアント数、特権クライアント数、サーバ起動日時を返します。 特権クライアントは実際の観測PCの数であり、テロップを収集しFairyサーバに送信する特殊なクライアントです。 サーバ起動日時は「YYYY/MM/DD HH:II:SS」形式です。 例: 「GETSTATUS:30,,2,,2009/03/22 22:15:21,,」 ------------------------------------------------ PROJECT KukuTimer aquapal/kuku.