Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import vibe.d;
- import std.stdio;
- import std.algorithm;
- shared static this()
- {
- auto router = new URLRouter;
- router.get("*", serveStaticFiles("public/"));
- router.get("/ws", handleWebSockets(&onWebSocket));
- auto settings = new HTTPServerSettings;
- listenHTTP(settings, router);
- }
- Task[] m_socketHandlers;
- void onWebSocket(scope WebSocket sock)
- {
- auto t = runTask({
- while (true)
- {
- auto msg = receiveOnly!string;
- writeln("got message to send out: " ~ msg);
- if (!sock.connected) break;
- sock.send(msg);
- }
- });
- auto thistask = Task.getThis();
- m_socketHandlers ~= thistask;
- scope(exit) m_socketHandlers = m_socketHandlers.filter!(t => t != thistask).array;
- while (sock.waitForData)
- {
- auto msg = sock.receiveText();
- writeln("Got message: " ~ msg);
- broadcast(msg);
- }
- t.interrupt();
- }
- void broadcast(string message)
- {
- foreach(s; m_socketHandlers)
- {
- s.send("Broadcast: " ~ message);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement