made peripherals a static class

This commit is contained in:
Djeeberjr 2023-07-27 20:38:23 +02:00
parent a93ee1cddf
commit 9deea0ee98
14 changed files with 42 additions and 52 deletions

View File

@ -54,10 +54,10 @@ Also peripherals can be made accessible via the network. More on that later.
## Usage ## Usage
```haxe ```haxe
var back = Peripheral.instance.getRedstone("back"); var back = Peripheral.getRedstone("back");
back.setOutput(true); back.setOutput(true);
var drive Peripheral.instance.getDrive("drive_0"); var drive Peripheral.getDrive("drive_0");
drive.eject(); drive.eject();
``` ```

View File

@ -9,7 +9,7 @@ using Lambda;
class Disk extends CLIAppBase { class Disk extends CLIAppBase {
public function new() { public function new() {
registerSyncSubcommand("ls", (args)->{ registerSyncSubcommand("ls", (args)->{
Peripheral.instance.getAllDrives().foreach(drive -> { Peripheral.getAllDrives().foreach(drive -> {
var addr = drive.getAddr(); var addr = drive.getAddr();
var label = drive.getDiskLabel(); var label = drive.getDiskLabel();
var id = drive.getDiskID(); var id = drive.getDiskID();
@ -53,7 +53,7 @@ class Disk extends CLIAppBase {
} }
var driveAddr = args[0]; var driveAddr = args[0];
var drive = Peripheral.instance.getDrive(driveAddr); var drive = Peripheral.getDrive(driveAddr);
if (drive == null){ if (drive == null){
handle.writeLine("Drive not found: " + driveAddr); handle.writeLine("Drive not found: " + driveAddr);
@ -76,7 +76,7 @@ class Disk extends CLIAppBase {
} }
var driveAddr = args[0]; var driveAddr = args[0];
var drive = Peripheral.instance.getDrive(driveAddr); var drive = Peripheral.getDrive(driveAddr);
var label:String = args[1]; var label:String = args[1];
if (drive == null){ if (drive == null){
@ -102,7 +102,7 @@ class Disk extends CLIAppBase {
} }
private function audioDiskPlayPause(driveAddr: String, play: Bool): Bool { private function audioDiskPlayPause(driveAddr: String, play: Bool): Bool {
var drive = Peripheral.instance.getDrive(driveAddr); var drive = Peripheral.getDrive(driveAddr);
if (drive == null){ if (drive == null){
handle.writeLine("Drive not found: " + driveAddr); handle.writeLine("Drive not found: " + driveAddr);

View File

@ -19,7 +19,7 @@ class Net extends CLIAppBase {
}); });
registerSyncSubcommand("iface", (args)->{ registerSyncSubcommand("iface", (args)->{
var modems = Peripheral.instance.getAllModems(); var modems = Peripheral.getAllModems();
for (modem in modems) { for (modem in modems) {
handle.writeLine(modem.name()); handle.writeLine(modem.name());

View File

@ -8,7 +8,7 @@ class Perf extends CLIAppBase {
registerSyncSubcommand("inspect",(args)->{ registerSyncSubcommand("inspect",(args)->{
if (args.length < 1) return false; if (args.length < 1) return false;
var result = Peripheral.instance.inspect(args[0]); var result = Peripheral.inspect(args[0]);
if (result == null){ if (result == null){
handle.writeLine("No peripheral found on side "+args[0]); handle.writeLine("No peripheral found on side "+args[0]);
@ -29,8 +29,8 @@ class Perf extends CLIAppBase {
},"<side>"); },"<side>");
registerSyncSubcommand("list",(args)->{ registerSyncSubcommand("list",(args)->{
for (addr in Peripheral.instance.getAllAddresses()){ for (addr in Peripheral.getAllAddresses()){
handle.writeLine('$addr => ${Peripheral.instance.getTypes(addr).join(", ")}'); handle.writeLine('$addr => ${Peripheral.getTypes(addr).join(", ")}');
} }
return true; return true;
}); });

View File

@ -8,17 +8,17 @@ using tink.CoreApi;
class Redstone extends CLIAppBase{ class Redstone extends CLIAppBase{
public function new() { public function new() {
registerSyncSubcommand("on", (args)-> { registerSyncSubcommand("on", (args)-> {
Peripheral.instance.getRedstone(args[0]).setOutput(true); Peripheral.getRedstone(args[0]).setOutput(true);
return true; return true;
},"<side>"); },"<side>");
registerSyncSubcommand("off", (args)-> { registerSyncSubcommand("off", (args)-> {
Peripheral.instance.getRedstone(args[0]).setOutput(false); Peripheral.getRedstone(args[0]).setOutput(false);
return true; return true;
},"<side>"); },"<side>");
registerSyncSubcommand("get", (args)-> { registerSyncSubcommand("get", (args)-> {
var value = Peripheral.instance.getRedstone(args[0]).getAnalogInput(); var value = Peripheral.getRedstone(args[0]).getAnalogInput();
handle.write("Analog input: " + value); handle.write("Analog input: " + value);
return true; return true;
},"<side>"); },"<side>");

View File

@ -35,7 +35,7 @@ class Res extends CLIAppBase {
return false; return false;
} }
var perf: kernel.peripherals.Redstone = Peripheral.instance.getRedstone(addr); var perf: kernel.peripherals.Redstone = Peripheral.getRedstone(addr);
if (perf == null) { if (perf == null) {
handle.writeLine("Error: peripheral not found"); handle.writeLine("Error: peripheral not found");

View File

@ -73,7 +73,7 @@ class ResManager implements Process {
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){ for (export in savedExports){
var perph = Peripheral.instance.getFromType(export.addr,export.type); var perph = Peripheral.getFromType(export.addr,export.type);
if (perph == null){ if (perph == null){
handle.writeLine('Could not load export: ${export.name} on ${export.addr}'); handle.writeLine('Could not load export: ${export.name} on ${export.addr}');

View File

@ -26,7 +26,6 @@ class Init {
// Init singeltons here because haxe is confused about the order to create them. // Init singeltons here because haxe is confused about the order to create them.
Log.init(); Log.init();
KernelEvents.init(); KernelEvents.init();
Peripheral.instance = new Peripheral();
WindowManager.instance = new WindowManager(); WindowManager.instance = new WindowManager();
MainTerm.instance = new MainTerm(); MainTerm.instance = new MainTerm();

View File

@ -149,7 +149,7 @@ class KernelEvents {
public static function shutdown() { public static function shutdown() {
// clearing screens // clearing screens
for (screen in Peripheral.instance.getAllScreens()) { for (screen in Peripheral.getAllScreens()) {
screen.reset(); screen.reset();
} }

View File

@ -32,7 +32,7 @@ class Net {
@:allow(kernel.Init) @:allow(kernel.Init)
private function new() { private function new() {
this.interfaces = [for (e in Peripheral.instance.getAllModems()) e ]; // TODO: is this the way to do it? this.interfaces = [for (e in Peripheral.getAllModems()) e ]; // TODO: is this the way to do it?
this.interfaces.push(Loopback.instance); this.interfaces.push(Loopback.instance);
for (interf in interfaces){ for (interf in interfaces){
@ -280,7 +280,7 @@ class Net {
data: null, data: null,
}; };
for (modem in Peripheral.instance.getAllModems()) { for (modem in Peripheral.getAllModems()) {
if (!modem.isWireless()) continue; if (!modem.isWireless()) continue;
modem.send(Net.BRODCAST_PORT, Net.instance.networkID, pack); modem.send(Net.BRODCAST_PORT, Net.instance.networkID, pack);
} }

View File

@ -64,7 +64,7 @@ class Routing {
private function brodcastRoutingTable() { private function brodcastRoutingTable() {
var pack = newRoutDiscoverPackage(); var pack = newRoutDiscoverPackage();
for (modem in Peripheral.instance.getAllModems()) { for (modem in Peripheral.getAllModems()) {
modem.send(Net.BRODCAST_PORT, Net.instance.networkID, pack); modem.send(Net.BRODCAST_PORT, Net.instance.networkID, pack);
} }
} }

View File

@ -11,24 +11,15 @@ using tink.CoreApi;
Class responseable for retrieving peripherals. Class responseable for retrieving peripherals.
**/ **/
class Peripheral { class Peripheral {
/** public static function getAllAddresses(): Array<String> {
Depends on: KernelEvents
**/
public static var instance:Peripheral;
@:allow(kernel.Init)
private function new() {
}
public function getAllAddresses(): Array<String> {
return cc.Peripheral.getNames().toArray(); return cc.Peripheral.getNames().toArray();
} }
public function isPresent(addr: String): Bool { public static function isPresent(addr: String): Bool {
return cc.Peripheral.isPresent(addr); return cc.Peripheral.isPresent(addr);
} }
public function getTypes(addr: String): Array<String> { public static function getTypes(addr: String): Array<String> {
if (!cc.Peripheral.isPresent(addr)) { if (!cc.Peripheral.isPresent(addr)) {
return []; return [];
} }
@ -36,11 +27,11 @@ class Peripheral {
return cc.Peripheral.getType(addr).toArray(); return cc.Peripheral.getType(addr).toArray();
} }
public function findAddrByType(type: String): Array<String> { public static function findAddrByType(type: String): Array<String> {
return getAllAddresses().filter(addr -> getTypes(addr).contains(type)); return getAllAddresses().filter(addr -> getTypes(addr).contains(type));
} }
private function safeGetAddr(addr: String, type: String): Null<String> { private static function safeGetAddr(addr: String, type: String): Null<String> {
if (!isPresent(addr)) { if (!isPresent(addr)) {
return null; return null;
} }
@ -53,7 +44,7 @@ class Peripheral {
return addr; return addr;
} }
public function inspect(addr: String): Null<{ types: Array<String>, methods: Array<String>}> { public static function inspect(addr: String): Null<{ types: Array<String>, methods: Array<String>}> {
if (!isPresent(addr)) { if (!isPresent(addr)) {
return null; return null;
} }
@ -76,7 +67,7 @@ class Peripheral {
Cast peripheral to a specific type. Cast peripheral to a specific type.
This is a temporary solution, maybe forever. This is a temporary solution, maybe forever.
**/ **/
public function getFromType(addr: String, type: String): Null<IPeripheral> { public static function getFromType(addr: String, type: String): Null<IPeripheral> {
switch (type){ switch (type){
case Computer.TYPE_NAME: case Computer.TYPE_NAME:
return getComputer(addr); return getComputer(addr);
@ -97,69 +88,69 @@ class Peripheral {
return null; return null;
} }
public function getScreen(addr: String): Null<Screen> { public static function getScreen(addr: String): Null<Screen> {
var addr = safeGetAddr(addr, Screen.TYPE_NAME); var addr = safeGetAddr(addr, Screen.TYPE_NAME);
if (addr == null) return null; if (addr == null) return null;
return new Screen(addr); return new Screen(addr);
} }
public function getAllScreens(): Array<Screen> { public static function getAllScreens(): Array<Screen> {
return [ for (addr in findAddrByType(Screen.TYPE_NAME)) new Screen(addr)]; return [ for (addr in findAddrByType(Screen.TYPE_NAME)) new Screen(addr)];
} }
public function getModem(addr: String): Null<Modem> { public static function getModem(addr: String): Null<Modem> {
var addr = safeGetAddr(addr, Modem.TYPE_NAME); var addr = safeGetAddr(addr, Modem.TYPE_NAME);
if (addr == null) return null; if (addr == null) return null;
return new Modem(addr); return new Modem(addr);
} }
public function getAllModems(): Array<Modem> { public static function getAllModems(): Array<Modem> {
return [ for (addr in findAddrByType(Modem.TYPE_NAME)) new Modem(addr)]; return [ for (addr in findAddrByType(Modem.TYPE_NAME)) new Modem(addr)];
} }
public function getDrive(addr: String): Null<Drive> { public static function getDrive(addr: String): Null<Drive> {
var addr = safeGetAddr(addr, Drive.TYPE_NAME); var addr = safeGetAddr(addr, Drive.TYPE_NAME);
if (addr == null) return null; if (addr == null) return null;
return new Drive(addr); return new Drive(addr);
} }
public function getAllDrives(): Array<Drive> { public static function getAllDrives(): Array<Drive> {
return [ for (addr in findAddrByType(Drive.TYPE_NAME)) new Drive(addr)]; return [ for (addr in findAddrByType(Drive.TYPE_NAME)) new Drive(addr)];
} }
public function getRedstone(side: String): Redstone { public static function getRedstone(side: String): Redstone {
// TODO: maybe handle restone differently to not duplicate event listeners // TODO: maybe handle restone differently to not duplicate event listeners
return new Redstone(side); return new Redstone(side);
} }
public function getPrinter(addr: String):Null<Printer> { public static function getPrinter(addr: String):Null<Printer> {
var addr = safeGetAddr(addr, Printer.TYPE_NAME); var addr = safeGetAddr(addr, Printer.TYPE_NAME);
if (addr == null) return null; if (addr == null) return null;
return new Printer(addr); return new Printer(addr);
} }
public function getAllPrinters(): Array<Printer> { public static function getAllPrinters(): Array<Printer> {
return [ for (addr in findAddrByType(Printer.TYPE_NAME)) new Printer(addr)]; return [ for (addr in findAddrByType(Printer.TYPE_NAME)) new Printer(addr)];
} }
public function getEnergyStorage(addr: String): Null<EnergyStorage> { public static function getEnergyStorage(addr: String): Null<EnergyStorage> {
var addr = safeGetAddr(addr, EnergyStorage.TYPE_NAME); var addr = safeGetAddr(addr, EnergyStorage.TYPE_NAME);
if (addr == null) return null; if (addr == null) return null;
return new EnergyStorage(addr); return new EnergyStorage(addr);
} }
public function getAllEnergyStorages(): Array<EnergyStorage> { public static function getAllEnergyStorages(): Array<EnergyStorage> {
return [ for (addr in findAddrByType(EnergyStorage.TYPE_NAME)) new EnergyStorage(addr)]; return [ for (addr in findAddrByType(EnergyStorage.TYPE_NAME)) new EnergyStorage(addr)];
} }
public function getComputer(addr: String): Null<Computer> { public static function getComputer(addr: String): Null<Computer> {
var addr = safeGetAddr(addr, Computer.TYPE_NAME); var addr = safeGetAddr(addr, Computer.TYPE_NAME);
if (addr == null) return null; if (addr == null) return null;
return new Computer(addr); return new Computer(addr);
} }
public function getAllComputers(): Array<Computer> { public static function getAllComputers(): Array<Computer> {
return [ for (addr in findAddrByType(Computer.TYPE_NAME)) new Computer(addr)]; return [ for (addr in findAddrByType(Computer.TYPE_NAME)) new Computer(addr)];
} }
} }

View File

@ -134,7 +134,7 @@ class WindowManager {
} }
public function getOutputs():ReadOnlyArray<String> { public function getOutputs():ReadOnlyArray<String> {
var arr = Peripheral.instance.getAllScreens().map(screen -> return screen.getAddr()); var arr = Peripheral.getAllScreens().map(screen -> return screen.getAddr());
arr.push("main"); arr.push("main");
return arr; return arr;
} }
@ -148,7 +148,7 @@ class WindowManager {
target = MainTerm.instance; target = MainTerm.instance;
currentMainContext = context; currentMainContext = context;
} else { } else {
target = Peripheral.instance.getScreen(output); target = Peripheral.getScreen(output);
if (target == null) { if (target == null) {
// output target not found // output target not found

View File

@ -131,7 +131,7 @@ class HomeContext {
} }
private function cycleOutput() { private function cycleOutput() {
var screenAddr = Peripheral.instance.findAddrByType(Screen.TYPE_NAME); var screenAddr = Peripheral.findAddrByType(Screen.TYPE_NAME);
if (selectedOutputIndex == -1) { if (selectedOutputIndex == -1) {
selectedOutputIndex = 0; selectedOutputIndex = 0;