BIG FORMATING COMMIT
This commit is contained in:
@@ -8,19 +8,19 @@ using Lambda;
|
||||
|
||||
class Disk extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("ls", (args)->{
|
||||
registerSyncSubcommand("ls", (args) -> {
|
||||
Peripheral.getAllDrives().foreach(drive -> {
|
||||
var addr = drive.getAddr();
|
||||
var label = drive.getDiskLabel();
|
||||
var id = drive.getDiskID();
|
||||
|
||||
if (drive.isDiskPresent()){
|
||||
if (drive.hasAudio()){
|
||||
if (drive.isDiskPresent()) {
|
||||
if (drive.hasAudio()) {
|
||||
handle.writeLine('${addr} => ${label} [AUDIO]');
|
||||
}else{
|
||||
} else {
|
||||
handle.writeLine('${addr} => ${label} (${id})');
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
handle.writeLine('${addr} => [NO DISK]');
|
||||
}
|
||||
|
||||
@@ -28,26 +28,26 @@ class Disk extends CLIAppBase {
|
||||
});
|
||||
});
|
||||
|
||||
registerSyncSubcommand("play", (args)->{
|
||||
if (args.length < 1){
|
||||
registerSyncSubcommand("play", (args) -> {
|
||||
if (args.length < 1) {
|
||||
handle.writeLine("Missing drive address");
|
||||
return false;
|
||||
}
|
||||
|
||||
return audioDiskPlayPause(args[0], true);
|
||||
},"<drive>");
|
||||
}, "<drive>");
|
||||
|
||||
registerSyncSubcommand("stop", (args) -> {
|
||||
if (args.length < 1){
|
||||
if (args.length < 1) {
|
||||
handle.writeLine("Missing drive address");
|
||||
return false;
|
||||
}
|
||||
|
||||
return audioDiskPlayPause(args[0], false);
|
||||
},"<drive>");
|
||||
}, "<drive>");
|
||||
|
||||
registerSyncSubcommand("eject", (args)->{
|
||||
if (args.length < 1){
|
||||
registerSyncSubcommand("eject", (args) -> {
|
||||
if (args.length < 1) {
|
||||
handle.writeLine("Missing drive address");
|
||||
return false;
|
||||
}
|
||||
@@ -55,22 +55,22 @@ class Disk extends CLIAppBase {
|
||||
var driveAddr = args[0];
|
||||
var drive = Peripheral.getDrive(driveAddr);
|
||||
|
||||
if (drive == null){
|
||||
if (drive == null) {
|
||||
handle.writeLine("Drive not found: " + driveAddr);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!drive.isDiskPresent()){
|
||||
if (!drive.isDiskPresent()) {
|
||||
handle.writeLine("No disk in drive: " + driveAddr);
|
||||
return false;
|
||||
}
|
||||
|
||||
drive.ejectDisk();
|
||||
return true;
|
||||
},"<drive>");
|
||||
}, "<drive>");
|
||||
|
||||
registerSyncSubcommand("lable",(args) -> {
|
||||
if (args.length < 1){
|
||||
registerSyncSubcommand("lable", (args) -> {
|
||||
if (args.length < 1) {
|
||||
handle.writeLine("Missing drive address");
|
||||
return false;
|
||||
}
|
||||
@@ -79,49 +79,49 @@ class Disk extends CLIAppBase {
|
||||
var drive = Peripheral.getDrive(driveAddr);
|
||||
var label:String = args[1];
|
||||
|
||||
if (drive == null){
|
||||
if (drive == null) {
|
||||
handle.writeLine("Drive not found: " + driveAddr);
|
||||
}
|
||||
|
||||
if (!drive.isDiskPresent()){
|
||||
if (!drive.isDiskPresent()) {
|
||||
handle.writeLine("No disk in drive: " + driveAddr);
|
||||
}
|
||||
|
||||
if (label == null || label == ""){
|
||||
if (label == null || label == "") {
|
||||
handle.writeLine(drive.getDiskLabel());
|
||||
}else{
|
||||
var err = drive.setDiskLabel(label);
|
||||
if (err != null){
|
||||
} else {
|
||||
var err = drive.setDiskLabel(label);
|
||||
if (err != null) {
|
||||
handle.writeLine("Failed to set lable");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
},"<drive> [label]");
|
||||
}, "<drive> [label]");
|
||||
}
|
||||
|
||||
private function audioDiskPlayPause(driveAddr: String, play: Bool): Bool {
|
||||
private function audioDiskPlayPause(driveAddr:String, play:Bool):Bool {
|
||||
var drive = Peripheral.getDrive(driveAddr);
|
||||
|
||||
if (drive == null){
|
||||
if (drive == null) {
|
||||
handle.writeLine("Drive not found: " + driveAddr);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!drive.isDiskPresent()){
|
||||
if (!drive.isDiskPresent()) {
|
||||
handle.writeLine("No disk in drive: " + driveAddr);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!drive.hasAudio()){
|
||||
if (!drive.hasAudio()) {
|
||||
handle.writeLine("Disk in drive: " + driveAddr + " does not have audio");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (play){
|
||||
if (play) {
|
||||
drive.playAudio();
|
||||
}else{
|
||||
} else {
|
||||
drive.stopAudio();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,19 +9,19 @@ using tink.CoreApi;
|
||||
|
||||
class GPS extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("set", (args)->{
|
||||
var x: Float = Std.parseFloat(args[0]);
|
||||
var y: Float = Std.parseFloat(args[1]);
|
||||
var z: Float = Std.parseFloat(args[2]);
|
||||
|
||||
var pos: Pos3 = new Vec3<Float>(x, y, z);
|
||||
|
||||
kernel.gps.GPS.setManualPosition(pos);
|
||||
|
||||
return true;
|
||||
},"<x> <y> <z>");
|
||||
registerSyncSubcommand("set", (args) -> {
|
||||
var x:Float = Std.parseFloat(args[0]);
|
||||
var y:Float = Std.parseFloat(args[1]);
|
||||
var z:Float = Std.parseFloat(args[2]);
|
||||
|
||||
registerSyncSubcommand("status",(args)->{
|
||||
var pos:Pos3 = new Vec3<Float>(x, y, z);
|
||||
|
||||
kernel.gps.GPS.setManualPosition(pos);
|
||||
|
||||
return true;
|
||||
}, "<x> <y> <z>");
|
||||
|
||||
registerSyncSubcommand("status", (args) -> {
|
||||
var pos = kernel.gps.GPS.getPosition();
|
||||
if (pos != null) {
|
||||
handle.writeLine('Position x:${pos.x} y:${pos.y} z:${pos.z}');
|
||||
@@ -29,28 +29,28 @@ class GPS extends CLIAppBase {
|
||||
handle.writeLine("Position not available");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
var acc = kernel.gps.GPS.getAccuracy();
|
||||
if (acc == 1){
|
||||
if (acc == 1) {
|
||||
handle.writeLine("Accuracy: Low");
|
||||
} else if (acc == 2){
|
||||
} else if (acc == 2) {
|
||||
handle.writeLine("Accuracy: Medium");
|
||||
} else if (acc == 3){
|
||||
} else if (acc == 3) {
|
||||
handle.writeLine("Accuracy: High");
|
||||
}
|
||||
|
||||
|
||||
var ins = INS.getHeading();
|
||||
if (ins != null) {
|
||||
handle.writeLine('INS heading: ${ins.x} y:${ins.y} z:${ins.z}');
|
||||
} else {
|
||||
handle.writeLine("INS heading not available");
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
registerAsyncSubcommand("locate",(args)->{
|
||||
return kernel.gps.GPS.locate().map((pos)->{
|
||||
registerAsyncSubcommand("locate", (args) -> {
|
||||
return kernel.gps.GPS.locate().map((pos) -> {
|
||||
if (pos != null) {
|
||||
handle.writeLine('Position x:${pos.x} y:${pos.y} z:${pos.z}');
|
||||
} else {
|
||||
@@ -60,8 +60,8 @@ class GPS extends CLIAppBase {
|
||||
});
|
||||
});
|
||||
|
||||
registerAsyncSubcommand("ins",(args)->{
|
||||
return INS.align().map((_)->{
|
||||
registerAsyncSubcommand("ins", (args) -> {
|
||||
return INS.align().map((_) -> {
|
||||
handle.writeLine("INS aligned");
|
||||
return true;
|
||||
});
|
||||
|
||||
@@ -7,7 +7,6 @@ import kernel.ps.Process;
|
||||
using tink.CoreApi;
|
||||
|
||||
class HelloWorld implements Process {
|
||||
|
||||
public function new() {}
|
||||
|
||||
public function run(handle:ProcessHandle) {
|
||||
@@ -15,7 +14,7 @@ class HelloWorld implements Process {
|
||||
|
||||
var c = new HelloWorldServiceRPC(0);
|
||||
|
||||
c.getNumber().handle((res)->{
|
||||
c.getNumber().handle((res) -> {
|
||||
Log.debug("Got number: " + res);
|
||||
});
|
||||
|
||||
|
||||
@@ -8,18 +8,18 @@ using tink.CoreApi;
|
||||
|
||||
@:build(macros.rpc.RPC.buildRPC())
|
||||
class HelloWorldService implements Process {
|
||||
private var handle:ProcessHandle;
|
||||
private var handle:ProcessHandle;
|
||||
|
||||
public function new() {}
|
||||
public function new() {}
|
||||
|
||||
public function run(handle:ProcessHandle) {
|
||||
this.handle = handle;
|
||||
this.handle = handle;
|
||||
|
||||
RPC.generateRPCPackageHandle();
|
||||
}
|
||||
RPC.generateRPCPackageHandle();
|
||||
}
|
||||
|
||||
@rpc
|
||||
public function getNumber():Int{
|
||||
return 42;
|
||||
}
|
||||
}
|
||||
@rpc
|
||||
public function getNumber():Int {
|
||||
return 42;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,10 +4,10 @@ import kernel.ps.ProcessHandle;
|
||||
import kernel.ps.Process;
|
||||
|
||||
class ID implements Process {
|
||||
public function new() {}
|
||||
public function new() {}
|
||||
|
||||
public function run(handle:ProcessHandle) {
|
||||
handle.writeLine("ID: " + kernel.net.Net.networkID);
|
||||
handle.close();
|
||||
}
|
||||
handle.writeLine("ID: " + kernel.net.Net.networkID);
|
||||
handle.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,64 +4,64 @@ import kernel.KernelSettings;
|
||||
import lib.CLIAppBase;
|
||||
|
||||
class KSettings extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("get", (args)->{
|
||||
var key = args[0];
|
||||
public function new() {
|
||||
registerSyncSubcommand("get", (args) -> {
|
||||
var key = args[0];
|
||||
|
||||
if (key == null) {
|
||||
handle.writeLine("Key not specified");
|
||||
return false;
|
||||
}
|
||||
if (key == null) {
|
||||
handle.writeLine("Key not specified");
|
||||
return false;
|
||||
}
|
||||
|
||||
var value = switch (key){
|
||||
case "hostname":
|
||||
KernelSettings.hostname;
|
||||
case "sitecontroller":
|
||||
Std.string(KernelSettings.siteController);
|
||||
default:
|
||||
null;
|
||||
}
|
||||
var value = switch (key) {
|
||||
case "hostname":
|
||||
KernelSettings.hostname;
|
||||
case "sitecontroller":
|
||||
Std.string(KernelSettings.siteController);
|
||||
default:
|
||||
null;
|
||||
}
|
||||
|
||||
if (value == null) {
|
||||
handle.writeLine("Key not found or not set");
|
||||
return false;
|
||||
}
|
||||
if (value == null) {
|
||||
handle.writeLine("Key not found or not set");
|
||||
return false;
|
||||
}
|
||||
|
||||
handle.writeLine(value);
|
||||
return true;
|
||||
}," <key>");
|
||||
handle.writeLine(value);
|
||||
return true;
|
||||
}, " <key>");
|
||||
|
||||
registerSyncSubcommand("set", (args)->{
|
||||
var key = args[0];
|
||||
registerSyncSubcommand("set", (args) -> {
|
||||
var key = args[0];
|
||||
|
||||
if (key == null) {
|
||||
handle.writeLine("Key not specified");
|
||||
return false;
|
||||
}
|
||||
if (key == null) {
|
||||
handle.writeLine("Key not specified");
|
||||
return false;
|
||||
}
|
||||
|
||||
var value = args[1];
|
||||
var value = args[1];
|
||||
|
||||
if (value == null) {
|
||||
handle.writeLine("Value not specified");
|
||||
return false;
|
||||
}
|
||||
if (value == null) {
|
||||
handle.writeLine("Value not specified");
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (key){
|
||||
case "hostname":
|
||||
KernelSettings.hostname = value;
|
||||
case "sitecontroller":
|
||||
KernelSettings.siteController = Std.parseInt(value);
|
||||
default:
|
||||
handle.writeLine("Key not found");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}," <key> <value>");
|
||||
switch (key) {
|
||||
case "hostname":
|
||||
KernelSettings.hostname = value;
|
||||
case "sitecontroller":
|
||||
KernelSettings.siteController = Std.parseInt(value);
|
||||
default:
|
||||
handle.writeLine("Key not found");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}, " <key> <value>");
|
||||
|
||||
registerSyncSubcommand("list", (args)->{
|
||||
handle.writeLine("hostname");
|
||||
handle.writeLine("sitecontroller");
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
registerSyncSubcommand("list", (args) -> {
|
||||
handle.writeLine("hostname");
|
||||
handle.writeLine("sitecontroller");
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,12 +11,12 @@ import lib.ui.UIApp;
|
||||
using tink.CoreApi;
|
||||
|
||||
class KernelLog implements Process {
|
||||
private var handle: ProcessHandle;
|
||||
private var ctx: WindowContext;
|
||||
private var handle:ProcessHandle;
|
||||
private var ctx:WindowContext;
|
||||
|
||||
public function new() {}
|
||||
|
||||
public function run(handle: ProcessHandle):Void {
|
||||
public function run(handle:ProcessHandle):Void {
|
||||
this.handle = handle;
|
||||
|
||||
var statelessCtx = handle.createStatelessWindowContext();
|
||||
@@ -24,23 +24,23 @@ class KernelLog implements Process {
|
||||
|
||||
statelessCtx.setRenderFunc(this.render);
|
||||
|
||||
Log.onLog.handle(()->{
|
||||
Log.onLog.handle(() -> {
|
||||
statelessCtx.requestRender();
|
||||
});
|
||||
}
|
||||
|
||||
private function render() {
|
||||
ctx.clear();
|
||||
ctx.setCursorPos(0,0);
|
||||
ctx.setCursorPos(0, 0);
|
||||
|
||||
var lines = Log.getLines();
|
||||
var height = ctx.getSize().y;
|
||||
var start = MathI.max(lines.length - height,0);
|
||||
var start = MathI.max(lines.length - height, 0);
|
||||
|
||||
for (i in start...lines.length) {
|
||||
var line = lines[i];
|
||||
|
||||
switch (line.level){
|
||||
switch (line.level) {
|
||||
case Info:
|
||||
ctx.setTextColor(Color.White);
|
||||
ctx.write("[INFO] ");
|
||||
@@ -59,7 +59,7 @@ class KernelLog implements Process {
|
||||
}
|
||||
|
||||
ctx.write(line.message);
|
||||
ctx.setCursorPos(0,ctx.getCursorPos().y + 1);
|
||||
ctx.setCursorPos(0, ctx.getCursorPos().y + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,17 +5,17 @@ import kernel.ps.ProcessHandle;
|
||||
import kernel.ps.Process;
|
||||
|
||||
class LSPS implements Process {
|
||||
public function new() {}
|
||||
public function new() {}
|
||||
|
||||
public function run(handle:ProcessHandle) {
|
||||
var pids = ProcessManager.listProcesses();
|
||||
var pids = ProcessManager.listProcesses();
|
||||
|
||||
handle.writeLine('Count: ${pids.length}');
|
||||
handle.writeLine('Count: ${pids.length}');
|
||||
|
||||
for (pid in pids) {
|
||||
handle.writeLine('${pid}');
|
||||
}
|
||||
for (pid in pids) {
|
||||
handle.writeLine('${pid}');
|
||||
}
|
||||
|
||||
handle.close();
|
||||
}
|
||||
}
|
||||
handle.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,17 +8,17 @@ using tink.CoreApi;
|
||||
|
||||
class Net extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("route", (args)->{
|
||||
registerSyncSubcommand("route", (args) -> {
|
||||
var routes = Routing.getRouteTable();
|
||||
|
||||
for(k => v in routes) {
|
||||
for (k => v in routes) {
|
||||
handle.writeLine('${k} => ${v.interf.name()}(${v.cost})');
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
registerSyncSubcommand("iface", (args)->{
|
||||
registerSyncSubcommand("iface", (args) -> {
|
||||
var modems = Peripheral.getAllModems();
|
||||
|
||||
for (modem in modems) {
|
||||
@@ -28,7 +28,7 @@ class Net extends CLIAppBase {
|
||||
return true;
|
||||
});
|
||||
|
||||
registerSyncSubcommand("proto",(args)->{
|
||||
registerSyncSubcommand("proto", (args) -> {
|
||||
var protos = kernel.net.Net.getActiveProtocols();
|
||||
|
||||
for (proto in protos) {
|
||||
@@ -38,20 +38,20 @@ class Net extends CLIAppBase {
|
||||
return true;
|
||||
});
|
||||
|
||||
registerAsyncSubcommand("ping",(args)->{
|
||||
registerAsyncSubcommand("ping", (args) -> {
|
||||
if (args.length < 1) {
|
||||
return Future.sync(false);
|
||||
}
|
||||
|
||||
|
||||
var toID:Null<Int> = Std.parseInt(args[0]);
|
||||
|
||||
|
||||
if (toID == null) {
|
||||
handle.write("Invalid ID");
|
||||
return Future.sync(false);
|
||||
}
|
||||
|
||||
|
||||
return kernel.net.Net.ping(toID).map(result -> {
|
||||
switch (result){
|
||||
switch (result) {
|
||||
case Success(_):
|
||||
handle.write("Ping succeeded");
|
||||
case Failure(failure):
|
||||
@@ -60,6 +60,6 @@ class Net extends CLIAppBase {
|
||||
|
||||
return true;
|
||||
});
|
||||
},"<id>");
|
||||
}, "<id>");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,35 +4,36 @@ import kernel.peripherals.Peripherals.Peripheral;
|
||||
import lib.CLIAppBase;
|
||||
|
||||
class Perf extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("inspect",(args)->{
|
||||
if (args.length < 1) return false;
|
||||
public function new() {
|
||||
registerSyncSubcommand("inspect", (args) -> {
|
||||
if (args.length < 1)
|
||||
return false;
|
||||
|
||||
var result = Peripheral.inspect(args[0]);
|
||||
var result = Peripheral.inspect(args[0]);
|
||||
|
||||
if (result == null){
|
||||
handle.writeLine("No peripheral found on side "+args[0]);
|
||||
return true;
|
||||
}
|
||||
if (result == null) {
|
||||
handle.writeLine("No peripheral found on side " + args[0]);
|
||||
return true;
|
||||
}
|
||||
|
||||
handle.writeLine("Types:");
|
||||
for (type in result.types){
|
||||
handle.writeLine(" "+type);
|
||||
}
|
||||
handle.writeLine("Types:");
|
||||
for (type in result.types) {
|
||||
handle.writeLine(" " + type);
|
||||
}
|
||||
|
||||
handle.writeLine("Methods:");
|
||||
for (method in result.methods){
|
||||
handle.writeLine(" "+method);
|
||||
}
|
||||
handle.writeLine("Methods:");
|
||||
for (method in result.methods) {
|
||||
handle.writeLine(" " + method);
|
||||
}
|
||||
|
||||
return true;
|
||||
},"<side>");
|
||||
return true;
|
||||
}, "<side>");
|
||||
|
||||
registerSyncSubcommand("list",(args)->{
|
||||
for (addr in Peripheral.getAllAddresses()){
|
||||
handle.writeLine('$addr => ${Peripheral.getTypes(addr).join(", ")}');
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
registerSyncSubcommand("list", (args) -> {
|
||||
for (addr in Peripheral.getAllAddresses()) {
|
||||
handle.writeLine('$addr => ${Peripheral.getTypes(addr).join(", ")}');
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,22 +5,22 @@ import kernel.peripherals.Peripherals.Peripheral;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
class Redstone extends CLIAppBase{
|
||||
class Redstone extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("on", (args)-> {
|
||||
registerSyncSubcommand("on", (args) -> {
|
||||
Peripheral.getRedstone(args[0]).setOutput(true);
|
||||
return true;
|
||||
},"<side>");
|
||||
}, "<side>");
|
||||
|
||||
registerSyncSubcommand("off", (args)-> {
|
||||
registerSyncSubcommand("off", (args) -> {
|
||||
Peripheral.getRedstone(args[0]).setOutput(false);
|
||||
return true;
|
||||
},"<side>");
|
||||
}, "<side>");
|
||||
|
||||
registerSyncSubcommand("get", (args)-> {
|
||||
registerSyncSubcommand("get", (args) -> {
|
||||
var value = Peripheral.getRedstone(args[0]).getAnalogInput();
|
||||
handle.write("Analog input: " + value);
|
||||
return true;
|
||||
},"<side>");
|
||||
}, "<side>");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,81 +6,80 @@ import lib.CLIAppBase;
|
||||
using tink.CoreApi;
|
||||
|
||||
class Service extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("start", (args) ->{
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
public function new() {
|
||||
registerSyncSubcommand("start", (args) -> {
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var name = args[0];
|
||||
var name = args[0];
|
||||
|
||||
var result = ServiceManager.start(name);
|
||||
return handleResult(result);
|
||||
},"<name>");
|
||||
var result = ServiceManager.start(name);
|
||||
return handleResult(result);
|
||||
}, "<name>");
|
||||
|
||||
registerSyncSubcommand("stop", (args) ->{
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
registerSyncSubcommand("stop", (args) -> {
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var name = args[0];
|
||||
var name = args[0];
|
||||
|
||||
var result = ServiceManager.stop(name);
|
||||
return handleResult(result);
|
||||
},"<name>");
|
||||
var result = ServiceManager.stop(name);
|
||||
return handleResult(result);
|
||||
}, "<name>");
|
||||
|
||||
registerSyncSubcommand("register", (args) ->{
|
||||
if (args.length < 2) {
|
||||
return false;
|
||||
}
|
||||
registerSyncSubcommand("register", (args) -> {
|
||||
if (args.length < 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var name = args[0];
|
||||
var binName = args[1];
|
||||
var rest = args.slice(2);
|
||||
var name = args[0];
|
||||
var binName = args[1];
|
||||
var rest = args.slice(2);
|
||||
|
||||
var result = ServiceManager.register(name, binName, rest);
|
||||
return handleResult(result);
|
||||
},"<name> <binary> [args...]");
|
||||
var result = ServiceManager.register(name, binName, rest);
|
||||
return handleResult(result);
|
||||
}, "<name> <binary> [args...]");
|
||||
|
||||
registerSyncSubcommand("unregister", (args) ->{
|
||||
if (args.length < 2) {
|
||||
return false;
|
||||
}
|
||||
registerSyncSubcommand("unregister", (args) -> {
|
||||
if (args.length < 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var name = args[0];
|
||||
var name = args[0];
|
||||
|
||||
var result = ServiceManager.unregister(name);
|
||||
return handleResult(result);
|
||||
},"<name>");
|
||||
var result = ServiceManager.unregister(name);
|
||||
return handleResult(result);
|
||||
}, "<name>");
|
||||
|
||||
registerSyncSubcommand("list", (args) ->{
|
||||
|
||||
var list = ServiceManager.listRunning();
|
||||
|
||||
for (name in list) {
|
||||
this.handle.writeLine(name);
|
||||
}
|
||||
registerSyncSubcommand("list", (args) -> {
|
||||
var list = ServiceManager.listRunning();
|
||||
|
||||
return true;
|
||||
});
|
||||
for (name in list) {
|
||||
this.handle.writeLine(name);
|
||||
}
|
||||
|
||||
registerSyncSubcommand("enable", (args) ->{
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
ServiceManager.enable(args[0]);
|
||||
return true;
|
||||
},"<name>");
|
||||
}
|
||||
registerSyncSubcommand("enable", (args) -> {
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
private function handleResult(res: Outcome<Noise,String>): Bool {
|
||||
switch (res) {
|
||||
case Success(_):
|
||||
return true;
|
||||
case Failure(e):
|
||||
this.handle.write(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
ServiceManager.enable(args[0]);
|
||||
return true;
|
||||
}, "<name>");
|
||||
}
|
||||
|
||||
private function handleResult(res:Outcome<Noise, String>):Bool {
|
||||
switch (res) {
|
||||
case Success(_):
|
||||
return true;
|
||||
case Failure(e):
|
||||
this.handle.write(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,18 +15,18 @@ class Terminal implements Process {
|
||||
private var handle:ProcessHandle;
|
||||
|
||||
private var ctx:WindowContext;
|
||||
private var requestRender: () -> Void;
|
||||
|
||||
private var requestRender:() -> Void;
|
||||
|
||||
private var input:String = "";
|
||||
private var backlog:Array<String> = [];
|
||||
private var history:Array<String> = [];
|
||||
private var historyIndex:Int = 0;
|
||||
|
||||
private var runningPID:PID = -1;
|
||||
private var runningPID:PID = -1;
|
||||
|
||||
public function new() {}
|
||||
|
||||
public function run(handle: ProcessHandle): Void {
|
||||
public function run(handle:ProcessHandle):Void {
|
||||
this.handle = handle;
|
||||
|
||||
var statelessContext = handle.createStatelessWindowContext();
|
||||
@@ -38,7 +38,8 @@ class Terminal implements Process {
|
||||
|
||||
// Add input event handlers
|
||||
handle.addCallbackLink(this.ctx.onChar.handle(char -> {
|
||||
if (this.runningPID > 0) return;
|
||||
if (this.runningPID > 0)
|
||||
return;
|
||||
this.input += char;
|
||||
this.requestRender();
|
||||
}));
|
||||
@@ -47,11 +48,13 @@ class Terminal implements Process {
|
||||
handle.addCallbackLink(this.ctx.onKey.handle(e -> {
|
||||
switch (e.keyCode) {
|
||||
case 259: // Backspace
|
||||
if (this.runningPID > 0) return;
|
||||
if (this.runningPID > 0)
|
||||
return;
|
||||
this.input = this.input.substr(0, this.input.length - 1);
|
||||
this.requestRender();
|
||||
case 257: // Enter
|
||||
if (this.runningPID > 0) return;
|
||||
if (this.runningPID > 0)
|
||||
return;
|
||||
this.backlog.push("> " + this.input);
|
||||
var command = this.input;
|
||||
this.input = "";
|
||||
@@ -145,7 +148,7 @@ class Terminal implements Process {
|
||||
return;
|
||||
}
|
||||
|
||||
this.runningPID = ProcessManager.run(ps,{
|
||||
this.runningPID = ProcessManager.run(ps, {
|
||||
args: commandArgs,
|
||||
onWrite: (s:String) -> {
|
||||
if (s == "") {
|
||||
@@ -159,7 +162,7 @@ class Terminal implements Process {
|
||||
}
|
||||
|
||||
for (line in s.split("\n")) {
|
||||
if (line == ""){
|
||||
if (line == "") {
|
||||
this.backlog.push("");
|
||||
} else {
|
||||
this.backlog[this.backlog.length - 1] += s;
|
||||
@@ -170,7 +173,7 @@ class Terminal implements Process {
|
||||
this.backlog.shift();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.requestRender();
|
||||
},
|
||||
onExit: (success:Bool) -> {
|
||||
@@ -205,7 +208,7 @@ class Terminal implements Process {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Type.createInstance(bin.c,[]);
|
||||
return Type.createInstance(bin.c, []);
|
||||
}
|
||||
|
||||
private function moveCursorToInput() {
|
||||
|
||||
@@ -6,32 +6,32 @@ using tink.CoreApi;
|
||||
|
||||
class Turtle extends CLIAppBase {
|
||||
public function new() {
|
||||
registerSyncSubcommand("forward", (args)->{
|
||||
registerSyncSubcommand("forward", (args) -> {
|
||||
return perform(kernel.turtle.Turtle.instance.forward());
|
||||
});
|
||||
|
||||
registerSyncSubcommand("back", (args)->{
|
||||
registerSyncSubcommand("back", (args) -> {
|
||||
return perform(kernel.turtle.Turtle.instance.back());
|
||||
});
|
||||
|
||||
registerSyncSubcommand("left", (args)->{
|
||||
registerSyncSubcommand("left", (args) -> {
|
||||
return perform(kernel.turtle.Turtle.instance.turnLeft());
|
||||
});
|
||||
|
||||
registerSyncSubcommand("right", (args)->{
|
||||
registerSyncSubcommand("right", (args) -> {
|
||||
return perform(kernel.turtle.Turtle.instance.turnRight());
|
||||
});
|
||||
|
||||
registerSyncSubcommand("up", (args)->{
|
||||
registerSyncSubcommand("up", (args) -> {
|
||||
return perform(kernel.turtle.Turtle.instance.up());
|
||||
});
|
||||
|
||||
registerSyncSubcommand("down", (args)->{
|
||||
registerSyncSubcommand("down", (args) -> {
|
||||
return perform(kernel.turtle.Turtle.instance.down());
|
||||
});
|
||||
}
|
||||
|
||||
private function perform(outcome: Outcome<Noise,String>): Bool {
|
||||
private function perform(outcome:Outcome<Noise, String>):Bool {
|
||||
switch outcome {
|
||||
case Success(_):
|
||||
return true;
|
||||
@@ -40,5 +40,4 @@ class Turtle extends CLIAppBase {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,51 +8,51 @@ import lib.exporter.Import;
|
||||
import lib.CLIAppBase;
|
||||
|
||||
class Res extends CLIAppBase {
|
||||
public function new() {
|
||||
registerAsyncSubcommand("get", (args)->{
|
||||
var url = args[0];
|
||||
public function new() {
|
||||
registerAsyncSubcommand("get", (args) -> {
|
||||
var url = args[0];
|
||||
|
||||
return Import.get(url).map((res)->{
|
||||
switch (res){
|
||||
case Success(data):
|
||||
handle.writeLine(Std.string(data));
|
||||
case Failure(err):
|
||||
handle.writeLine("Error: ");
|
||||
handle.writeLine(Std.string(err));
|
||||
}
|
||||
return true;
|
||||
});
|
||||
},"<url>");
|
||||
return Import.get(url).map((res) -> {
|
||||
switch (res) {
|
||||
case Success(data):
|
||||
handle.writeLine(Std.string(data));
|
||||
case Failure(err):
|
||||
handle.writeLine("Error: ");
|
||||
handle.writeLine(Std.string(err));
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}, "<url>");
|
||||
|
||||
registerAsyncSubcommand("register",(args)->{
|
||||
var srv: Null<ResManager> = ServiceManager.get("resmgr");
|
||||
registerAsyncSubcommand("register", (args) -> {
|
||||
var srv:Null<ResManager> = ServiceManager.get("resmgr");
|
||||
|
||||
var addr = args[0];
|
||||
var name = args[1];
|
||||
var addr = args[0];
|
||||
var name = args[1];
|
||||
|
||||
if (srv == null) {
|
||||
handle.writeLine("Error: resmgr not found");
|
||||
return false;
|
||||
}
|
||||
if (srv == null) {
|
||||
handle.writeLine("Error: resmgr not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
var perf: kernel.peripherals.Redstone = Peripheral.getRedstone(addr);
|
||||
var perf:kernel.peripherals.Redstone = Peripheral.getRedstone(addr);
|
||||
|
||||
if (perf == null) {
|
||||
handle.writeLine("Error: peripheral not found");
|
||||
return false;
|
||||
}
|
||||
if (perf == null) {
|
||||
handle.writeLine("Error: peripheral not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
return srv.register(name,new Export(perf)).map((res)->{
|
||||
switch (res){
|
||||
case Success(_):
|
||||
handle.writeLine("Success");
|
||||
return true;
|
||||
case Failure(err):
|
||||
handle.writeLine("Error: ");
|
||||
handle.writeLine(Std.string(err));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},"<addr> <name>");
|
||||
}
|
||||
}
|
||||
return srv.register(name, new Export(perf)).map((res) -> {
|
||||
switch (res) {
|
||||
case Success(_):
|
||||
handle.writeLine("Success");
|
||||
return true;
|
||||
case Failure(err):
|
||||
handle.writeLine("Error: ");
|
||||
handle.writeLine(Std.string(err));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}, "<addr> <name>");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,78 +14,76 @@ import kernel.net.Package.GenericPackage;
|
||||
using tink.CoreApi;
|
||||
|
||||
class ResManager implements Process {
|
||||
private var handle:ProcessHandle;
|
||||
private var exports:Map<String,Export> = [];
|
||||
private var handle:ProcessHandle;
|
||||
private var exports:Map<String, Export> = [];
|
||||
|
||||
public function new() {}
|
||||
public function new() {}
|
||||
|
||||
public function run(handle:ProcessHandle) {
|
||||
this.handle = handle;
|
||||
Net.registerProto("res",handlePackage);
|
||||
load();
|
||||
}
|
||||
public function run(handle:ProcessHandle) {
|
||||
this.handle = handle;
|
||||
Net.registerProto("res", handlePackage);
|
||||
load();
|
||||
}
|
||||
|
||||
public function register(id: String, export: Export): Promise<Noise>{
|
||||
if (exports.exists(id)){
|
||||
return Promise.reject(new Error("Ressource already exists: " + id));
|
||||
}
|
||||
public function register(id:String, export:Export):Promise<Noise> {
|
||||
if (exports.exists(id)) {
|
||||
return Promise.reject(new Error("Ressource already exists: " + id));
|
||||
}
|
||||
|
||||
return registerName(id).next((success)->{
|
||||
exports.set(id,export);
|
||||
persist();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
return registerName(id).next((success) -> {
|
||||
exports.set(id, export);
|
||||
persist();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
private function handlePackage(pack: GenericPackage){
|
||||
var requestPack: Package<Request> = cast pack;
|
||||
var id = requestPack.data.id;
|
||||
private function handlePackage(pack:GenericPackage) {
|
||||
var requestPack:Package<Request> = cast pack;
|
||||
var id = requestPack.data.id;
|
||||
|
||||
if (!exports.exists(id)){
|
||||
requestPack.respond(lib.exporter.Response.NotFound);
|
||||
return;
|
||||
}
|
||||
if (!exports.exists(id)) {
|
||||
requestPack.respond(lib.exporter.Response.NotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
var export = exports.get(id);
|
||||
var response = export.handleRequest(requestPack.data);
|
||||
var export = exports.get(id);
|
||||
var response = export.handleRequest(requestPack.data);
|
||||
|
||||
requestPack.respond(response);
|
||||
}
|
||||
requestPack.respond(response);
|
||||
}
|
||||
|
||||
private function registerName(id: String){
|
||||
return RessourceNames.register(id, Net.networkID);
|
||||
}
|
||||
private function registerName(id:String) {
|
||||
return RessourceNames.register(id, Net.networkID);
|
||||
}
|
||||
|
||||
private function persist(){
|
||||
var store = new KVStore("export");
|
||||
private function persist() {
|
||||
var store = new KVStore("export");
|
||||
|
||||
var saveExports: Array<{name: String, addr: String, type: String}> =
|
||||
[for (k => v in this.exports) {name: k, addr: v.getAddr(), type: v.getType()}];
|
||||
var saveExports:Array<{name:String, addr:String, type:String}> = [for (k => v in this.exports) {name: k, addr: v.getAddr(), type: v.getType()}];
|
||||
|
||||
store.set("exports",saveExports);
|
||||
store.set("exports", saveExports);
|
||||
|
||||
store.save();
|
||||
}
|
||||
store.save();
|
||||
}
|
||||
|
||||
private function load(){
|
||||
var store = new KVStore("export");
|
||||
private function load() {
|
||||
var store = new KVStore("export");
|
||||
|
||||
var savedExports: Array<{name: String, addr: String, type: String}> = store.get("exports",[]);
|
||||
var savedExports:Array<{name:String, addr:String, type:String}> = store.get("exports", []);
|
||||
|
||||
for (export in savedExports){
|
||||
var perph = Peripheral.getFromType(export.addr,export.type);
|
||||
for (export in savedExports) {
|
||||
var perph = Peripheral.getFromType(export.addr, export.type);
|
||||
|
||||
if (perph == null){
|
||||
handle.writeLine('Could not load export: ${export.name} on ${export.addr}');
|
||||
continue;
|
||||
}
|
||||
if (perph == null) {
|
||||
handle.writeLine('Could not load export: ${export.name} on ${export.addr}');
|
||||
continue;
|
||||
}
|
||||
|
||||
// I dont know if cast is the best way to do this
|
||||
// But since we know that this is a IExportable we can do this (I think)
|
||||
exports.set(export.name, new Export(cast perph));
|
||||
// I dont know if cast is the best way to do this
|
||||
// But since we know that this is a IExportable we can do this (I think)
|
||||
exports.set(export.name, new Export(cast perph));
|
||||
|
||||
handle.writeLine('Loaded export: ${export.name} on ${export.addr}');
|
||||
}
|
||||
|
||||
}
|
||||
handle.writeLine('Loaded export: ${export.name} on ${export.addr}');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,46 +9,51 @@ import kernel.ps.ProcessHandle;
|
||||
import kernel.ps.Process;
|
||||
|
||||
class PFClient implements Process {
|
||||
private var handle:ProcessHandle;
|
||||
private var handle:ProcessHandle;
|
||||
|
||||
private var ctx: WindowContext;
|
||||
private var requestRender:Void -> Void;
|
||||
private var root:RootElement;
|
||||
private var ctx:WindowContext;
|
||||
private var requestRender:Void->Void;
|
||||
private var root:RootElement;
|
||||
|
||||
public function new() {}
|
||||
public function new() {}
|
||||
|
||||
public function run(handle:ProcessHandle) {
|
||||
this.handle = handle;
|
||||
this.handle = handle;
|
||||
|
||||
var stateless = handle.createStatelessWindowContext();
|
||||
this.ctx = stateless.ctx;
|
||||
this.requestRender = stateless.requestRender;
|
||||
var stateless = handle.createStatelessWindowContext();
|
||||
this.ctx = stateless.ctx;
|
||||
this.requestRender = stateless.requestRender;
|
||||
|
||||
stateless.setRenderFunc(this.render);
|
||||
stateless.setRenderFunc(this.render);
|
||||
|
||||
this.root = new RootElement();
|
||||
this.root.setTitle("Pathfinder");
|
||||
this.root = new RootElement();
|
||||
this.root.setTitle("Pathfinder");
|
||||
|
||||
this.ctx.delegateEvents(this.root);
|
||||
this.ctx.delegateEvents(this.root);
|
||||
|
||||
this.requestRender();
|
||||
}
|
||||
this.requestRender();
|
||||
}
|
||||
|
||||
private function render() {
|
||||
var acc = kernel.gps.GPS.getAccuracy();
|
||||
var pos: Pos3 = kernel.gps.GPS.getPosition() ?? {x: 0, y: 0, z: 0};
|
||||
private function render() {
|
||||
var acc = kernel.gps.GPS.getAccuracy();
|
||||
var pos:Pos3 = kernel.gps.GPS.getPosition() ?? {x: 0, y: 0, z: 0};
|
||||
|
||||
var childre: Array<UIElement> = [
|
||||
new TextElement('Acc: ${acc}'),
|
||||
new TextElement('Pos: X:${pos.x} Y:${pos.y} Z:${pos.z}'),
|
||||
new TextElement('UPDATE', { style: {bgColor: Gray}, uiEvents: {onClick: () -> {
|
||||
kernel.gps.GPS.locate().handle((pos) ->{
|
||||
this.requestRender();
|
||||
});
|
||||
}}}),
|
||||
];
|
||||
var childre:Array<UIElement> = [
|
||||
new TextElement('Acc: ${acc}'),
|
||||
new TextElement('Pos: X:${pos.x} Y:${pos.y} Z:${pos.z}'),
|
||||
new TextElement('UPDATE', {
|
||||
style: {bgColor: Gray},
|
||||
uiEvents: {
|
||||
onClick: () -> {
|
||||
kernel.gps.GPS.locate().handle((pos) -> {
|
||||
this.requestRender();
|
||||
});
|
||||
}
|
||||
}
|
||||
}),
|
||||
];
|
||||
|
||||
this.root.setChildren(childre);
|
||||
this.root.render(ctx.getSize()).renderToContext(ctx);
|
||||
}
|
||||
this.root.setChildren(childre);
|
||||
this.root.render(ctx.getSize()).renderToContext(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,8 +86,8 @@ class SiteRessourceController implements Process {
|
||||
return ressources.get(name);
|
||||
}
|
||||
|
||||
private inline function list():Array<String> {
|
||||
return [ for (k in ressources.keys()) k];
|
||||
private inline function list():Array<String> {
|
||||
return [for (k in ressources.keys()) k];
|
||||
}
|
||||
|
||||
private function load() {
|
||||
|
||||
Reference in New Issue
Block a user