実装済みの機能
クライアントからマップデータを Post されたらサーバサイドで処理、データベースに登録する前にパスワードと ID を参照し、パスワードや ID が一致しない場合重複するマップ名での登録や上書きをさせない、データベースに該当が無い新規のマップ名だった場合、新規マップデータとして登録、パスワードと ID で管理し他からのデータ上書きをロックする。
SQL インジェクションなどに対するセキュリティ対策(済み:同時接続や耐久テストはまだ)
マップデータのダウンロードには ID は不要なので、マップ投稿のためだけに ID とパスワードがある。登録されたマップデータを任意で上書きされるとデータが整合性取れなくなるのと、マップ名が重複しても上書きされてしまうからデータ保護のために ID とパスワードが必要になる。
データベースの各カラムについて
- マップデータ
- データ名(マップ名)
- ユーザID(データ登録者)
- パスワード(データ保護用)
- 登録日時(登録情報)
- 更新日時(更新情報)
- マップに関する詳細(登録情報)
- 難易度(登録情報)
- 必要レベル(登録情報/未実装)
投稿文字数をあらかじめ制限、ダメ文字のチェックはスクリプト側でも行う。日本語の投稿も可能なのを確認。UTF-8 での POST は正常に値が受け渡しできている。
※ HTML5 でコンボオブジェクトにバグ発見。インデックスの開始を 1 からに指定してもオプションが無視されている。
※ Edit box の「 just been modified 」について、PC 版と動作が異なる。指定のエディットボックスにフォーカスがある限りトリガーが機能しない。
マップ名がすでに登録済みかデータベースへ問い合わせ(検索)が可能。
投稿されたマップをマップ名で検索、検索結果からマップに関する説明文などを表示。
プレイヤーが自分で作ったマップのデータもゲームプレイ中にオンライン経由で投稿可能。HTML5 と PC 用実行ファイルで共通動作する仕組みを作った。たぶん他エクスポータでも出力可能。
(ここまでは実装完了)
今後付ける機能(文章は後で整理)
マップをオンラインで選択して、実行ボタン押したらそのマップをゲームエンジンにロードしてゲームプレイ。マップだけではなく点数やタイムなどプレイレコードもサーバへ登録する仕組みが作れそう。
マップの検索はキーワード以外にもっと簡単な仕組みを提供したい。プレイヤーのレベルや記録に応じて予め設定されたマップ難易度を順次ダウンロードできるようになる「実績システム」とかが良いかもしれない。
投稿されたマップ名を渡せばマップを他の人が簡単にプレイできる仕組みを(デバッグにも使えるし)。
ID とパスワードはクライアントでセーブデータとして保存してもらって、マップとかプレイ履歴はサーバで一括管理保存する。プレイヤーはオンライン接続が必須になるけど、マップのデータが頻繁に追加更新される限りオンライン必須にしたほうがデータを更新し提供する側はフォローが楽だし告知も要らないからなんとか楽するその仕組みを作りたい。
たいした量のアクセスがあるわけないので SQLite で十分だという判断。
ある程度マップデータが数も揃ったらオンライン必須では無くして、その時点でマップデータを添付してファイル配布という方式に段階を経て行きたい。つまり公開時点でマンパワーを必要とするマップデータが揃ってる可能性が無いから、ぼちぼちやるよ。
データベースに必要な要素について:メモ
マップの投稿に ID とパスワードが必要となる。ID とパスワードは INI Object などをつかって互換性のある方法でユーザ環境に保存する。これは単純に利便性のための保存なので、セキュリティがどうしたこうしたという問題ではないからベタのテキストファイルで保存して、必要な時に随時呼び出す。