DBProxyComponent.cs 3.1 KB

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