made SRSC a rpc thing
This commit is contained in:
@@ -1,19 +1,20 @@
|
||||
package bin.srsc;
|
||||
|
||||
import macros.rpc.RPC;
|
||||
import lib.KVStore;
|
||||
import bin.srsc.PackageTypes;
|
||||
import kernel.net.Package;
|
||||
import kernel.ps.ProcessHandle;
|
||||
import kernel.ps.Process;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
/**
|
||||
The SiteRessourceController is responsible for the management of ressources on the site.
|
||||
It makes sure that ressources are have a unique id and that they are not duplicated.
|
||||
It also keeps track of the responsible NetID for each ressource. Kinda like a DNS.
|
||||
**/
|
||||
@:build(macros.rpc.RPC.buildRPC())
|
||||
class SiteRessourceController implements Process {
|
||||
public static inline final SITE_CONTROLLER_RESSOURCE_MANAGER_PROTO:String = "srsc";
|
||||
|
||||
private var handle:ProcessHandle;
|
||||
private var ressources:Map<String, NetworkID>;
|
||||
|
||||
@@ -24,47 +25,10 @@ class SiteRessourceController implements Process {
|
||||
|
||||
load();
|
||||
|
||||
// Register proto
|
||||
kernel.net.Net.registerProto(SITE_CONTROLLER_RESSOURCE_MANAGER_PROTO, this.handleMsg);
|
||||
}
|
||||
|
||||
private function handleMsg(pkg:GenericPackage) {
|
||||
/*
|
||||
There are 3 types of messages:
|
||||
- Register a new ressource name
|
||||
- Unregister a ressource name
|
||||
- Get the responsible NetID for a ressource name
|
||||
*/
|
||||
|
||||
switch (pkg.data.type) {
|
||||
case "register":
|
||||
pkg.respond(handleRegister(cast pkg.data));
|
||||
case "unregister":
|
||||
pkg.respond(handleUnregister(cast pkg.data));
|
||||
case "get":
|
||||
pkg.respond(handleGet(cast pkg.data));
|
||||
case "list":
|
||||
pkg.respond(list());
|
||||
default:
|
||||
handle.writeLine("Unknown message type: " + pkg.data.type);
|
||||
}
|
||||
}
|
||||
|
||||
private function handleGet(data:GetRequest):GetResponse {
|
||||
var res = get(data.name);
|
||||
return {success: res != null, netID: res};
|
||||
}
|
||||
|
||||
private function handleRegister(data:RegisterRequest):RegisterResponse {
|
||||
var res = register(data.name, data.netID);
|
||||
return {success: res};
|
||||
}
|
||||
|
||||
private function handleUnregister(data:UnregisterRequest):UnregisterResponse {
|
||||
unregister(data.name);
|
||||
return {success: true};
|
||||
RPC.generateRPCPackageHandle();
|
||||
}
|
||||
|
||||
@rpc
|
||||
public function register(name:String, netID:NetworkID):Bool {
|
||||
if (ressources.exists(name) && ressources.get(name) != netID) {
|
||||
return false;
|
||||
@@ -75,18 +39,21 @@ class SiteRessourceController implements Process {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function unregister(name:String) {
|
||||
@rpc
|
||||
public function unregister(name:String):Void {
|
||||
if (ressources.exists(name)) {
|
||||
ressources.remove(name);
|
||||
}
|
||||
save();
|
||||
}
|
||||
|
||||
@rpc
|
||||
public function get(name:String):Null<NetworkID> {
|
||||
return ressources.get(name);
|
||||
}
|
||||
|
||||
private inline function list():Array<String> {
|
||||
@rpc
|
||||
public function list():Array<String> {
|
||||
return [for (k in ressources.keys()) k];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user