cc-haxe/src/kernel/net/Loopback.hx

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