BIG FORMATING COMMIT

This commit is contained in:
2023-07-30 15:55:22 +02:00
parent 088fce0aaa
commit 91972107eb
103 changed files with 1610 additions and 1585 deletions

View File

@@ -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();
}

View File

@@ -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;
});

View File

@@ -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);
});

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -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;
});
}
}

View File

@@ -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);
}
}
}

View File

@@ -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();
}
}

View File

@@ -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>");
}
}

View File

@@ -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;
});
}
}

View File

@@ -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>");
}
}

View File

@@ -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;
}
}
}

View File

@@ -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() {

View File

@@ -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;
}
}
}

View File

@@ -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>");
}
}

View File

@@ -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}');
}
}
}

View File

@@ -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);
}
}

View File

@@ -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() {