types to class
This commit is contained in:
parent
2d3fe0df9b
commit
073189e04d
10 changed files with 119 additions and 33 deletions
|
@ -7,7 +7,6 @@ socket.on("connected", () => {
|
|||
});
|
||||
|
||||
socket.on("getDeck", d => {
|
||||
console.log(d);
|
||||
let data = d.data, name = d.name;
|
||||
deck.innerHTML = "";
|
||||
|
||||
|
|
|
@ -1,27 +1,22 @@
|
|||
const db = require("../db.json");
|
||||
const getSlot = require("../types").getSlot;
|
||||
|
||||
module.exports = socket => {
|
||||
return data => {
|
||||
let err = null;
|
||||
if (data && Array.isArray(data) && data.length === 3) {
|
||||
if (db.decks[data[0]]) {
|
||||
const el = db.decks[data[0]].rows[data[1]][data[2]];
|
||||
const el = getSlot(...data);
|
||||
|
||||
if (el) {
|
||||
try {
|
||||
const type = require("../types/" + el.type);
|
||||
type.trigger(el, socket);
|
||||
el.trigger(socket);
|
||||
} catch (exc) {
|
||||
if (exc.code === "MODULE_NOT_FOUND")
|
||||
err = "typeNotFound";
|
||||
else {
|
||||
err = "unknown";
|
||||
console.error(exc)
|
||||
}
|
||||
err = "unknown";
|
||||
console.error(exc)
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
err = "notFound";
|
||||
}
|
||||
} else
|
||||
err = "deckNotFound";
|
||||
} else
|
||||
|
|
29
types/Base.js
Normal file
29
types/Base.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
/**
|
||||
* @abstract
|
||||
*/
|
||||
class Base {
|
||||
text;
|
||||
image;
|
||||
options;
|
||||
|
||||
constructor(text, image = null, options = null) {
|
||||
this.text = text;
|
||||
this.image = image;
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
trigger() {
|
||||
return;
|
||||
};
|
||||
|
||||
toJSON(type) {
|
||||
return {
|
||||
"text": this.text,
|
||||
"image": this.image,
|
||||
"type": type,
|
||||
"options": this.options
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Base;
|
28
types/Deck.js
Normal file
28
types/Deck.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
const Base = require("./Base");
|
||||
const db = require("../db.json");
|
||||
|
||||
|
||||
class Deck extends Base {
|
||||
constructor(text, image = null, options = null) {
|
||||
super(text, image, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
toJSON() {
|
||||
return super.toJSON("deck")
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
trigger(socket) {
|
||||
if (typeof this.options === "string") {
|
||||
socket.emit("getDeck", {name: this.options, data: db.decks[this.options]});
|
||||
} else
|
||||
socket.emit("trigger", {error: "invalidOptions"});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Deck;
|
27
types/ExecCommand.js
Normal file
27
types/ExecCommand.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
const Base = require("./Base");
|
||||
const { exec } = require('child_process');
|
||||
|
||||
class ExecCommand extends Base {
|
||||
constructor(text, image = null, options = null) {
|
||||
super(text, image, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
toJSON() {
|
||||
return super.toJSON("execCommand")
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
trigger() {
|
||||
exec(this.options, (err) => {
|
||||
if (err)
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ExecCommand;
|
|
@ -1,10 +0,0 @@
|
|||
const db = require("../db.json");
|
||||
|
||||
|
||||
module.exports.trigger = (el, socket) => {
|
||||
if (typeof el.options === "string") {
|
||||
socket.emit("getDeck", {name: el.options, data: db.decks[el.options]});
|
||||
}
|
||||
else
|
||||
socket.emit("trigger", {error: "invalidOptions"});
|
||||
};
|
|
@ -1,8 +0,0 @@
|
|||
const { exec } = require('child_process');
|
||||
|
||||
module.exports.trigger = el => {
|
||||
exec(el.options, (err) => {
|
||||
if (err)
|
||||
console.error(err);
|
||||
});
|
||||
};
|
25
types/index.js
Normal file
25
types/index.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
const db = require("../db.json");
|
||||
|
||||
const types = {
|
||||
"execCommand": require("./ExecCommand"),
|
||||
"deck": require("./Deck")
|
||||
};
|
||||
|
||||
module.exports.types = types;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param x
|
||||
* @param y
|
||||
* @returns {null|Base}
|
||||
*/
|
||||
module.exports.getSlot = (name, x, y) => {
|
||||
if (name in db.decks)
|
||||
if (x in db.decks[name].rows)
|
||||
if (y in db.decks[name].rows[x]) {
|
||||
let d = db.decks[name].rows[x][y];
|
||||
return new types[d.type](d.text, d.image, d.options);
|
||||
}
|
||||
return null;
|
||||
};
|
|
@ -3,3 +3,5 @@ extends layout
|
|||
block content
|
||||
h1.center OpenDeck
|
||||
.container#deck
|
||||
|
||||
script(src="/javascripts/index.js")
|
||||
|
|
|
@ -3,8 +3,7 @@ html
|
|||
head
|
||||
title= "OpenDeck" + (title ? " - " + title: "")
|
||||
link(rel="stylesheet", href="/stylesheets/style.css")
|
||||
body
|
||||
block content
|
||||
script(src="/javascripts/materialize.js")
|
||||
script(src="/socket.io/socket.io.js")
|
||||
script(src="/javascripts/index.js")
|
||||
body
|
||||
block content
|
||||
|
|
Loading…
Reference in a new issue