diff --git a/Utils-IoT/Connector/ABackend.cs b/Utils-IoT/Connector/ABackend.cs index cd68fe0..511ef00 100644 --- a/Utils-IoT/Connector/ABackend.cs +++ b/Utils-IoT/Connector/ABackend.cs @@ -1,11 +1,15 @@ using System; using System.Collections.Generic; +using System.Linq; + using BlubbFish.Utils.IoT.Events; namespace BlubbFish.Utils.IoT.Connector { public abstract class ABackend { public enum BackendType { Data, + Db, + Storage, User } public event BackendMessage MessageIncomming; @@ -18,20 +22,44 @@ namespace BlubbFish.Utils.IoT.Connector { public ABackend(Dictionary settings) => this.settings = settings; + + public static ABackend GetInstance(Dictionary 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 settings, List 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(types.Select(x => "["+x.FullName + "," + x.Assembly.FullName+"]"))) + "], " + "ConnectorStorage" + settings["type"].ToUpperLower(); + return LoadInstance(object_sensor, settings, "Storage"); + } + public static ABackend GetInstance(Dictionary settings, BackendType ty) { if (settings.Count == 0) { return null; } 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 settings, String backendtype) { try { Type t = Type.GetType(object_sensor, true); return (ABackend)t.GetConstructor(new Type[] { typeof(Dictionary) }).Invoke(new Object[] { settings }); - } catch (TypeLoadException) { - throw new TypeLoadException("Configuration: " + settings["type"] + " is not a " + ty.ToString() + "Backend"); - } catch (System.IO.FileNotFoundException) { + } catch(TypeLoadException) { + throw new TypeLoadException("Configuration: " + settings["type"] + " is not a " + backendtype + "Backend"); + } catch(System.IO.FileNotFoundException) { throw new DllNotFoundException("Driver " + object_sensor + " could not load!"); - } catch (Exception e) { - throw new Exception("Something bad Happend while Loading Connectior: "+e.Message); + } catch(Exception e) { + throw new Exception("Something bad Happend while Loading Connector: " + e.Message); } } diff --git a/Utils-IoT/Connector/ADbBackend.cs b/Utils-IoT/Connector/ADbBackend.cs new file mode 100644 index 0000000..b4dd554 --- /dev/null +++ b/Utils-IoT/Connector/ADbBackend.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; + +namespace BlubbFish.Utils.IoT.Connector { + public abstract class ADbBackend : ABackend { + public ADbBackend(Dictionary settings) : base(settings) { } + + public abstract T LoadSingleRow(String query, Dictionary param) where T : new(); + + public abstract List LoadMultiRows(String query, Dictionary param) where T : new(); + + public abstract Int32 Insert(String query, Dictionary param); + } +} diff --git a/Utils-IoT/Connector/AStorageBackend.cs b/Utils-IoT/Connector/AStorageBackend.cs new file mode 100644 index 0000000..9b021ae --- /dev/null +++ b/Utils-IoT/Connector/AStorageBackend.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; + +namespace BlubbFish.Utils.IoT.Connector { + public abstract class AStorageBackend : ABackend { + public AStorageBackend(Dictionary settings) : base(settings) { } + + public abstract Dictionary Get() ; + + public abstract O Get(String key); + + public abstract Boolean Put(O param, String key); + } +}