Advertisement
Guest User

Untitled

a guest
Oct 5th, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.09 KB | None | 0 0
  1. import vibe.d;
  2. import std.stdio;
  3. import std.algorithm;
  4.  
  5. shared static this()
  6. {
  7.     auto router = new URLRouter;
  8.     router.get("*", serveStaticFiles("public/"));
  9.     router.get("/ws", handleWebSockets(&onWebSocket));
  10.    
  11.     auto settings = new HTTPServerSettings;
  12.     listenHTTP(settings, router);
  13. }
  14.  
  15. Task[] m_socketHandlers;
  16.  
  17. void onWebSocket(scope WebSocket sock)
  18. {
  19.     auto t = runTask({
  20.         while (true)
  21.         {
  22.             auto msg = receiveOnly!string;
  23.             writeln("got message to send out: " ~ msg);
  24.             if (!sock.connected) break;
  25.             sock.send(msg);
  26.         }
  27.     });
  28.    
  29.     auto thistask = Task.getThis();
  30.     m_socketHandlers ~= thistask;
  31.     scope(exit) m_socketHandlers = m_socketHandlers.filter!(t => t != thistask).array;
  32.    
  33.     while (sock.waitForData)
  34.     {
  35.         auto msg = sock.receiveText();
  36.         writeln("Got message: " ~ msg);
  37.         broadcast(msg);
  38.     }
  39.    
  40.     t.interrupt();
  41. }
  42.  
  43. void broadcast(string message)
  44. {
  45.     foreach(s; m_socketHandlers)
  46.     {
  47.         s.send("Broadcast: " ~ message);
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement