add commands
This commit is contained in:
parent
2a6f2d6f9b
commit
5966977a76
2 changed files with 20 additions and 7 deletions
|
@ -1,7 +1,7 @@
|
|||
import Logger, { levels } from '../logger.js';
|
||||
import { filename } from '../utils.js';
|
||||
|
||||
const log = new Logger(filename(import.meta.url), levels.PANIC);
|
||||
const log = new Logger(filename(import.meta.url), levels.DEBUG);
|
||||
|
||||
class Target {
|
||||
constructor(channel) {
|
||||
|
@ -16,6 +16,8 @@ const available_targets = {
|
|||
g: new Target('g'),
|
||||
b: new Target('b'),
|
||||
stack: new Target('stack'),
|
||||
tick: new Target('tick'),
|
||||
index: new Target('index'),
|
||||
};
|
||||
|
||||
class Instruction {
|
||||
|
@ -41,8 +43,11 @@ class Instruction {
|
|||
export const instructions = [
|
||||
{ n: 'CONSTANT', a: true },
|
||||
{ n: 'ADD', a: true },
|
||||
{ n: 'SUB', a: true },
|
||||
{ n: 'RAND', a: false },
|
||||
{ n: 'SUBTRACT', a: true },
|
||||
{ n: 'MULTIPLY', a: true },
|
||||
{ n: 'DIVIDE', a: true },
|
||||
{ n: 'MODULO', a: true },
|
||||
{ n: 'RANDOM', a: false },
|
||||
];
|
||||
|
||||
export function initialize(ctx) {
|
||||
|
@ -57,7 +62,9 @@ function parseSingleInstruction(str = '') {
|
|||
};
|
||||
let split = str.split(' ');
|
||||
let cmd = split[0];
|
||||
log.debug(cmd);
|
||||
let match = instructions.filter((i) => i.n == cmd.toUpperCase());
|
||||
log.debug(match);
|
||||
split = split.slice(1);
|
||||
if (match.length) {
|
||||
let inst_targets = [];
|
||||
|
@ -102,12 +109,12 @@ function parseSingleInstruction(str = '') {
|
|||
item.errors = 'Not enough arguments.';
|
||||
return item;
|
||||
}
|
||||
inst_args = parsed_args[1].split(',').map((s) => (s == 'stack' ? 'stack' : parseInt(s.trim())));
|
||||
inst_args = parsed_args[1].split(',').map((s) => (available_targets[s] ? s : parseInt(s.trim())));
|
||||
if (!inst_args.length) {
|
||||
item.errors = 'No valid args.';
|
||||
}
|
||||
inst_args.forEach((arg) => {
|
||||
if (!arg) {
|
||||
if (arg === NaN) {
|
||||
item.errors = 'An argument is null or undefined.';
|
||||
}
|
||||
});
|
||||
|
@ -127,7 +134,7 @@ function parseSingleInstruction(str = '') {
|
|||
|
||||
export default function parse(str) {
|
||||
let parsed = [];
|
||||
let split = str.split('\n');
|
||||
let split = str.split('\n').filter((s) => s.length > 0);
|
||||
split.forEach((item) => {
|
||||
let parsedItem = parseSingleInstruction(item);
|
||||
parsed.push(parsedItem);
|
||||
|
|
|
@ -7,16 +7,22 @@ function getBinarySize(string) {
|
|||
return Buffer.byteLength(string, 'utf8');
|
||||
}
|
||||
|
||||
function padLeft(size = 4, str = '') {
|
||||
let remaining = size - str.length;
|
||||
return '0'.repeat(remaining) + str;
|
||||
}
|
||||
|
||||
export default function req(data, callback, errorCallback) {
|
||||
let string_data = JSON.stringify(data);
|
||||
let size = getBinarySize(string_data);
|
||||
|
||||
let client = new net.Socket();
|
||||
client.connect(port, hostname, () => {
|
||||
let res = client.write(size);
|
||||
let res = client.write(padLeft(4, `${size}`));
|
||||
|
||||
if (res) {
|
||||
client.write(string_data);
|
||||
}
|
||||
client.destroy();
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue