55 lines
1.2 KiB
Haxe
55 lines
1.2 KiB
Haxe
package kernel.net;
|
|
|
|
import kernel.log.Log;
|
|
using tink.CoreApi;
|
|
|
|
/**
|
|
Virtual network interface that handles packages to the same id as the sender.
|
|
**/
|
|
class Loopback implements INetworkInterface {
|
|
public static final instance:Loopback = new Loopback();
|
|
|
|
public var onMessage(default, null):Signal<{pack:Package,dist:Null<Float>}>;
|
|
|
|
private final onMessageTrigger: SignalTrigger<{pack:Package,dist:Null<Float>}> = Signal.trigger();
|
|
private var openChans: Array<Int> = [];
|
|
|
|
private function new() {
|
|
this.onMessage = onMessageTrigger.asSignal();
|
|
}
|
|
|
|
public function listen(chan:Int) {
|
|
if (!this.openChans.contains(chan)){
|
|
this.openChans.push(chan);
|
|
}
|
|
}
|
|
|
|
public function close(chan:Int) {
|
|
this.openChans.remove(chan);
|
|
}
|
|
|
|
public function isListening(chan:Int):Bool {
|
|
return this.openChans.contains(chan);
|
|
}
|
|
|
|
public function closeAll() {
|
|
this.openChans = [];
|
|
}
|
|
|
|
public function send(chan:Int, replyChan:Int, payload:Any) {
|
|
if (this.openChans.contains(chan)){
|
|
this.onMessageTrigger.trigger({pack:payload,dist:null});
|
|
}else{
|
|
Log.silly("Loopback got package on non open channel");
|
|
}
|
|
}
|
|
|
|
public function name():String {
|
|
return "loopback";
|
|
}
|
|
|
|
public function getBaseRoutingCost():Int {
|
|
return 0;
|
|
}
|
|
}
|