ExcutorBase.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Diagnostics;
  3. using JLHHJSvr.BLL;
  4. using JLHHJSvr.Com;
  5. using JLHHJSvr.Helper;
  6. using LJLib.Net.SPI.Com;
  7. using Newtonsoft.Json;
  8. namespace LJLib.Net.SPI.Server
  9. {
  10. internal abstract class ExcutorBase
  11. {
  12. public abstract LJResponse Excute(ILJRequest request, object state);
  13. }
  14. internal abstract class ExcutorBase<T1, T2> : ExcutorBase
  15. where T1:ILJRequest<T2>
  16. where T2:LJResponse,new()
  17. {
  18. protected abstract void ExcuteInternal(T1 request, object state, T2 rslt);
  19. protected virtual bool PreHandle(T1 request, T2 rslt) {
  20. if(request is ILJTokenRequest<T2> request2)
  21. {
  22. var tokendata = BllHelper.GetToken(request2.token);
  23. if (tokendata == null)
  24. {
  25. rslt.ErrMsg = "会话已经中断,请重新登录";
  26. return false;
  27. }
  28. Trace.Write($"用户名: {tokendata.username}, 请求类型: {typeof(T1).Name},请求报文:\r\n{JsonConvert.SerializeObject(request2)}", "Request");
  29. if (request is ILJLockRequest<T2> request3)
  30. {
  31. if (LockHelper.PreCheckBillLock(request3, out string arg_msg))
  32. {
  33. rslt.ErrMsg = arg_msg;
  34. return false;
  35. }
  36. }
  37. }
  38. return true;
  39. }
  40. public override LJResponse Excute(ILJRequest request, object state)
  41. {
  42. T2 rslt = new T2();
  43. try
  44. {
  45. T1 req = request as T1;
  46. if (req == null)
  47. {
  48. rslt.ErrMsg = "request不能转换成类型" + typeof(T1).Name;
  49. return rslt;
  50. }
  51. if (PreHandle(req, rslt))
  52. {
  53. ExcuteInternal(req, state, rslt);
  54. }
  55. }
  56. catch (Exception ex)
  57. {
  58. Trace.Write(ex.ToString());
  59. rslt.ErrMsg = ex.ToString();
  60. }
  61. return rslt;
  62. }
  63. }
  64. }