「快挙だ」
「なんだよ」
「ANGFはWindowsフォームのれっきとしたデスクトップのアプリケーションで、そのままWebで動かすのは無理だと思っていた」
「なぜ?」
「Webはリクエストがあってレスポンスを返す。しかし、あれは処理を進めていって入力要求があってメニューを出す。まるで構造が違う」
「なるほど。噛み合わないわけだね」
「でも制限は多いが上手くやる方法を思い付いた」
「だって噛み合ってないんだろ?」
「メッセージをキューイングしておいて、入力要求があった時点でそれをまとめてレンダリングすれば良かったのだよ」
「だって、Webの転送はワンショットだから処理が継続しないだろ?」
「だからね。別スレッドでシナリオ処理を走らせておけば良いわけだよ」
「非同期で両方走って、同期オブジェクトでタイミングを取りながらデータを交換するわけだね?」
「そうだ。だから、正しくセッションオブジェクトが生きていなければ正常に動かない」
「タイムアウトしたらオシマイってことだね」
「そう。プロセスがリサイクルされてしまったら実行途中のシナリオも消える」
「なるほど」
「でもね。それでも過去のモジュールがそのまま動くことは意味がある」
「時間が無い君だからね」
「もちろん、100%は動かない。NG機能も多い。しかし、それを個別対応するとしても、それでも手間的に魅力がある」
「それだけ?」
「スマホでも遊べる」
「そうか。Webに載った瞬間にWindowsへの依存性が消えるわけだね」
「うむ。もうガタガタ文句は言わせない」
「ところで、どんなソースか興味があるよ。ソースを公開する予定はないのかい?」
「ソースはCodeplexで公開されているよ。見る気があるなら見ればいい」
「自信作かい?」
「とんでもない。凄く古い世代のソースが混じっているから卒倒間違い無し」
「ひ~」
「ちなみにソースをビルドすると、デスクトップ用のプレイヤーは過去のANGF用モジュールがそのまま動く可能性があるよ。全部テストしてないから保証はできないけど」
オマケの感想 §
「実は、ANGF相当のプログラムでWebを……という試みはかなり前からやってた」
「なぜ上手く行かなかったの?」
「クライアント側で実行することにこだわったからだ。しかし、想定される規模に対して、あまりにもクライアントが非力であることが分かったので、今回は思い切ってほとんど全てをサーバ側に置くことにした。これで話が進むようになった」
「WebブラウザのJavaScriptって性能が上がってるはずじゃないの?」
「PCのブラウザはな。スマホのWebブラウザはお粗末な性能しか出ないし、実はPCと同じIE10が動いているように見えるARMのSurfaceでも速度が落ちるのだ」
「じゃあ、スマホがあればPCは要らないって主張は?」
「とんだ茶番だ」
「でもサーバでやると、みんなで使うと遅くなるじゃない」
「そうだよ」
「Azureに上げれば回避できるの?」
「それは難しい。どうもセッションオブジェクトが保存されないらしいからだ。実行中のスレッドを永続化してストレージに入れることも難しそうだ。楽な負荷対策はあまり無さそうだ」
「対策はどうするんだ?」
「セーブデータを保管するストレージだけ共通にして、重かったらセーブして他の軽いサーバで継続してもらうような遊び方をしてもらうしかないな」
制限事項 §
「主な制限事項ってなに?」
「未実装の機能が多い」
「それから?」
「シングルインスタンスが前提のクライアントアプリだが、これをマルチインスタンスに改造しなければならない」
「大変そうだ……」
「モジュール側の改変も含む」
「他には?」
「既存のモジュールはデスクトップ用のフォームを含んでいるから、これも汎用フォームに置き換えねばならない」
「汎用フォームって、そんなに簡単に作れるの?」
「おそらく可能だ」
「どうやって?」
「デスクトップであってもWebブラウザコントロールがあるからな。Web用のフォームを出すのは用意だろう。もちろん、Web Playerで扱うのもな」
「そこまで考えての暴挙か」