diff --git a/addons/EGFramework/Module/SaveTools/EGDapper.cs b/addons/EGFramework/Module/SaveTools/EGDapper.cs index 745ed95..fe4e2ec 100644 --- a/addons/EGFramework/Module/SaveTools/EGDapper.cs +++ b/addons/EGFramework/Module/SaveTools/EGDapper.cs @@ -5,14 +5,11 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using Dapper; - +//ORM Save tools. First support SQLite and MySQL,In future we will support other Database who implement DBConnection. namespace EGFramework { - public abstract class EGDapper : IEGSave, IEGSaveData, IEGCanGetDBConnection { - public string DBName = "Default"; - private string DefaultDBFolder = "SaveData"; public DbConnection Connection { get; set; } public string ExceptionMsg; diff --git a/addons/EGFramework/Module/SaveTools/EGMysqlSave.cs b/addons/EGFramework/Module/SaveTools/EGMysqlSave.cs index a716178..7a6b4d0 100644 --- a/addons/EGFramework/Module/SaveTools/EGMysqlSave.cs +++ b/addons/EGFramework/Module/SaveTools/EGMysqlSave.cs @@ -1,20 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq.Expressions; using MySql.Data.MySqlClient; -using Dapper; -using System.Reflection; -using System.Linq; -using System.Data.Common; -//ORM Save tools. First support SQLite and MySQL,In future we will support other Database who implement DBConnection. namespace EGFramework{ /// /// This Class used Dapper for operate MySQL database. /// public class EGMysqlSave : EGDapper { - private string Conn { set; get; } + public string Conn { set; get; } public bool IsInit { set; get; } /// /// "server="+Address+";port="+Port+";uid="+UserName+";pwd="+Password+";database="+DataBase+";" @@ -26,6 +18,7 @@ namespace EGFramework{ { Connection = new MySqlConnection(conn); IsInit = true; + this.Conn = conn; } catch (System.Exception e) { diff --git a/addons/EGFramework/Module/SaveTools/EGRedisSave.cs b/addons/EGFramework/Module/SaveTools/EGRedisSave.cs new file mode 100644 index 0000000..213e9da --- /dev/null +++ b/addons/EGFramework/Module/SaveTools/EGRedisSave.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using Newtonsoft.Json; +using StackExchange.Redis; + +namespace EGFramework{ + public class EGRedisSave : IEGSave, IEGSaveObject + { + public string Conn { set; get; } + public bool IsInit { set; get; } + public ConnectionMultiplexer Redis { set; get; } + public IDatabase Database { set; get; } + public ISubscriber Subscriber { set; get; } + + /// + /// connect to redis server + /// + /// such as server1:6379,server2:6379 + public void InitSave(string conn) + { + try + { + Redis = ConnectionMultiplexer.Connect(conn); + IsInit = true; + this.Conn = conn; + Redis = ConnectionMultiplexer.Connect(conn); + Database = Redis.GetDatabase(); + Subscriber = Redis.GetSubscriber(); + } + catch (System.Exception) + { + //EG.Print("e:" + e); + } + } + + public void AddObject(string objectKey, TObject obj) + { + if(!Database.KeyExists(objectKey)){ + Database.SetAdd(objectKey, JsonConvert.SerializeObject(obj)); + }else{ + throw new System.Exception("Key already exists in redis database."); + } + + } + + public void UpdateObject(string objectKey, TObject obj) + { + if(Database.KeyExists(objectKey)){ + Database.SetAdd(objectKey, JsonConvert.SerializeObject(obj)); + }else{ + throw new System.Exception("Key not exists in redis database."); + } + } + + public void RemoveObject(string objectKey) + { + Database.KeyDelete(objectKey); + } + + public void SetObject(string objectKey, TObject obj) + { + Database.SetAdd(objectKey, JsonConvert.SerializeObject(obj)); + } + + public TObject GetObject(string objectKey) where TObject : new() + { + try + { + string result = Database.StringGet(objectKey); + TObject resultObj = JsonConvert.DeserializeObject(result); + return resultObj; + } + catch (System.Exception) + { + throw; + } + } + + public bool ContainsKey(string objectKey) + { + return Database.KeyExists(objectKey); + } + + public IEnumerable GetKeys() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/addons/EGFramework/Module/SaveTools/EGSqliteSave.cs b/addons/EGFramework/Module/SaveTools/EGSqliteSave.cs index 7e2636a..409ce74 100644 --- a/addons/EGFramework/Module/SaveTools/EGSqliteSave.cs +++ b/addons/EGFramework/Module/SaveTools/EGSqliteSave.cs @@ -1,23 +1,17 @@ using System; -using System.Collections.Generic; -using System.Data.Common; using System.IO; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using Dapper; using Microsoft.Data.Sqlite; namespace EGFramework{ public class EGSqliteSave : EGDapper { - private string Conn { set; get; } + public string Conn { set; get; } public bool IsInit { set; get; } /// /// If path not exist, create it. /// - /// + /// please add *.db suffix or your db file suffix public override void InitSave(string path) { if (!Directory.Exists(path)) @@ -30,13 +24,15 @@ namespace EGFramework{ /// /// Init database with path. /// - /// name is the file path. + /// name is the file path.such as SaveData.db public void InitDatabase(string dataBaseName) { Connection = new SqliteConnection("Data Source="+dataBaseName+";Mode=ReadWriteCreate;"); // Open the connection: try { Connection.Open(); + this.Conn = dataBaseName; + IsInit = true; } catch (Exception ex) {