internal virtual void OnMessage(InsteonMessage message) { switch (message.MessageType) { case InsteonMessageType.Ack: PendingCommandAck(message); break; case InsteonMessageType.OnCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.On); break; case InsteonMessageType.OffCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.Off); break; case InsteonMessageType.FastOnCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.On); OnDeviceStatusChanged(InsteonDeviceStatus.FastOn); break; case InsteonMessageType.FastOffCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.Off); OnDeviceStatusChanged(InsteonDeviceStatus.FastOff); break; case InsteonMessageType.IncrementBeginBroadcast: dimmerDirection = message.Properties[PropertyKey.IncrementDirection] != 0 ? DimmerDirection.Up : DimmerDirection.Down; break; case InsteonMessageType.IncrementEndBroadcast: if (dimmerDirection == DimmerDirection.Up) { OnDeviceStatusChanged(InsteonDeviceStatus.Brighten); } else if (dimmerDirection == DimmerDirection.Down) { OnDeviceStatusChanged(InsteonDeviceStatus.Dim); } break; case InsteonMessageType.SetButtonPressed: OnSetButtonPressed(message); break; default: logger.Warn("Unhandled message type"); break; } }
internal void OnMessage(InsteonMessage message) { // publish message _insteonMessageSubject.OnNext(message); switch (message.MessageType) { case InsteonMessageType.Ack: PendingCommandAck(message); break; case InsteonMessageType.OnCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.On); break; case InsteonMessageType.OffCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.Off); break; case InsteonMessageType.FastOnCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.On); OnDeviceStatusChanged(InsteonDeviceStatus.FastOn); break; case InsteonMessageType.FastOffCleanup: OnDeviceStatusChanged(InsteonDeviceStatus.Off); OnDeviceStatusChanged(InsteonDeviceStatus.FastOff); break; case InsteonMessageType.IncrementBeginBroadcast: dimmerDirection = message.Properties[PropertyKey.IncrementDirection] != 0 ? DimmerDirection.Up : DimmerDirection.Down; break; case InsteonMessageType.IncrementEndBroadcast: if (dimmerDirection == DimmerDirection.Up) { OnDeviceStatusChanged(InsteonDeviceStatus.Brighten); } else if (dimmerDirection == DimmerDirection.Down) { OnDeviceStatusChanged(InsteonDeviceStatus.Dim); } break; case InsteonMessageType.SetButtonPressed: OnSetButtonPressed(message); break; } }
internal void OnMessage(InsteonMessage message) { switch (message.MessageType) { case InsteonMessageType.Ack: var cmd = this.PendingCommandAck(message); if (cmd.HasValue) { // This feels wrong, but I'm not seeing the 'DeviceStatusChanged' as a result of setting the status. // Could probably use some sort of 'map' here to map command to status. switch (cmd.Value) { case InsteonDeviceCommands.On: this.OnDeviceStatusChanged(InsteonDeviceStatus.On); break; case InsteonDeviceCommands.Off: this.OnDeviceStatusChanged(InsteonDeviceStatus.Off); break; } } break; case InsteonMessageType.OnCleanup: this.OnDeviceStatusChanged(InsteonDeviceStatus.On); break; case InsteonMessageType.OffCleanup: this.OnDeviceStatusChanged(InsteonDeviceStatus.Off); break; case InsteonMessageType.FastOnCleanup: this.OnDeviceStatusChanged(InsteonDeviceStatus.On); this.OnDeviceStatusChanged(InsteonDeviceStatus.FastOn); break; case InsteonMessageType.FastOffCleanup: this.OnDeviceStatusChanged(InsteonDeviceStatus.Off); this.OnDeviceStatusChanged(InsteonDeviceStatus.FastOff); break; case InsteonMessageType.IncrementBeginBroadcast: this.dimmerDirection = message.Properties[PropertyKey.IncrementDirection] != 0 ? DimmerDirection.Up : DimmerDirection.Down; break; case InsteonMessageType.IncrementEndBroadcast: if (this.dimmerDirection == DimmerDirection.Up) { this.OnDeviceStatusChanged(InsteonDeviceStatus.Brighten); } else if (this.dimmerDirection == DimmerDirection.Down) { this.OnDeviceStatusChanged(InsteonDeviceStatus.Dim); } break; case InsteonMessageType.SetButtonPressed: this.OnSetButtonPressed(message); break; } }