using System.Collections.Generic; using System.Net; using System.Threading; using System.Threading.Tasks; namespace ETModel { [ObjectSystem] public class DbProxyComponentSystem : AwakeSystem { public override void Awake(DBProxyComponent self) { self.Awake(); } } /// /// 用来与数据库操作代理 /// public class DBProxyComponent : Component { public IPEndPoint dbAddress; public void Awake() { StartConfig dbStartConfig = Game.Scene.GetComponent().DBConfig; dbAddress = dbStartConfig.GetComponent().IPEndPoint; } public async Task Save(Component disposer, bool needCache = true) { Session session = Game.Scene.GetComponent().Get(dbAddress); await session.Call(new DBSaveRequest { Disposer = disposer, NeedCache = needCache}); } public async Task SaveBatch(List disposers, bool needCache = true) { Session session = Game.Scene.GetComponent().Get(dbAddress); await session.Call(new DBSaveBatchRequest { Disposers = disposers, NeedCache = needCache}); } public async Task Save(Component disposer, bool needCache, CancellationToken cancellationToken) { Session session = Game.Scene.GetComponent().Get(dbAddress); await session.Call(new DBSaveRequest { Disposer = disposer, NeedCache = needCache}, cancellationToken); } public async void SaveLog(Component disposer) { Session session = Game.Scene.GetComponent().Get(dbAddress); await session.Call(new DBSaveRequest { Disposer = disposer, NeedCache = false, CollectionName = "Log" }); } public async Task Query(long id, bool needCache = true) where T: Component { Session session = Game.Scene.GetComponent().Get(dbAddress); DBQueryResponse dbQueryResponse = (DBQueryResponse)await session.Call(new DBQueryRequest { CollectionName = typeof(T).Name, Id = id, NeedCache = needCache }); return (T)dbQueryResponse.Disposer; } public async Task> QueryBatch(List ids, bool needCache = true) where T : Component { List list = new List(); Session session = Game.Scene.GetComponent().Get(dbAddress); DBQueryBatchResponse dbQueryBatchResponse = (DBQueryBatchResponse)await session.Call(new DBQueryBatchRequest { CollectionName = typeof(T).Name, IdList = ids, NeedCache = needCache}); foreach (Component disposer in dbQueryBatchResponse.Disposers) { list.Add((T)disposer); } return list; } public async Task> QueryJson(string json, bool needCache = true) where T : Component { List list = new List(); Session session = Game.Scene.GetComponent().Get(dbAddress); DBQueryJsonResponse dbQueryJsonResponse = (DBQueryJsonResponse)await session.Call(new DBQueryJsonRequest { CollectionName = typeof(T).Name, Json = json, NeedCache = needCache}); foreach (Component disposer in dbQueryJsonResponse.Disposers) { list.Add((T)disposer); } return list; } } }