fortunes.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using BeetleX;
  2. using BeetleX.Buffers;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Globalization;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace PlatformBenchmarks
  9. {
  10. public partial class HttpHandler
  11. {
  12. private readonly static AsciiString _fortunesTableStart = "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
  13. private readonly static AsciiString _fortunesRowStart = "<tr><td>";
  14. private readonly static AsciiString _fortunesColumn = "</td><td>";
  15. private readonly static AsciiString _fortunesRowEnd = "</td></tr>";
  16. private readonly static AsciiString _fortunesTableEnd = "</table></body></html>";
  17. public async Task fortunes(PipeStream stream, HttpToken token, ISession session)
  18. {
  19. try
  20. {
  21. var data = await token.Db.LoadFortunesRows();
  22. stream.Write(_fortunesTableStart.Data, 0, _fortunesTableStart.Length);
  23. foreach (var item in data)
  24. {
  25. stream.Write(_fortunesRowStart.Data, 0, _fortunesRowStart.Length);
  26. stream.Write(item.Id.ToString(CultureInfo.InvariantCulture));
  27. stream.Write(_fortunesColumn.Data, 0, _fortunesColumn.Length);
  28. stream.Write(System.Web.HttpUtility.HtmlEncode(item.Message));
  29. stream.Write(_fortunesRowEnd.Data, 0, _fortunesRowEnd.Length);
  30. }
  31. stream.Write(_fortunesTableEnd.Data, 0, _fortunesTableEnd.Length);
  32. }
  33. catch (Exception e_)
  34. {
  35. HttpServer.ApiServer.Log(BeetleX.EventArgs.LogType.Error, null, $"fortunes error {e_.Message}@{e_.StackTrace}");
  36. stream.Write(e_.Message);
  37. }
  38. OnCompleted(stream, session, token);
  39. }
  40. }
  41. }