221V 2 weeks ago
parent
commit
e12391a386
3 changed files with 138 additions and 1 deletions
  1. 3 0
      README.md
  2. 107 0
      vtest/public/index.html
  3. 28 1
      vtest/source/app.d

+ 3 - 0
README.md

@@ -8,6 +8,9 @@ $ cd <FOLDER_NAME>
 $ make c
 
 
+http://127.0.0.1:8080/index.html
+
+
 $ ldc2 -v
 binary    /home/e/.dlang/bin/ldc2
 version   1.39.0 (DMD v2.109.1, LLVM 18.1.6)

+ 107 - 0
vtest/public/index.html

@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>Websocket test</title>
+</head>
+
+<body>
+
+<header>
+  <h1>Websocket test</h1>
+  <div id="status"></div>
+</header>
+
+<nav>
+  <div id="connecting">
+    <input type="text" id="server" value=""></input>
+    <button type="button" onclick="toggle_connection()">connection</button>
+  </div>
+
+  <div id="connected">
+    <input type="text" id="message" value=""></input>
+    <button type="button" onclick="sendTxt()">send</button>
+  </div>
+</nav>
+
+<main id="content">
+  <button id="clear" onclick="clearScreen()" >Clear text</button>
+  <div id="output"></div>
+</main>
+
+<script>
+var websocket;
+var server = document.getElementById('server');
+var message = document.getElementById('message');
+var connecting = document.getElementById('connecting');
+var connected = document.getElementById('connected');
+var content = document.getElementById('content');
+var output = document.getElementById('output');
+
+server.value = 'ws://' + window.location.host + '/ws';
+connected.style.display = 'none';
+content.style.display = 'none';
+
+function connect(){
+  wsHost = server.value;
+  websocket = new WebSocket(wsHost);
+  showScreen('<b>Connecting to: ' +  wsHost + '</b>');
+  websocket.onopen = function(evt){ onOpen(evt) };
+  websocket.onclose = function(evt){ onClose(evt) };
+  websocket.onmessage = function(evt){ onMessage(evt) };
+  websocket.onerror = function(evt){ onError(evt) };
+}
+
+function disconnect(){
+  websocket.close();
+}
+
+function toggle_connection(){
+  if(websocket && websocket.readyState == websocket.OPEN){
+    disconnect();
+  }else{
+    connect();
+  }
+}
+
+function sendTxt(){
+  if(websocket.readyState == websocket.OPEN){
+    var msg = message.value;
+    websocket.send(msg);
+    showScreen('sending: ' + msg);
+  }else{
+    showScreen('websocket is not connected');
+  }
+}
+
+function onOpen(evt){
+  showScreen('<span style="color:green">CONNECTED </span>');
+  connecting.style.display = 'none';
+  connected.style.display = '';
+  content.style.display = '';
+}
+
+function onClose(evt){
+  showScreen('<span style="color:red">DISCONNECTED</span>');
+}
+
+function onMessage(evt){
+  showScreen('<span style="color:blue">RESPONSE: ' + evt.data + '</span>');
+}
+
+function onError(evt){
+  showScreen('<span style="color:red">ERROR: ' + evt.data + '</span>');
+}
+
+function showScreen(html){
+  var el = document.createElement('p');
+  el.innerHTML = html;
+  output.insertBefore(el, output.firstChild);
+}
+
+function clearScreen(){
+  output.innerHTML = '';
+}
+</script>
+</body>
+</html>

+ 28 - 1
vtest/source/app.d

@@ -1,14 +1,30 @@
 
-import vibe.vibe;
+//import vibe.vibe;
+// https://github.com/vibe-d/vibe.d/blob/master/source/vibe/vibe.d
+
+import vibe.core.core;
+import vibe.http.router;
+import vibe.http.server;
+import vibe.http.fileserver;
 import vibe.http.websockets;
+import vibe.core.log;
+
 
 void main(){
   auto settings = new HTTPServerSettings;
   settings.port = 8080;
   settings.bindAddresses = ["::1", "127.0.0.1"];
   
+  //auto fsettings = new HTTPFileServerSettings;
+  //fsettings.serverPathPrefix = "/static";
+  
   auto router = new URLRouter;
   router.get("/", &index);
+  ////router.get("static/*", serverStaticFiles("public/", fsettings) );
+  
+  //router.get("/", staticTemplate!"index.html"); // todo fix
+  router.get("/ws", handleWebSockets(&ws_handle) );
+  router.get("*", serveStaticFiles("public/"));
   
   //auto listener = listenHTTP(settings, &hello);
   auto listener = listenHTTP(settings, router);
@@ -20,10 +36,21 @@ void main(){
   runApplication();
 }
 
+
+void ws_handle(scope WebSocket sock){
+  // simple echo server + :)
+  while(sock.connected){
+    auto msg = sock.receiveText();
+    sock.send(msg ~ " :)");
+  }
+}
+
+
 void index(HTTPServerRequest req, HTTPServerResponse res){
   res.writeBody("Hello, World!");
 }
 
+
 /*
 void hello(HTTPServerRequest req, HTTPServerResponse res){
   res.writeBody("Hello, World!");