add new backend types

This commit is contained in:
BlubbFish 2026-08-04 12:26:47 +02:00
parent 2e6f2f464b
commit 759842b528
3 changed files with 61 additions and 5 deletions

View File

@ -1,11 +1,15 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using BlubbFish.Utils.IoT.Events; using BlubbFish.Utils.IoT.Events;
namespace BlubbFish.Utils.IoT.Connector { namespace BlubbFish.Utils.IoT.Connector {
public abstract class ABackend { public abstract class ABackend {
public enum BackendType { public enum BackendType {
Data, Data,
Db,
Storage,
User User
} }
public event BackendMessage MessageIncomming; public event BackendMessage MessageIncomming;
@ -18,20 +22,44 @@ namespace BlubbFish.Utils.IoT.Connector {
public ABackend(Dictionary<String, String> settings) => this.settings = settings; public ABackend(Dictionary<String, String> settings) => this.settings = settings;
public static ABackend GetInstance(Dictionary<String, String> settings) {
if(settings.Count == 0) {
return null;
}
try {
return GetInstance(settings, (BackendType)Enum.Parse(typeof(BackendType), settings["backendtype"]));
} catch(Exception e) {
throw new Exception("Something bad Happend while Loading Connector without type: " + e.Message);
}
}
public static ABackend GetStorageInstance(Dictionary<String, String> settings, List<Type> types) {
if(settings.Count == 0 || types.Count != 1) {
return null;
}
String object_sensor = "BlubbFish.Utils.IoT.Connector.Storage." + settings["type"].ToUpperLower() + "`"+types.Count+"["+ String.Join(",", new List<String>(types.Select(x => "["+x.FullName + "," + x.Assembly.FullName+"]"))) + "], " + "ConnectorStorage" + settings["type"].ToUpperLower();
return LoadInstance(object_sensor, settings, "Storage");
}
public static ABackend GetInstance(Dictionary<String, String> settings, BackendType ty) { public static ABackend GetInstance(Dictionary<String, String> settings, BackendType ty) {
if (settings.Count == 0) { if (settings.Count == 0) {
return null; return null;
} }
String object_sensor = "BlubbFish.Utils.IoT.Connector." + ty.ToString() + "." + settings["type"].ToUpperLower() + ", " + "Connector" + ty.ToString() + settings["type"].ToUpperLower(); String object_sensor = "BlubbFish.Utils.IoT.Connector." + ty.ToString() + "." + settings["type"].ToUpperLower() + ", " + "Connector" + ty.ToString() + settings["type"].ToUpperLower();
return LoadInstance(object_sensor, settings, ty.ToString());
}
public static ABackend LoadInstance(String object_sensor, Dictionary<String, String> settings, String backendtype) {
try { try {
Type t = Type.GetType(object_sensor, true); Type t = Type.GetType(object_sensor, true);
return (ABackend)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>) }).Invoke(new Object[] { settings }); return (ABackend)t.GetConstructor(new Type[] { typeof(Dictionary<String, String>) }).Invoke(new Object[] { settings });
} catch (TypeLoadException) { } catch(TypeLoadException) {
throw new TypeLoadException("Configuration: " + settings["type"] + " is not a " + ty.ToString() + "Backend"); throw new TypeLoadException("Configuration: " + settings["type"] + " is not a " + backendtype + "Backend");
} catch (System.IO.FileNotFoundException) { } catch(System.IO.FileNotFoundException) {
throw new DllNotFoundException("Driver " + object_sensor + " could not load!"); throw new DllNotFoundException("Driver " + object_sensor + " could not load!");
} catch (Exception e) { } catch(Exception e) {
throw new Exception("Something bad Happend while Loading Connectior: "+e.Message); throw new Exception("Something bad Happend while Loading Connector: " + e.Message);
} }
} }

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
namespace BlubbFish.Utils.IoT.Connector {
public abstract class ADbBackend : ABackend {
public ADbBackend(Dictionary<String, String> settings) : base(settings) { }
public abstract T LoadSingleRow<T>(String query, Dictionary<String, Object> param) where T : new();
public abstract List<T> LoadMultiRows<T>(String query, Dictionary<String, Object> param) where T : new();
public abstract Int32 Insert(String query, Dictionary<String, Object> param);
}
}

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
namespace BlubbFish.Utils.IoT.Connector {
public abstract class AStorageBackend<O> : ABackend {
public AStorageBackend(Dictionary<String, String> settings) : base(settings) { }
public abstract Dictionary<String, O> Get() ;
public abstract O Get(String key);
public abstract Boolean Put(O param, String key);
}
}