1
0
Fork 0
fgdata/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/PropertyUpdater.nas

94 lines
2.7 KiB
Text
Raw Normal View History

# Generic class to update properties from Emesary for the MFD
#
# In the simplest cases where the Emesary EventParameter for the specified
# Event ID is a hash whose values can be mapped directly to property values,
# it can be used directly. For more complex cases, the handleNotificationEvent
# method should be over-ridden, and should return
# emesary.Transmitter.ReceiptStatus_OK or equivalent ReceiptStatus value.
var PropertyUpdater =
{
PropMap : {
new : func(name, property)
{
var obj = { parents : [ PropertyUpdater.PropMap ] };
obj._name = name;
obj._prop = globals.props.getNode(property, 1);
return obj;
},
getName : func() { return me._name; },
getValue : func() { return me._prop.getValue(); },
},
new : func (device, notificationType, eventID, transmitter = nil) {
var obj = {
parents : [ Interface ],
_device : device,
_notificationType : notificationType,
_transmitter : transmitter,
_recipient : recipient,
_propmaps : {},
};
if (obj._transmitter == nil) obj._transmitter = emesary.GlobalTransmitter;
return obj;
},
addPropMap : func(name, prop) {
me._propmaps[name] = PropertyPublisher.PropMap.new(name, prop);
},
handleNotificationEvent : func(eventParameter) {
var retval = emesary.Transmitter.ReceiptStatus_NotProcessed;
foreach(var name; keys(eventParameters)) {
if (me._propmaps[name] != nil) {
me._propmaps[name].setValue(eventParameters[name])
retval = emesary.Transmitter.ReceiptStatus_OK;
}
}
return retval;
},
RegisterWithEmesary : func(){
if (me._recipient == nil){
me._recipient = emesary.Recipient.new("PropertyUpdater_" ~ me._page.device.designation);
var pfd_obj = me._device;
var controller = me;
me._recipient.Receive = func(notification)
{
if (notification.Device_Id == pfd_obj.device_id
and notification.NotificationType == me._notificationType) {
if (notification.Event_Id == me._eventID
and notification.EventParameter != nil)
{
return me.handleNotificationEvent(notification.EventParameter);
}
}
return emesary.Transmitter.ReceiptStatus_NotProcessed;
};
}
transmitter.Register(me._recipient);
me.transmitter = transmitter;
},
DeRegisterWithEmesary : func(transmitter = nil){
# remove registration from transmitter; but keep the recipient once it is created.
if (me.transmitter != nil)
me.transmitter.DeRegister(me._recipient);
me.transmitter = nil;
},
start : func() {
me.RegisterWithEmesary();
},
stop : func() {
me.DeRegisterWithEmesary();
},
};