読者です 読者をやめる 読者になる 読者になる

トレースコーダー

ゲーム好きのSEが、実際にあるアプリケーションからソースを(妄想で)模倣して作成しています。

アプリケーションとのルールを決めよう

アプリケーションとのルールを決めよう

前回はローカル環境にDB,Webサーバーを作成したところまで出来ました。

今回は設計をするためにルールを決めるところまで行きたいと思います。

アプリケーションとの通信

通常のソーシャルゲームは、サーバーとあらゆる通信を行っています。

大枠の考え方の基本としては、

  • 認証系通信
  • 通常系通信
  • デバッグ系通信
  • 外部連携系通信
  • アセット系通信

となると思います。

認証系通信

アプリケーション上のユーザーが本人であることを確認するための通信です。

f:id:glom_s:20170115203028p:plain

この目的としては、

  1. 本人であることを確認すること
  2. その後の通信の暗号化方式のルールを決める

となります。

「本人であることを確認する」ことが一番の目的ですが、実は「その後の通信の暗号化方式のルールを決める」ということもセキュリティ的にはとても大事です。

何故なら、通信の暗号化は「ユーザー毎に異なり、かつ可変であるべき」だからです。

この辺は不正検知を詳しく話す機会があれば記載しますが、今は「必要なんだー(´・ω・`)」程度に収めておいてください。

通常系通信

主にデータベースの状態や情報を取得するための通信です。

ログインボーナスを受け取ったり、イベントのデータをとったり...

まさに、通信の大多数を担うところです。

f:id:glom_s:20170115203048p:plain

デバッグ系通信

内容は通常系通信とほぼ同じですが、これはデバッグ用としてしか使用しません。

つまり、本番環境(正規のアプリケーション)では使用できません。

考え方とルール次第では、これは使用しなくとも大丈夫です。

外部連携系通信

例えば、TwitterFaceBookといった、自分のアプリケーション以外のサーバーとの連携用です。

f:id:glom_s:20170115203134p:plain

ここでは通常系通信と異なる方式で通信をしなければならないため、認証系・通常系とは別のルールで通信を行います。

ルールは、外部サイトによって異なるので、今回は割愛します。

アセット系通信

アプリケーションに画像を乗せると、容量が膨れ上がったり、画像を変更する際にアプリケーションのバージョンを上げなくてはならなくなります。

そうしないためにも、アプリケーション外に画像を載せて管理する必要があります。

そのために、アセット(画像とか)を外部サイトに置いておきましょう。

f:id:glom_s:20170115203112p:plain

最近のスマホゲームだと、よく下記の様にダウンロードする画面を見るかと思います。

f:id:glom_s:20170115203124p:plain

iTunes StoreGoogle Store共に、スマホからのダウンロードにはある程度制限があります。

アプリケーション自体のダウンロード時に、特定のダウンロード容量を超えるようなものはWiFi通信を義務付けるため、ダウンロード数を稼ぐときにも必要となります。

※企業のアプリではほぼ確実に必要となると思います。


次回は、認証系通信から実装していきましょう。

モバイルゲームを作ろう(ローカルサーバー準備編)

バイルゲームを作ろう

明けましておめでとうございます。

2017年が始まったところで、そろそろ自分に蓄えられた知識をアウトプットしようと思い、それを応用した簡単なモバイルゲームを作成しようと思います。

毎年やろうやろうと思ってもなかなか行動しない自分に鞭打つために、今年こそは!との意気込みです。 ('ω')

作ろうとしているもの

RPG系のゲームが作りやすいので、イメージとしてはバトル系を作ろうと思います。

↓のようなバトルゲームが出来たらいいなぁ。。。

image...

まずは準備しましょ。始めましょ。

クライアント
  • Unity
サーバー

まずはサーバーから準備

最初に見た目としてUnityに着手しがちなのですが、クライアント⇔サーバーには色々と準備がいるので、まずはサーバーから準備しましょう。

まず、ローカルサーバーを立てなければなりません。^1

ローカルサーバー建築

特にこれといってこだわりはないので、xamppというツールを使います。

phpとかmysqlとか、色々と入っているのでとても便利です。(´∀`)

というわけで早速

