fortunes.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using BeetleX;
  2. using BeetleX.Buffers;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Globalization;
  6. using System.Text;
  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(PipeStream stream, HttpToken token, ISession session)
  17. {
  18. try
  19. {
  20. var data = await token.Db.LoadFortunesRows();
  21. stream.Write(_fortunesTableStart.Data, 0, _fortunesTableStart.Length);
  22. foreach (var item in data)
  23. {
  24. stream.Write(_fortunesRowStart.Data, 0, _fortunesRowStart.Length);
  25. stream.Write(item.Id.ToString(CultureInfo.InvariantCulture));
  26. stream.Write(_fortunesColumn.Data, 0, _fortunesColumn.Length);
  27. stream.Write(System.Web.HttpUtility.HtmlEncode(item.Message));
  28. stream.Write(_fortunesRowEnd.Data, 0, _fortunesRowEnd.Length);
  29. }
  30. stream.Write(_fortunesTableEnd.Data, 0, _fortunesTableEnd.Length);
  31. }
  32. catch (Exception e_)
  33. {
  34. HttpServer.ApiServer.Log(BeetleX.EventArgs.LogType.Error, null, $"fortunes error {e_.Message}@{e_.StackTrace}");
  35. stream.Write(e_.Message);
  36. }
  37. OnCompleted(stream, session, token);
  38. }
  39. }
  40. }