68 lines
1.8 KiB
Haxe
68 lines
1.8 KiB
Haxe
package bin;
|
|
|
|
import lib.exporter.Request;
|
|
import kernel.ps.ProcessHandle;
|
|
import lib.RessourceNames;
|
|
import lib.exporter.Export;
|
|
import kernel.ps.Process;
|
|
import kernel.log.Log;
|
|
import kernel.net.Package;
|
|
import kernel.net.Net;
|
|
import kernel.net.Package.GenericPackage;
|
|
|
|
using tink.CoreApi;
|
|
|
|
class ResManager implements Process {
|
|
private var handle:ProcessHandle;
|
|
private final exports:Map<String,Export> = [];
|
|
|
|
public function new() {}
|
|
|
|
public function run(handle:ProcessHandle) {
|
|
this.handle = handle;
|
|
Net.instance.registerProto("res",handlePackage);
|
|
}
|
|
|
|
public function register(id: String, export: Export): Future<Bool>{
|
|
if (exports.exists(id)){
|
|
handle.writeLine("Ressource already exists: " + id);
|
|
return Future.sync(false);
|
|
}
|
|
|
|
return registerName(id).map((success)->{
|
|
if (success){
|
|
exports.set(id,export);
|
|
}
|
|
return success;
|
|
});
|
|
}
|
|
|
|
private function handlePackage(pack: GenericPackage){
|
|
Log.debug("Handling ressource request" + pack);
|
|
var requestPack: Package<Request> = cast pack;
|
|
var id = requestPack.data.id;
|
|
|
|
if (!exports.exists(id)){
|
|
requestPack.respond(lib.exporter.Response.NotFound);
|
|
return;
|
|
}
|
|
|
|
var export = exports.get(id);
|
|
var response = export.handleRequest(requestPack.data);
|
|
|
|
requestPack.respond(response);
|
|
}
|
|
|
|
private function registerName(id: String){
|
|
return RessourceNames.register(id, Net.instance.networkID).map((res)->{
|
|
switch (res) {
|
|
case Success(data):
|
|
return data;
|
|
case Failure(err):
|
|
Log.error("Failed to register ressource: " + id + " " + err);
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
}
|