自宅サーバを対戦ゲームサーバにする(2)

世界にひとつのマイサーバーで対戦ゲーム運営に挑戦!

クライアントを制限する

「--test」付きで起動するテストモードでは「ゲームクライアントID」と「パスワード」をチェックしないため、ゲームクライアントが正規のもの(自分で作成したもの)であるかどうかが確認できません。他人が作成したゲームクライアントによってサーバサイドに致命的な被害が起きることはまずありませんが、あまり気持ちよいものではありません。

そこで、クライアントの判定を行うためにデータベースを作成して、正規ゲームクライアント用のクライアントIDとパスワードを登録します。

XAMPPに含まれるMySQLサーバを起動し、phpMyAdminを使って「gamserverdb」という名前のデータベースを作成し、その中に「clientinfo」テーブルを作成します。clientinfoテーブルの仕様は次のとおりです。

フィールド種別照合順序ヌル
gameidvarchar(64)latin1_swedish_ciいいえ
passwdvarchar(64)latin1_swedish_ciいいえ
article09-2

画像にはもう2つフィールドがあるが必要ない

このテーブルに実行するゲーム用のクライアントIDとパスワードを追加していきます。クライアントIDはゲーム毎に異なるものにします。

ゲームサーバプログラムからこのテーブルにアクセスするためのMySQLユーザーを作成します。ユーザー名は「gameserver」パスワードは「password」で固定です。このMySQLユーザーにはgameserverdbへの選択・挿入だけを許可するようにします。

article09-3

MySQLユーザーのgameserverを作成

Javaが扱える人はゲームサーバキットにgameserver.jarのソースコードが入っているので、Game.javaの定数GAMEDBPASSWDを変更するといいでしょう。

article09-4

ちなみにGame.java内のMAXROOMやMAXSEATを書き換えると、部屋数や席数を変更できます。

後はゲームサーバを動かしているコマンドプロンプトに切り替え「Ctrl+C」で終了させてから、「java –jar gameserver.jar」で起動し直すだけです。データベースに登録されていないクライアントIDやパスワードがゲームクライアントから送られてくると、部屋が作成されずエラーが返されます。

本番モードではコンソールにメッセージを表示せず、「C:\Windows\ユーザー名\Local Settings\temp」にjavaloggingset.logというファイルにログが記録されるようになります。

レンタルサーバでもJava実行環境とMySQLサーバが導入されていれば、同様の方法で対戦ゲームサーバにすることができます。ただし、Javaを実行するために「専用サーバ」を選ぶ必要があること、「Linuxを遠隔操作して設定を行うスキル」が必要なことがネックです。