/** * This file acts as an abstraction layer to the server. */ const apiPath = "/schafkopf" async function performRegisterPlayerRequest(name, password){ return fetch(apiPath + "/player/register/" + name, { method: 'POST', body: password }) .then(convertServerResponse) } async function performDeletePlayerRequest(name, password){ return fetch(apiPath + "/player/delete/" + name, { method: 'POST', body: password }) .then(convertServerResponse) .then(function(value) {}) } async function performLoginPlayerRequest(name, password) { return fetch(apiPath + "/player/login/" + name, { method: 'POST', body: password }) .then(convertServerResponse) } async function performLogoutRequest(token) { return fetch(apiPath + "/player/logout", { method: 'POST', body: token }) .then(convertServerResponse) .then(function(value) {}) } async function resumeSessionRequest(token) { return fetch(apiPath + "/player/resume", { method: 'POST', body: token }) .then(convertServerResponse) } async function performGetCurrentTableRequest(token) { return fetch(apiPath + "/player/table", { method: 'POST', body: token }) .then(convertServerResponse) .then(convertJsonResponse) } async function performCreateTableRequest(token, name, visibility) { const vis = visibility ? "public" : "private"; return fetch(apiPath + "/table/create/" + vis + "/" + name, { method: 'POST', body: token }) .then(convertServerResponse) .then(convertJsonResponse) } async function performJoinTableRequest(tableId, token) { return fetch(apiPath + "/table/join/" + tableId, { method: 'POST', body: token }) .then(convertServerResponse) .then(convertJsonResponse) } async function performGetPublicTablesRequest(token) { return fetch(apiPath + "/tables/public", { method: 'POST', body: token }) .then(convertServerResponse) .then(convertJsonResponse) } async function performLeaveTableRequest(token) { return fetch(apiPath + "/table/leave", { method: 'POST', body: token }) .then(convertServerResponse) .then(function(value) {}) } async function performPlayerActionRequest(token, action) { return fetch(apiPath + "/player/action/" + action, { method: 'POST', body: token }) .then(convertServerResponse) } async function performPlayCardRequest(token, card) { return fetch(apiPath + "/player/card/" + card, { method: 'POST', body: token }) .then(convertServerResponse) .then(function(value) {}) } function convertServerResponse(response) { switch (response.status) { case 200: // Success return response.text() case 400: // Bad request throw Error("The request was malformed") case 401: // Unauthorized (Invalid session token) throw Error("Please log in again") case 403: // Forbidden throw Error("Invalid username or password") case 404: // Not found throw Error("Path not found") case 410: // Gone throw Error("The table could not be found") case 406: // notAcceptable throw Error("The password or name is too long") case 409: // Conflict throw Error("A user with the same name is already registered") case 417: // Expectation failed throw Error("The table is already full and can't be joined") case 424: // Failed dependency throw Error("The request couldn't be completed") default: throw Error("Unexpected response: " + response.statusText) } } function convertJsonResponse(text) { if (text == "") { return null; } console.log(text) return JSON.parse(text); }