// using System.Diagnostics; // using System.Reactive.Linq; // using InnovEnergy.Lib.Protocols.DBus; // using InnovEnergy.Lib.Protocols.DBus.Protocol; // using InnovEnergy.Lib.Protocols.DBus.Protocol.DataTypes; // using InnovEnergy.Lib.Protocols.DBus.Protocol.Header; // // namespace InnovEnergy.Lib.Victron.VeDBus; // // public class VeDbusService : IDisposable // { // private DBusConnection DbusConnection { get; } // public VeProperties Properties { get; } // // public VeDbusService(Bus bus, String busName, VeProperties properties) // { // DbusConnection = new DBusConnection(bus); // // DbusConnection.IncomingMessages // .Where(m => m.Type == MessageType.MethodCall) // .Do(m => Debug.WriteLine($"Got call from {m.Sender} : {m.Member} {m.ObjectPath}")) // .Select(AnswerMethodCalls) // .Subscribe(DbusConnection.OutgoingMessages.OnNext); // } // // // private Message AnswerMethodCalls(Message msg) // { // if (!msg.ObjectPath.HasValue) // return msg.CreateErrorReply("Unknown ObjectPath"); // // // if (msg.ObjectPath == ObjectPath.Root) // { // return msg.Member switch // { // VeDBusApi.GetValue => msg.CreateMethodReturn(Properties.GetValueOfAllProperties()), // VeDBusApi.GetText => msg.CreateMethodReturn(Properties.GetTextOfAllProperties()), // _ => msg.CreateErrorReply("Unknown Member") // }; // } // // var prop = Properties.Get(msg.ObjectPath.Value); // // if (prop.HasValue) // { // return msg.Member switch // { // VeDBusApi.GetValue => msg.CreateMethodReturn(prop.Value.Value), // VeDBusApi.GetText => msg.CreateMethodReturn(prop.Value.Text), // _ => msg.CreateErrorReply("Unknown Member") // }; // } // // return msg.CreateErrorReply("Unknown ObjectPath"); // } // // public void Dispose() => DbusConnection.Dispose(); // // }