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