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; public var signal(default, null):Signal3; public var devicesSignal(default, null):Signal>; private var connections:MapBool->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); } } }