LR2/LR2IR用のプロキシサーバのようなものを作っている
きっかけ
ランキング取得クソ重くてむかつきません?
構成
ブラウザから見るLR2IRを好き放題いじる分には適当にプロキシサーバ立ててプロキシ自動構成か何かするのが簡単だろうけど、俺はLR2body.exeの通信をどうにかしたかったのでそれは無し(ちょっと怪しいかもしれない)。
LR2は通信をhttpのPOSTで行っている。URLはプログラム内で固定されているため変更はできない(やろうと思えばできると思うけどバイナリそのものはあんまり触りたくない)。
そこで、パワープレイではあるけど名前解決の部分を上手く使うことにした。
LR2のhttp通信はWinsockを使用して行われているけど、gethostbyname
関数でwww.dream-pro.infoを名前解決しているっぽい。
gethostbyname
は
の順で問い合わせるらしい(普通そうだろうけど)ので、hostsに
aaa.bbb.ccc.ddd www.dream-pro.info
みたいに書いて、aaa.bbb.ccc.ddd
でリクエストを処理することを考える。
俺の取った方法としては、apacheを127.0.0.1:80
で立てて
RewriteEngine On RewriteCond %{REQUEST_URI} !^/cgi-bin/rewrite\.cgi/(.*)$ RewriteRule ^/(.+)$ /cgi-bin/rewrite\.cgi/$1 [PT]
みたいに設定して、ルート以下のアクセスを/cgi-bin/rewrite.cgiに丸投げする。ちなみに[PT]
を知らなくてかなり嵌った。
こう書くことでrewrite.cgi
にURIがPATH_INFO
として渡されるので、あとはrewrite.cgi
側で自由に書けばいい。
通常通りの処理をしたければ普通にwww.dream-pro.infoにリクエストを飛ばせばいいけど、hostsに書いてある設定が優先されるのでソケット通信で書く必要があった(俺は)。
あれこれあって書き終わって、一昨日辺りようやくまともに動くようになってくれた。
出来そうかつ需要がありそうな事としては
- LR2上でライバル内ランキングの実現(当初の目的, 通常のIRと併用不可)
search.cgi
ブラウジング時の機能追加- 選曲履歴の保存
くらいが簡単に思いつくかなあ。2.については軽くやっていて、
- 発狂BMS一覧ページに★25とか通常難易度表とかをちょっと追加
- 特定タグ検索時に関連タグ(事前に指定)を挿入
みたいなことをやってみた。
もう少しいろいろ試してみようと思う。公開とかはどうなんだろう。