Skip to content

Instantly share code, notes, and snippets.

@katai5plate
Last active February 7, 2019 09:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save katai5plate/e5a41d99ffcf7c4aa04ae7273a98e620 to your computer and use it in GitHub Desktop.
Save katai5plate/e5a41d99ffcf7c4aa04ae7273a98e620 to your computer and use it in GitHub Desktop.
RAAmockのスケッチ
window.RAA = {};
window.RAA.responseTime = {
normal: 1000,
modal: 500,
};
window.RAA.isEnable = !window.RPGAtsumaru; // APIを上書きするかどうか
window.RAA.isServerError = false; // 意図的にサーバーダウンを再現するか
// ===== UTILS =====
window.RAA.AtsumaruApiError = function(code, message = ""){
return {
errorType: "atsumaruApiError",
code,
message,
}
}
window.RAA.errors = {
BAD_REQUEST: new RAA.AtsumaruApiError('BAD_REQUEST'),
UNAUTHORIZED: new RAA.AtsumaruApiError('UNAUTHORIZED'),
API_CALL_LIMIT_EXCEEDED: new RAA.AtsumaruApiError('API_CALL_LIMIT_EXCEEDED'),
FORBIDDEN: new RAA.AtsumaruApiError('FORBIDDEN'),
INTERNAL_SERVER_ERROR: new RAA.AtsumaruApiError('INTERNAL_SERVER_ERROR'),
}
window.RAA.request = async ({
waitTime = RAA.responseTime.normal, // レスポンスが返ってくる時間
post = {}, // 送信するデータ
checkValid = p => !!p, // 第一引数をpostとして、falseだとエラー
succeeded = {}, // 成功時のレスポンス
failed = RAA.errors.BAD_REQUEST, // 失敗時のレスポンス
}) => new Promise(
(resolve, reject) => {
setTimeout(() => {
if(checkValid(post) === false) {
reject(failed);
}
resolve(succeeded);
}, waitTime);
}
)
window.RAA.modal = async ({message, decorate = s => s, checkValid = p => !!p}) => {
await RAA.request({
waitTime: RAA.responseTime.modal,
post: message,
succeeded: {
src: message,
deco: decorate(message),
},
checkValid,
})
.then(r => {
console.info(`MODAL: ${r.src}`);
alert(r.deco);
})
.catch(e => console.error(e))
}
// ===== STATE =====
RAA.state = {};
RAA.state.query = {
param1: "RPG",
param2: "アツマール",
};
RAA.state.scoreboards = [
{
boardId: 1,
boardName: "スコアボードの名前",
myRecord: { isNewRecord: false, rank: 1, score: 0 },
ranking: [
{ rank: 1, score: 0, userName: "" }
],
myBestRecord: { rank: 1, score: 0, userName: "" },
}
];
RAA.state.screenshot = {
handler: RAA.request({ succeeded: "default.png" }),
};
RAA.state.globalServerVariable = [
{
id: 0,
body: {
name: "G-Variable",
maxValue: Number.MAX_SAFE_INTEGER,
minValue: Number.MIN_SAFE_INTEGER,
value: 123,
},
// trigger: [
// {
// id: 0, delta: 100,
// },
// {
// id: 1, delta: {
// min: -100,
// max: 100,
// },
// },
// ]
}
];
// ===== API =====
if(RAA.isEnable){
/***** コメントを利用する *****/
/***** コントローラーを利用する *****/
/***** サーバーにセーブを保存する *****/
/***** マスターボリュームの設定 *****/
/***** 外部リンクを表示する *****/
// window.RPGAtsumaru.popups.
openLink = async openLinkUrl => {
await RAA.modal({
message: openLinkUrl,
decorate: s => `<a href="${s}">${s}</a>`,
checkValid: p => !!p.match(/^http/),
})
}
/***** クエリ情報の取得 *****/
// window.RPGAtsumaru.experimental.
query = { ...RAA.state.query };
/***** 作者情報を表示する *****/
// window.RPGAtsumaru.experimental.popups.
displayCreatorInformationModal = async niconicoUserId => {
await RAA.modal({
message: niconicoUserId,
decorate: s => `<a href="${s}">${s}</a>`,
checkValid: p => p === null || Number.isFinite(p),
})
}
/***** スコアボードを利用する *****/
/***** スクリーンショットをシェアする *****/
// window.RPGAtsumaru.experimental.screenshot.
displayModal = async () => {
const openModal = async src => await RAA.modal({
message: src,
decorate: s => `<img src="${s}" />`
})
RAA.state.screenshot.handler
.then(r => openModal(r))
.catch(e => console.error(e))
}
// window.RPGAtsumaru.experimental.screenshot.
setScreenshotHandler = async promise => {
await RAA.request({
waitTime: RAA.responseTime.normal,
post: promise,
checkValid: p => p instanceof Promise,
})
.then(() => { RAA.state.screenshot.handler = promise })
.catch(e => console.error(e))
}
/***** グローバルサーバー変数 *****/
// window.RPGAtsumaru.experimental.globalServerVariable.
getGlobalServerVariable = async globalServerVariableId => {
const data = RAA.state.globalServerVariable
.filter(v => v.id === globalServerVariableId)
const res = await RAA.request({
waitTime: RAA.responseTime.normal,
post: globalServerVariableId,
succeeded: data[0],
checkValid: p => Number.isFinite(p) && data.length !== 0,
});
return res.body;
}
// トリガーの仕様がよくわからない
// window.RPGAtsumaru.experimental.globalServerVariable.
// triggerCall = async (triggerId, delta = undefined) => {}
/***** 共有セーブを利用する *****/
/***** ユーザー情報にアクセスする *****/
/***** シグナルを送信する *****/
}
var response = [{
  createdAt: 1234567890,
  data: "Hello world",
  id: 0,
  senderId: 12345,
  senderName: "user1"
}];
var asyncFunc = async (isError = false) => new Promise(
  function (resolve, reject) {
    setTimeout(function () {
      if(isError) reject("BAD_REQUEST");
      resolve(response);
    }, 1000);
  }
)

console.log(await asyncFunc());     // response
console.log(await asyncFunc(true)); // signal:1 Uncaught (in promise) BAD_REQUEST

await asyncFunc(Boolean(Math.random()*2|0))
  .then(response => console.info(response)) // response
  .catch(error => console.error(error))     // BAD_REQUEST
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment