44 lines
1.3 KiB
Haxe
44 lines
1.3 KiB
Haxe
package ru.m.control;
|
|
|
|
import haxework.signal.Signal;
|
|
import ru.m.control.IControlBus;
|
|
|
|
class ControlBus implements IControlBus {
|
|
|
|
private static inline var TAG = "control";
|
|
|
|
public var devices(default, null):Array<IControlDevice>;
|
|
|
|
public var signal(default, null):Signal3<DeviceType, DeviceAction, Bool>;
|
|
public var devicesSignal(default, null):Signal<Array<IControlDevice>>;
|
|
|
|
private var connections:Map<DeviceType, DeviceAction->Bool->Void>;
|
|
|
|
public function new() {
|
|
devices = [];
|
|
signal = new Signal3();
|
|
devicesSignal = new Signal();
|
|
connections = new Map();
|
|
}
|
|
|
|
public function connect(device:IControlDevice):Void {
|
|
var connector = function(action:DeviceAction, on:Bool):Void {
|
|
//L.d("TAG", '${device.type}, ${action}, ${on}');
|
|
signal.emit(device.type, action, on);
|
|
}
|
|
connections.set(device.type, connector);
|
|
device.signal.connect(connector);
|
|
devices.push(device);
|
|
devicesSignal.emit(devices);
|
|
}
|
|
|
|
public function disconnect(device:IControlDevice):Void {
|
|
if (connections.exists(device.type)) {
|
|
device.signal.disconnect(connections.get(device.type));
|
|
connections.remove(device.type);
|
|
devices.remove(device);
|
|
devicesSignal.emit(devices);
|
|
}
|
|
}
|
|
}
|