フロントエンド部分と接続するために、 分析においてRubyで作ったプログラムを修正します。
合わせて、プログラムの不備がないか、あらためてプログラムのテストをします。
CGIによるプログラムは、クライアントとGETまたはPOSTメソッドによるHTTPプロトコルでメッセージをやりとりします。ここでは、POSTを使って、通信しますが、サーバー側プログラムは、RubyのCGIライブラリが、どちらのプロトコルもよろしく扱ってくれるので、 細かいことを気にする必要はありません。
CGIにアクセスしてきたプログラムと、サービス提供が適切におこなわれているかを知るために、logを吐き出すようにプログラムを組んでおきます。プログラムに不備があった場合の痕跡と、望まないアクセスに見舞われた時にも証拠が残ります。
index.cgiは、二つのコマンドリクエストを処理します。
./index.cgi
を実行し、後の
(offline mode: enter name=value pairs on standard input)
メッセージに続いて、プログラム中で
cmd=init nm=4 Control-D <-- Unix系のOSの場合
とすれば、山4個の初期化を確認できます。
説明が前後しましたが、クライアントへの返り値は、簡便なXML形式で送信することにします。
プログラムの動作を確認してみると、正型nimのAIに問題が見つかりました。 山が、残り一つになったときに、AIは必勝手順を指さない作りになっていましたので、 プログラムを修正します。
ほとんど、分析のときに作成したプログラムをそのまま使っていますが、CGI としての動作部分や、エラーや異常値に対しての処理を加えることで、安定的な 動作を確保するようにしています。内部の動作や、プログラム上の技術について、 細かい部分の解説はしませんので、 興味のある人はプログラムのソースを確認してみてください。
Flashアプリケーションから、サーバーへのアクセスは、 セキュリティ上の観点から標準状態では無差別なアクセスができなくなっています。 開発中は、CGIを配置するサーバーと、開発マシンとの間でネットワーク通信が 必要になります。そのため、swfファイルからCGIへのアクセスを認めるように、 以下のような、crossdomain.xmlをDocmentRootに配置する必要があります。
<!DOCTYPE cross-domain-policy SYSTEM "https://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="all" /> <allow-access-from domain="*" /> </cross-domain-policy>
ここに設定したcrossdomain.xmlは、 どこからもアクセスできる状態になっていますので、 悪意のあるFlashプログラムによって、予期しない情報漏洩が おきるかもしれませんので、適切なサイトからのアクセスだけに 絞って設定をするように、適宜書き換えて使ってください。
...つづく (2009/6/1)