fortunes.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Threading.Tasks;
  5. using ZYSocket;
  6. using ZYSocket.FiberStream;
  7. namespace PlatformBenchmarks
  8. {
  9. public partial class HttpHandler
  10. {
  11. private readonly static AsciiString _fortunesTableStart = "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
  12. private readonly static AsciiString _fortunesRowStart = "<tr><td>";
  13. private readonly static AsciiString _fortunesColumn = "</td><td>";
  14. private readonly static AsciiString _fortunesRowEnd = "</td></tr>";
  15. private readonly static AsciiString _fortunesTableEnd = "</table></body></html>";
  16. public async void fortunes(IFiberRw<HttpToken> fiberRw, WriteBytes write)
  17. {
  18. try
  19. {
  20. var data = await fiberRw.UserToken.Db.LoadFortunesRows();
  21. Task<int> WSend()
  22. {
  23. write.Write(_fortunesTableStart.Data, 0, _fortunesTableStart.Length);
  24. foreach (var item in data)
  25. {
  26. write.Write(_fortunesRowStart.Data, 0, _fortunesRowStart.Length);
  27. write.Write(item.Id.ToString(CultureInfo.InvariantCulture),false);
  28. write.Write(_fortunesColumn.Data, 0, _fortunesColumn.Length);
  29. write.Write(System.Web.HttpUtility.HtmlEncode(item.Message),false);
  30. write.Write(_fortunesRowEnd.Data, 0, _fortunesRowEnd.Length);
  31. }
  32. write.Write(_fortunesTableEnd.Data, 0, _fortunesTableEnd.Length);
  33. var length = write.Stream.Length - fiberRw.UserToken.HttpHandlerPostion;
  34. write.Stream.Position = fiberRw.UserToken.ContentPostion.postion;
  35. write.Write(length.ToString(), false);
  36. write.Flush(false);
  37. return fiberRw.Flush();
  38. }
  39. if (fiberRw.UserToken != null)
  40. await await fiberRw.Sync.Ask(WSend);
  41. }
  42. catch (Exception e_)
  43. {
  44. write.Write(e_.Message);
  45. await OnCompleted(fiberRw, write);
  46. }
  47. }
  48. }
  49. }