ExcutorBase.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. using System.Diagnostics;
  3. using LJLib.Net.SPI.Com;
  4. using Newtonsoft.Json;
  5. namespace LJLib.Net.SPI.Server
  6. {
  7. internal abstract class ExcutorBase
  8. {
  9. public abstract LJResponse Excute(ILJRequest request, object state);
  10. }
  11. internal abstract class ExcutorBase<T1, T2> : ExcutorBase
  12. where T1:ILJRequest<T2>
  13. where T2:LJResponse,new()
  14. {
  15. protected abstract void ExcuteInternal(T1 request, object state, T2 rslt);
  16. protected virtual bool PreHandle(T1 request, T2 rslt) { return true; }
  17. public override LJResponse Excute(ILJRequest request, object state)
  18. {
  19. T2 rslt = new T2();
  20. try
  21. {
  22. T1 req = request as T1;
  23. if (req != null) Trace.Write($"{typeof(T1).Name}请求报文:\r\n{JsonConvert.SerializeObject(req)}", "Request");
  24. if (req == null)
  25. {
  26. rslt.ErrMsg = "request不能转换成类型" + typeof(T1).Name;
  27. return rslt;
  28. }
  29. if (PreHandle(req, rslt))
  30. {
  31. ExcuteInternal(req, state, rslt);
  32. }
  33. }
  34. catch (Exception ex)
  35. {
  36. Trace.Write(ex.ToString());
  37. rslt.ErrMsg = ex.ToString();
  38. }
  39. return rslt;
  40. }
  41. }
  42. }