f:id:glom_s:20170109223302p:plain

詰まったところは、apatch設定のところでport80が使えなかったところです。

が、これは以前別の用途でIISを同じportで使用していたために起こったことでした。

IISの設定を切って、無事終了!

mySQLの設定

DBも使用したいので、xamppの設定でmySQLも使えるようにしました。

試しにuser_tというテーブルを作成して完了。

f:id:glom_s:20170109223257p:plain

phalconフレームワーク追加

純粋なphpで作成していくと面倒なことになるので、時短のためにフレームワークを導入します。

選ぶ主な基準としては、

  • (慣れているから)MVCを使用すること
  • mySQLとの疎通が楽なこと
  • 速度が速いらしいので(なんとなく)使ってみたいから

というザックリな理由です。

MVCは信者なわけでもなのですが、日頃の仕事でも使っているので頭の切り替えが少なくて済むという点で選んでます。

というわけで、こいつもサックリと疎通させました。

f:id:glom_s:20170109223255p:plain

地味~に苦労したのは、versionが自分の合ってないとインポートに失敗するという点です。

x86じゃないとダメだったところに、時間かかりました。。

x64で何回も失敗してたよ。。。orz

※Phalcon 3.0.3 - Windows x86 for PHP 7.0.0 (vc14) を使用

組み合わせ確認

今までの組み合わせの確認として、

  1. localhostを通して
  2. phalconを使用したphpで、
  3. phpMyAdminで作成したDBに
  4. 接続して情報を取得し
  5. 画面に表示する

という手順を確認します。


testコントローラー

<?php

class TestController extends ControllerBase {

    public function indexAction() {
        // user_tから全レコードを取得
        $users = UserT::find ();

        // view側に変数を設定する
        $this->view->setVars ( array (
                'users' => $users
        ) );
    }
}

phalcon develop toolで自動作成されたuser_t

<?php

class UserT extends \Phalcon\Mvc\Model
{

    /**
     *
     * @var integer
     * @Primary
     * @Column(type="integer", length=11, nullable=false)
     */
    public $user_id;

    /**
     *
     * @var string
     * @Column(type="string", length=20, nullable=false)
     */
    public $name;

    /**
     * Initialize method for model.
     */
    public function initialize()
    {
        $this->setSchema("trace_test");
    }

    /**
     * Returns table name mapped in the model.
     *
     * @return string
     */
    public function getSource()
    {
        return 'user_t';
    }

    /**
     * Allows to query a set of records that match the specified conditions
     *
     * @param mixed $parameters
     * @return UserT[]|UserT
     */
    public static function find($parameters = null)
    {
        return parent::find($parameters);
    }

    /**
     * Allows to query the first record that match the specified conditions
     *
     * @param mixed $parameters
     * @return UserT
     */
    public static function findFirst($parameters = null)
    {
        return parent::findFirst($parameters);
    }

}

view側のコード

<div class="page-header">
    <h1>Congratulations!</h1>
</div>

<p>You're now flying with Phalcon. Great things are about to happen!</p>

<p>This page is located at <code>views/index/index.volt</code></p>

<?php

    foreach ($users as $user) {
        echo "<h2>", $user->user_id;
        echo $user->name, "</h2>";
    }

?>

eclipse上は下記のような状態

f:id:glom_s:20170109223247p:plain

表示された結果

f:id:glom_s:20170109223252p:plain

この辺は後半はトントン行きました。

前半は、phalconのデベロッパーツールのphalcon.bat(windows版)が上手く使えなかったという点。。。

ここだけで一時間くらいかかりました。(ドツボ)

@echo off

@ ↓のsetではエラーが出る※Cドライブじゃないのが原因っぽい
@set PTOOLSPATH="%~dp0\"
@ 絶対パスにすると行ける!
set PTOOLSPATH=D:\workspace\phalcon-devtools-3.0.x\
php %PTOOLSPATH%phalcon.php %*

参考

AdminWeb

f:id:glom_s:20170109223247p:plainf:id:glom_s:20170109223252p:plainf:id:glom_s:20170109223255p:plainf:id:glom_s:20170109223257p:plainf:id:glom_s:20170109223302p:plain