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