SEMGAME Doc -SEM GAME SERVER SERVICE-

WebSocket:簡易マッチング(1vs1)

ユーザレートに関係なく待機中ユーザと即マッチングします。

基本情報

API PATH/matching/simple
アクセストークンチェック×
メンテナンスチェック×
バリデーションチェック×
ヘルスチェック〇 ※定期的に{"cmd" : "hc"}を送信してください。

クライアント メッセージ

本APIには、クライアントからのメッセージ情報はありません。

サーバ メッセージ

・マッチング完了

マッチング相手が見つかったタイミングでサーバから本メッセージが送信されます。

No.enjp制約備考
1.cmdコマンドString固定値[success]マッチング完了
2.idマッチングIDlongマッチ相手と本IDにてゲームサーバで識別してデータのやり取りを行う
3.urlマッチング後の接続URLStringマッチング完了後のゲームサーバURL
{
    "cmd" : "success",
    "id" : 0,
    "url" : "String"
}

Close Code

No.Close Code説明
1.3000キャンセル
2.3001タイムアウト
タイムアウトを実装しマッチング相手が見つからなかった場合は必ず切断処理を実装してください。
3.3002成功
コマンドsuccessを受けとった後、本コードにて切断してください。

Class/Dto/Model

API固有のClass/Dto/Modelはありません。

関連API

No.API
1簡易リレー(1vs1 簡易マッチング用)

デモ 2つ立ち上げてお試しください

※メンテナンスの為、停止・エラーの場合があります。

JSサンプルソース

var WS = null;
var URL = "ws://sample-ws-sample.semgame.net/matching/simple";

var TIMER_HC = null;
var TIMER_MATCHING = null;

var CLOSE_CANCEL = 3000;
var CLOSE_TIMEOUT = 3001;
var CLOSE_SUCCESS = 3002;

var MATCHING_TIMEOUT_SEC = 10;
var MATCHING_START_TIME = null;
var HC_INTERVAL_SEC = 5000;

$(document).ready(function () {

	$(document).on("click", "#cancel", (function() {
		//対戦キャンセル時
		WS.close(CLOSE_CANCEL);
	}));

	$(document).on("click", "#start", (function() {
		//ゲーム開始時
		WS = new WebSocket(URL);
		WS.onopen    = onOpen;
		WS.onmessage = onMessage;
		WS.onclose   = onClose;
		WS.onerror   = onError;

		TIMER_HC = setInterval(__timerHealthCheck, HC_INTERVAL_SEC);
		TIMER_MATCHING = setInterval(__timerMatching, 1000);

		MATCHING_START_TIME = new Date().getTime();
	}));
});

/**
 * メッセージ受信処理
 **/
function onMessage(e) {
	var r = JSON.parse(e.data);
	if (r.cmd == "success") {
		//マッチング成功
		WS.close(CLOSE_SUCCESS);
	} else if (r.cmd == "hc") {
	} else {
		WS.close();
	}
}

function onOpen(event) {
	//何かあれば適宜実装
}

function onError(event) {
	//何かあれば適宜実装
}

function onClose(event) {
	clearInterval(TIMER_HC);
	clearInterval(TIMER_MATCHING);

	if (event.code == CLOSE_SUCCESS) {
		//マッチング成功
	} else if (event.code == CLOSE_CANCEL) {
		//マッチングをキャンセルしました。
	} else if (event.code == CLOSE_TIMEOUT) {
		//タイムアウト:相手が見つかりませんでした。
	}
}

function __timerHealthCheck() {
	WS.send(JSON.stringify({cmd: 'hc'}));
}

function __timerMatching() {
	if (elapseSec > MATCHING_TIMEOUT_SEC) {
		WS.close(CLOSE_TIMEOUT);
	}
}

※各CloseCodeとヘルスチェックは必ず実装してください。
※あくまでサンプルです。このままでは動きません。

更新情報

  • 2020.06.10リアルタイム通信向けのAPI docを公開
  • 2020.05.08負荷試験デモ、セムゲーム管理ツールデモの公開
  • 2020.04.20負荷試験サービスを開始
  • 2020.02.07API Doc公開
  • 2019.10.01バージョンアップ
  • 2019.06.04SEMGAME SERVER SERVICE 開始

運営会社

本サービスは、株式会社スタジオセムが運営しているサービスとなります。
https://studiosem.co.jp/