SEMGAME Doc -SEM GAME SERVER SERVICE-

WebSocket:簡易リレー(1vs1 簡易マッチング用)

クライアントからきたパラメータをそのままマッチング相手に送信します。

基本情報

API PATH/relay/simple/{id}
PATH Param{id} 簡易マッチングで受け取ったidをセットしてください。
アクセストークンチェック×
メンテナンスチェック×
バリデーションチェック×
ヘルスチェック〇 ※定期的に{"cmd" : "hc"}を送信してください。

クライアント メッセージ

・リレーコマンド

マッチ相手に送りたいパラメータを送信します。

No.enjp制約備考
1.cmdコマンドString固定値[relay]リレーコマンド
2.paramパラメータString必須
マッチ相手に送りたいパラメータ
{
    "cmd" : "relay",
    "param" : "String"
}

サーバ メッセージ

・準備完了

ゲームサーバに2ユーザが接続完了したタイミングでサーバから本コマンドが送信されます。

No.enjp制約備考
1.cmdコマンドString固定値[ready]準備完了
2.createRoomUserIdルームを作ったユーザIDString
3.selfUserId自身のユーザIDString
4.matchUserIdマッチ相手のユーザIDString
{
    "cmd" : "ready",
    "createRoomUserId" : "String",
    "selfUserId" : "String",
    "matchUserId" : "String"
}

・リレーコマンド

クライアントからきたパラメータをそのままマッチング相手に送信します。

No.enjp制約備考
1.cmdコマンドString固定値[relay]リレーコマンド
2.paramパラメータStringマッチ相手に送りたいパラメータ
{
    "cmd" : "relay",
    "param" : "String"
}

Close Code

No.Close Code説明
1.3000ゲーム終了
2.3001マッチング相手が接続にこないケース
一定期間、コマンド準備完了を受け取らなかった場合は、タイムアウトとして必ず切断処理を実装してください。

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/relay/simple/{id}";
var TIMER_HC = null;
var TIMER_PLAYWAIT = null;

var CLOSE_END = 3000;
var CLOSE_MATCH_FAIL = 3001;

var PLAYWAIT_TIMEOUT_SEC = 10;
var PLAY_START_WAITTIME = null;

var HC_INTERVAL_SEC = 5000;

$(document).ready(function () {

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

	$(document).on("click", "#end", (function() {
		//対戦終了時
		WS.close(CLOSE_END);
	}));

	$(document).on("click", "#send", (function(){
		//メッセージ送信時
		WS.send(JSON.stringify({cmd: 'relay', param: '送信したい値'}));
	}));

	$(document).on("click", "#start", (function() {
		//ゲーム開始時
		var id = $('[name=id]').val();
		URL = URL.replace('{id}', id);

		WS = new WebSocket(URL);
		WS.onopen    = onOpen;
		WS.onmessage = onMessage;
		WS.onclose   = onClose;
		WS.onerror   = onError;

		TIMER_HC = setInterval(__timerHealthCheck, HC_INTERVAL_SEC);
		TIMER_PLAYWAIT = setInterval(__timerPlayWait, 1000);

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

/**
 * メッセージ受信処理
 **/
function onMessage(e) {
	var r = JSON.parse(e.data);
	if (r.cmd == "ready") {
		//準備が完了しました。
		clearInterval(TIMER_PLAYWAIT);
	} else if (r.cmd == "relay") {
		//メッセージ受信
	} else {
		WS.close();
	}
}

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

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

function onClose(event) {
	if (event.code == CLOSE_END) {
		//マッチングを終了しました。
	} else if (event.code == CLOSE_MATCH_FAIL) {
		//タイムアウト:相手が接続しませんでした。
	}
}

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

function __timerPlayWait() {
	var elapseSec = (new Date().getTime() - PLAY_START_WAITTIME) / 1000;

	if (elapseSec > PLAYWAIT_TIMEOUT_SEC) {
		WS.close(CLOSE_MATCH_FAIL);
	}
}

※各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/