DBProxyComponent.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Collections.Generic;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. namespace Model
  5. {
  6. /// <summary>
  7. /// 用来与数据库操作代理
  8. /// </summary>
  9. public class DBProxyComponent : Component
  10. {
  11. public string dbAddress;
  12. public void Awake()
  13. {
  14. StartConfig dbStartConfig = Game.Scene.GetComponent<StartConfigComponent>().DBStartConfig;
  15. dbAddress = dbStartConfig.GetComponent<InnerConfig>().Address;
  16. }
  17. public async Task Save(Entity entity, bool needCache = true)
  18. {
  19. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  20. await session.Call<DBSaveRequest, DBSaveResponse>(new DBSaveRequest { Entity = entity, NeedCache = needCache});
  21. }
  22. public async Task SaveBatch(List<Entity> entitys, bool needCache = true)
  23. {
  24. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  25. await session.Call<DBSaveBatchRequest, DBSaveBatchResponse>(new DBSaveBatchRequest { Entitys = entitys, NeedCache = needCache});
  26. }
  27. public async Task Save(Entity entity, bool needCache, CancellationToken cancellationToken)
  28. {
  29. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  30. await session.Call<DBSaveRequest, DBSaveResponse>(new DBSaveRequest { Entity = entity, NeedCache = needCache}, cancellationToken);
  31. }
  32. public async void SaveLog(Entity entity)
  33. {
  34. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  35. await session.Call<DBSaveRequest, DBSaveResponse>(new DBSaveRequest { Entity = entity, NeedCache = false, CollectionName = "Log" });
  36. }
  37. public async Task<T> Query<T>(long id, bool needCache = true) where T: Entity
  38. {
  39. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  40. DBQueryResponse dbQueryResponse = await session.Call<DBQueryRequest, DBQueryResponse>(new DBQueryRequest { CollectionName = typeof(T).Name, Id = id, NeedCache = needCache });
  41. return (T)dbQueryResponse.Entity;
  42. }
  43. public async Task<List<T>> QueryBatch<T>(List<long> ids, bool needCache = true) where T : Entity
  44. {
  45. List<T> list = new List<T>();
  46. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  47. DBQueryBatchResponse dbQueryBatchResponse = await session.Call<DBQueryBatchRequest, DBQueryBatchResponse>(new DBQueryBatchRequest { CollectionName = typeof(T).Name, IdList = ids, NeedCache = needCache});
  48. foreach (Entity entity in dbQueryBatchResponse.Entitys)
  49. {
  50. list.Add((T)entity);
  51. }
  52. return list;
  53. }
  54. public async Task<List<T>> QueryJson<T>(string json, bool needCache = true) where T : Entity
  55. {
  56. List<T> list = new List<T>();
  57. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(dbAddress);
  58. DBQueryJsonResponse dbQueryJsonResponse = await session.Call<DBQueryJsonRequest, DBQueryJsonResponse>(new DBQueryJsonRequest { CollectionName = typeof(T).Name, Json = json, NeedCache = needCache});
  59. foreach (Entity entity in dbQueryJsonResponse.Entitys)
  60. {
  61. list.Add((T)entity);
  62. }
  63. return list;
  64. }
  65. }
  66. }