自宅サーバを対戦ゲームサーバにする(2)
世界にひとつのマイサーバーで対戦ゲーム運営に挑戦!
クライアントを制限する
「--test」付きで起動するテストモードでは「ゲームクライアントID」と「パスワード」をチェックしないため、ゲームクライアントが正規のもの(自分で作成したもの)であるかどうかが確認できません。他人が作成したゲームクライアントによってサーバサイドに致命的な被害が起きることはまずありませんが、あまり気持ちよいものではありません。
そこで、クライアントの判定を行うためにデータベースを作成して、正規ゲームクライアント用のクライアントIDとパスワードを登録します。
XAMPPに含まれるMySQLサーバを起動し、phpMyAdminを使って「gamserverdb」という名前のデータベースを作成し、その中に「clientinfo」テーブルを作成します。clientinfoテーブルの仕様は次のとおりです。
| フィールド | 種別 | 照合順序 | ヌル |
|---|---|---|---|
| gameid | varchar(64) | latin1_swedish_ci | いいえ |
| passwd | varchar(64) | latin1_swedish_ci | いいえ |
画像にはもう2つフィールドがあるが必要ない
このテーブルに実行するゲーム用のクライアントIDとパスワードを追加していきます。クライアントIDはゲーム毎に異なるものにします。
ゲームサーバプログラムからこのテーブルにアクセスするためのMySQLユーザーを作成します。ユーザー名は「gameserver」パスワードは「password」で固定です。このMySQLユーザーにはgameserverdbへの選択・挿入だけを許可するようにします。
MySQLユーザーのgameserverを作成
Javaが扱える人はゲームサーバキットにgameserver.jarのソースコードが入っているので、Game.javaの定数GAMEDBPASSWDを変更するといいでしょう。
ちなみにGame.java内のMAXROOMやMAXSEATを書き換えると、部屋数や席数を変更できます。
後はゲームサーバを動かしているコマンドプロンプトに切り替え「Ctrl+C」で終了させてから、「java –jar gameserver.jar」で起動し直すだけです。データベースに登録されていないクライアントIDやパスワードがゲームクライアントから送られてくると、部屋が作成されずエラーが返されます。
本番モードではコンソールにメッセージを表示せず、「C:\Windows\ユーザー名\Local Settings\temp」にjavaloggingset.logというファイルにログが記録されるようになります。
レンタルサーバでもJava実行環境とMySQLサーバが導入されていれば、同様の方法で対戦ゲームサーバにすることができます。ただし、Javaを実行するために「専用サーバ」を選ぶ必要があること、「Linuxを遠隔操作して設定を行うスキル」が必要なことがネックです。


