ゲーム進まん。まあPeerCastStationとゲーム作りを両方進めるとか器用なことはシングルスレッドな俺には難しいので適度に交互にやるしかなかろう。
PeerCastStation.Logger.dllを削除した。
ロギング用にLoggerてクラスを作って使ってたんだが、これあんまり詳しくない時に最初に作ったので実はSystem.Diagnostics.Traceでほとんど済むことが後からわかった。
ちょっとだけTraceに無い機能があったのでLogger自体削除するのはやめて、LoggerはTraceにほとんどの機能を移譲するようにしておいた。
そんな整理をしていたらPeerCastStation.Logger.dllの意味がよくわからんことに気付いた。これLoggerクラスしか入ってないんだよね。なんでPeerCastStation.Core.dllにLogger入れてないんだ?なんでだか思い出せないし思い当たるところもないので、大した理由はなさそうだ。というわけでPeerCastStation.Core.dllに入れてPeerCastStation.Logger.dllは削除した。
もうちょいソース整理したいけど、いつまでもできてしまうので整理はたまに進めるようにしよう。
受信スキップを検出して自動Bump実装しようかと思ったが、よく考えるとだめっぽく見えるなぁ。
一度受信スキップするとそのスキップはそのまま下流に伝搬するが、受け取った側からしてみれば直上のホストでスキップしたのか、それより上でスキップしたのかわからん。そのまま一定回数のスキップ検出で自動Bumpすると自動Bump自体も伝搬することになり、どこかでスキップが多量に起こるとそれ以下のリレーが大崩壊しそう。本当にこうならちょっといただけない。
ていうか、PeerCastではリレーで送信スキップが起きたら即切断してるように見えるんだが自動Bumpってほんとうに発動するんだろうか。 UDPならまだしもTCPでは送信されてから受信されるまでにパケロスって余程のことだし。
やっぱり送信側のスキップできないとだめかなぁ。何を基準にやるか考えよう……。
pcwmpか何か(違ったかも?)のプレイヤーではチャンネル停止とか再接続をPeerCastに対して行なえるらしいんだがそれに対応して欲しいとか言われてた。
言われた時にはPeerCastのRPC対応を増やすのは嫌だったのでえーとか言ったんだが、プレイヤーからの制御くらいなら大したことにならんので対応してしまおう。
PeerCastではHTTPのGETで/admin?cmd=hogeみたいにして何か実行することができる。これが他アプリから操作されることを想定したものかどうかは知らんが、他アプリから使えるし使われてるのは事実だ。
今まではそのなかでviewxmlというリレー情報を取得するものだけ実装してたけど、今回は他に何を実装すればいいんだろう。 PeerCastのソースを見る感じだとプレイヤーから使うようなものはチャンネルの停止をするstopと再接続をするbumpかな。 keepもあるけどPeerCastStationだと常時KEEP状態で制御できないのでこれは今対応しなくていいや。
入力はidパラメータにチャンネルIDが渡ってくるだけのようなのでそれを処理してやった。返事はPeerCastではリレー情報ページにリダイレクトするようなのを返してるが、今回はブラウザからアクセスされることは想定してないのでいらないな。
試したら動いたので適当すぎるテスト書いておわり。
このHTTP GETでのRPCは上手くないのでPeerCastStationではJSON-RPCの方を使ってほしいところだが、既存のツールは仕方ない。 既存のツールという意味ではPeCaStarterもそうなんだけど、そっち対応するのは大変だし視聴程使う物ではないのでやらない。 そもそもPeerCastStation対応したとかなんとか聞いたような気もした。 ……ソース確認したらJSON-RPCを使ってくれてるようだ。 まあPeerCastStationで外部制御で配信開始しようとするとそれしかないので当然か。
配信開始するときにトラック名を入力しようとしてアルバム名の場所に入力してしまうという間違いをすることが何度かあった。 以前も調べた際には配信開始ダイアログのラベルが間違ってついてるんじゃないかと思ってたんだがそんなことはなく、不明のまま過ごしてきたんだが……。
使ってる時に原因がわかった。メインウィンドウのチャンネル情報欄と配信開始ダイアログでトラック情報項目の並びが違うのだった。そかそか。人間はラベルなんか読んでなくて位置で覚えるんだなぁ。
HTML版のUIも見ると配信開始ダイアログと同じだったので、チャンネル情報欄の方を並べなおしてやった。まあほんとはPeerCastのHTML UIも見て合わせた方がいいかもしれないが、アルバムとかアーティストの欄って誰も使ってないからなぁ。ついでにチャンネル情報欄にトラック情報のジャンルが抜けてたので追加してやった。誰も使ってないだろうけど。
あとGUIで気になってるのは、配信開始ダイアログで毎度同じのを入力するのがめんどいので履歴機能を付けられないかというところ。PeCaStarter使えばいいじゃんという話ではあるが、まあ簡単なのならついててもいいじゃん?
とはいえ付けるのはめんどい。履歴データを保存する先を考えないといけないとかな。あとWindows.Formsめんどいとかな。結局このGUIはmonoで動かなくなってるんだからもうWPFでいいじゃんという気もするんだよなぁ……。