aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/vweb/server_sent_events
diff options
context:
space:
mode:
authorIndrajith K L2022-12-03 17:00:20 +0530
committerIndrajith K L2022-12-03 17:00:20 +0530
commitf5c4671bfbad96bf346bd7e9a21fc4317b4959df (patch)
tree2764fc62da58f2ba8da7ed341643fc359873142f /v_windows/v/examples/vweb/server_sent_events
downloadcli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.tar.gz
cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.tar.bz2
cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.zip
Adds most of the toolsHEADmaster
Diffstat (limited to 'v_windows/v/examples/vweb/server_sent_events')
-rw-r--r--v_windows/v/examples/vweb/server_sent_events/assets/site.css19
-rw-r--r--v_windows/v/examples/vweb/server_sent_events/assets/v-logo.svg1
-rw-r--r--v_windows/v/examples/vweb/server_sent_events/favicon.icobin0 -> 15406 bytes
-rw-r--r--v_windows/v/examples/vweb/server_sent_events/index.html38
-rw-r--r--v_windows/v/examples/vweb/server_sent_events/server.v37
5 files changed, 95 insertions, 0 deletions
diff --git a/v_windows/v/examples/vweb/server_sent_events/assets/site.css b/v_windows/v/examples/vweb/server_sent_events/assets/site.css
new file mode 100644
index 0000000..4ad9eb8
--- /dev/null
+++ b/v_windows/v/examples/vweb/server_sent_events/assets/site.css
@@ -0,0 +1,19 @@
+body {
+ font-family: Arial, Helvetica, sans-serif;
+ color: #eee;
+ background-color: #333;
+ background-image: url("v-logo.svg");
+ background-repeat: no-repeat;
+ background-size: 10em;
+ margin: 0;
+ padding-left: 11em;
+}
+
+h1 {
+ color: #6699CC;
+}
+
+img.logo {
+ float: left;
+ width: 10em;
+}
diff --git a/v_windows/v/examples/vweb/server_sent_events/assets/v-logo.svg b/v_windows/v/examples/vweb/server_sent_events/assets/v-logo.svg
new file mode 100644
index 0000000..9a4ec60
--- /dev/null
+++ b/v_windows/v/examples/vweb/server_sent_events/assets/v-logo.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 500 500" width="500px" height="500px"><defs><clipPath id="_clipPath_8TWIgR1z3pxinjWBiigzcEIrVJKv9Gq4"><rect width="500" height="500"/></clipPath></defs><g clip-path="url(#_clipPath_8TWIgR1z3pxinjWBiigzcEIrVJKv9Gq4)"><path d=" M 318.422 453.543 L 463.705 49.541 C 466.168 42.689 462.285 37.693 455.037 38.392 L 340.786 49.398 C 333.539 50.097 325.71 56.246 323.316 63.121 L 188.843 449.216 C 186.447 456.091 190.414 461.673 197.695 461.673 L 308.901 461.673 C 312.541 461.673 316.497 458.893 317.729 455.466 L 318.422 453.543 Z " fill="rgb(83,107,138)"/><defs><filter id="Hmac7mZraFWHw0G84Yxj4QuzeTFp0E7Y" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="6.440413594258542"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="0" dy="0" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.65"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs><g filter="url(#Hmac7mZraFWHw0G84Yxj4QuzeTFp0E7Y)"><path d=" M 301.848 455.466 L 241.359 280.725 L 250 275.324 L 311.57 453.543 L 301.848 455.466 Z " fill="rgb(235,235,235)"/></g><path d=" M 44.963 38.392 L 159.214 49.398 C 166.461 50.097 174.298 56.243 176.704 63.115 L 314.022 455.448 C 315.224 458.885 313.245 461.673 309.604 461.673 L 197.695 461.673 C 190.414 461.673 182.502 456.111 180.038 449.259 L 36.295 49.541 C 33.832 42.689 37.715 37.693 44.963 38.392 Z " fill="rgb(93,135,191)"/></g></svg>
diff --git a/v_windows/v/examples/vweb/server_sent_events/favicon.ico b/v_windows/v/examples/vweb/server_sent_events/favicon.ico
new file mode 100644
index 0000000..fa834c3
--- /dev/null
+++ b/v_windows/v/examples/vweb/server_sent_events/favicon.ico
Binary files differ
diff --git a/v_windows/v/examples/vweb/server_sent_events/index.html b/v_windows/v/examples/vweb/server_sent_events/index.html
new file mode 100644
index 0000000..7e500c9
--- /dev/null
+++ b/v_windows/v/examples/vweb/server_sent_events/index.html
@@ -0,0 +1,38 @@
+<html>
+ <header>
+ <title>@title</title>
+ <meta charset="utf-8"/>
+ @css 'assets/site.css'
+ </header>
+ <body>
+ <h1>@title</h1>
+ <button>Close the connection</button>
+ <ul></ul>
+ <script>
+ "use strict";
+ var button = document.querySelector('button');
+ var eventList = document.querySelector('ul');
+ const evtSource = new EventSource('/sse');
+ evtSource.onerror = function() { console.log("EventSource failed."); };
+ console.log(evtSource.withCredentials);
+ console.log(evtSource.readyState);
+ console.log(evtSource.url);
+ evtSource.onopen = function() {
+ console.log("Connection to server opened.");
+ };
+ evtSource.onmessage = function(e) {
+ var newElement = document.createElement("li");
+ newElement.textContent = "message: " + e.data;
+ eventList.appendChild(newElement);
+ };
+ evtSource.addEventListener("ping", function(e) {
+ console.log(e)
+ var newElement = document.createElement("li");
+ var obj = JSON.parse(e.data);
+ newElement.innerHTML = "ping at " + obj.time + ' server data: ' + e.data;
+ eventList.appendChild(newElement);
+ }, false);
+ button.onclick = function() { console.log('Connection closed'); evtSource.close(); };
+ </script>
+ </body>
+</html>
diff --git a/v_windows/v/examples/vweb/server_sent_events/server.v b/v_windows/v/examples/vweb/server_sent_events/server.v
new file mode 100644
index 0000000..c1139d8
--- /dev/null
+++ b/v_windows/v/examples/vweb/server_sent_events/server.v
@@ -0,0 +1,37 @@
+module main
+
+import os
+import rand
+import time
+import vweb
+import vweb.sse
+
+struct App {
+ vweb.Context
+}
+
+fn main() {
+ mut app := &App{}
+ app.serve_static('/favicon.ico', 'favicon.ico')
+ app.mount_static_folder_at(os.resource_abs_path('.'), '/')
+ vweb.run(app, 8081)
+}
+
+pub fn (mut app App) index() vweb.Result {
+ title := 'SSE Example'
+ return $vweb.html()
+}
+
+fn (mut app App) sse() vweb.Result {
+ mut session := sse.new_connection(app.conn)
+ // NB: you can setup session.write_timeout and session.headers here
+ session.start() or { return app.server_error(501) }
+ session.send_message(data: 'ok') or { return app.server_error(501) }
+ for {
+ data := '{"time": "$time.now().str()", "random_id": "$rand.ulid()"}'
+ session.send_message(event: 'ping', data: data) or { return app.server_error(501) }
+ println('> sent event: $data')
+ time.sleep(1 * time.second)
+ }
+ return app.server_error(501)
+}