ContinuationContext.vala 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Astralis;
  2. namespace Spry {
  3. public class ContinuationContext : Object {
  4. public SseStream sse_stream { get; private set;}
  5. private Component component;
  6. public ContinuationContext(Component component, SseStream stream) {
  7. this.sse_stream = stream;
  8. this.component = component;
  9. }
  10. public async void send_dynamic(string dynamic_name) throws Error {
  11. var fragment = yield this.component.get_dynamic_section(dynamic_name);
  12. yield sse_stream.send_event(new SseEvent.with_type(@"_spry-dynamic-$dynamic_name", fragment.body.inner_html));
  13. }
  14. public async void send_json(string event_type, Json.Node node) throws Error {
  15. var json = Json.to_string(node, false);
  16. yield sse_stream.send_event(new SseEvent.with_type(event_type, json));
  17. }
  18. public async void send_string(string event_type, string data) throws Error {
  19. yield sse_stream.send_event(new SseEvent.with_type(event_type, data));
  20. }
  21. public async void send_full_update(string event_type) throws Error {
  22. var doc = yield component.to_document();
  23. string data;
  24. if(component.get_type().is_a(typeof(PageComponent))) {
  25. data = doc.to_html();
  26. }
  27. else {
  28. data = doc.body.inner_html;
  29. }
  30. yield sse_stream.send_event(new SseEvent.with_type(event_type, data));
  31. }
  32. public async void send_event(SseEvent event) throws Error {
  33. yield sse_stream.send_event(event);
  34. }
  35. }
  36. }