Hi, I'm trying to create an application server that use WebSocket and Redis.
I've started from the example vibenotes to be able to use the broadcast feature.
I also need non broadcast messages but I can't make it work.
I can send message with: socket.send("foo");
But everytimes I'm trying to get an information from Redis (in an other function) the socket is broken when I want to use it.
void callback (scope WebSocket socket) {
auto sockid = cast(void*)socket;
auto sendtask = runTask({
while(socket.connected) {
auto message = receiveOnly!string();
socket.send(message);
}
});
m_sockets[sockid] = SocketInfo(sendtask, channel);
scope (exit) m_sockets.remove(sockid);
while (socket.waitForData()) {
auto data = socket.receiveText();
auto msg = parseJsonString(data);
sendtask.send("Message sent");
msg = functionThatDoSomethingWithREDIS(msg);
sendtask.send(msg.toString);
// ERROR:
// WebSocket handler failed: Got JSON of type undefined, expected object.
// Task terminated with uncaught exception: WebSocket connection already actively closed.
}
}
I know that the connection with Redis use Fiber to don't wait for the response and let the CPU do something else, but I don't understand how to use it correctly.
Also, I got the same error If I try to pass the sendTask
to the functionThatDoSomethingWithREDIS
: I can't call send
without error.