SimpleExample.vala 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Astralis;
  2. using Invercargill;
  3. using Invercargill.DataStructures;
  4. using Inversion;
  5. using Spry;
  6. class TestComponent : Component {
  7. public override string markup { get {
  8. return """
  9. <!DOCTYPE html>
  10. <html>
  11. <body>
  12. <h1>Hello, World!</h1>
  13. <spry-outlet sid="content" />
  14. </body>
  15. </html>
  16. """;
  17. }}
  18. public void set_content(Component component) {
  19. set_outlet_child("content", component);
  20. }
  21. }
  22. class ContentComponent : Component {
  23. public override string markup { get {
  24. return """
  25. <p>Quia assumenda sunt qui. Voluptatibus magni exercitationem tenetur sit itaque laborum aut. Sint voluptates fugit consectetur.</p>
  26. <p>Optio totam doloremque minus impedit est eum. Nisi a rerum natus. Impedit est autem culpa ullam reprehenderit sunt. Et harum odio cumque iure.</p>
  27. <p>Architecto non ipsum quibusdam aut. Deleniti enim magnam aperiam voluptatibus similique dolor. Porro et aliquam et eum magnam neque praesentium.</p>
  28. <p>Quod at nemo rem fugit quia nemo facere et. Fugit sed labore voluptates recusandae dolores sed. Consequatur autem sit minima sunt excepturi et fugiat voluptates. Repellat aut vero doloribus quis laborum repellat dolorem et.</p>
  29. <p>Porro at id optio sit voluptatibus nulla quam. Dignissimos praesentium est dolore architecto voluptatem adipisci nostrum. In dolorum et qui distinctio. Aperiam et eligendi quod eaque.</p>
  30. """;
  31. }}
  32. }
  33. class UserContentComponent : Component {
  34. public override string markup { get {
  35. return """
  36. <p>You said: <span sid="message"></span></p>
  37. """;
  38. }}
  39. public string message { set {
  40. this["message"].text_content = value;
  41. }}
  42. }
  43. class HomePageEndpoint : Object, Endpoint {
  44. public async Astralis.HttpResult handle_request(Astralis.HttpContext http_context, Astralis.RouteContext route_context) throws Error {
  45. var component = new TestComponent();
  46. component.set_content(new ContentComponent());
  47. return component.to_result();
  48. }
  49. }
  50. class MessageEndpoint : Object, Endpoint {
  51. public async Astralis.HttpResult handle_request(Astralis.HttpContext http_context, Astralis.RouteContext route_context) throws Error {
  52. var component = new TestComponent();
  53. var content = new UserContentComponent();
  54. content.message = http_context.request.query_params.get_any_or_default("message") ?? "No message provided!";
  55. component.set_content(content);
  56. return component.to_result();
  57. }
  58. }
  59. void main(string[] args) {
  60. int port = args.length > 1 ? int.parse(args[1]) : 8080;
  61. try {
  62. var application = new WebApplication(port);
  63. // Register compression components
  64. application.use_compression();
  65. // Register endpoints
  66. application.add_endpoint<HomePageEndpoint>(new EndpointRoute("/"));
  67. application.add_endpoint<MessageEndpoint>(new EndpointRoute("/message"));
  68. application.run();
  69. } catch (Error e) {
  70. printerr("Error: %s\n", e.message);
  71. Process.exit(1);
  72. }
  73. }