Add app.publish
This commit is contained in:
@@ -54,6 +54,13 @@ public:
|
|||||||
httpContext->filter(std::move(filterHandler));
|
httpContext->filter(std::move(filterHandler));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Publishes a message to all websocket contexts */
|
||||||
|
void publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress = false) {
|
||||||
|
for (auto *webSocketContext : webSocketContexts) {
|
||||||
|
webSocketContext->getExt()->publish(topic, message, opCode, compress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
~TemplatedApp() {
|
~TemplatedApp() {
|
||||||
/* Let's just put everything here */
|
/* Let's just put everything here */
|
||||||
if (httpContext) {
|
if (httpContext) {
|
||||||
|
|||||||
+2
-7
@@ -170,13 +170,8 @@ public:
|
|||||||
WebSocketContextData<SSL> *webSocketContextData = (WebSocketContextData<SSL> *) us_socket_context_ext(SSL,
|
WebSocketContextData<SSL> *webSocketContextData = (WebSocketContextData<SSL> *) us_socket_context_ext(SSL,
|
||||||
(us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this)
|
(us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this)
|
||||||
);
|
);
|
||||||
|
/* Is the same as publishing per websocket context */
|
||||||
/* We frame the message right here and only pass raw bytes to the pub/subber */
|
webSocketContextData->publish(topic, message, opCode, compress);
|
||||||
char *dst = (char *) malloc(protocol::messageFrameSize(message.size()));
|
|
||||||
size_t dst_length = protocol::formatMessage<true>(dst, message.data(), message.length(), opCode, message.length(), false);
|
|
||||||
|
|
||||||
webSocketContextData->topicTree.publish(topic, std::string_view(dst, dst_length));
|
|
||||||
free(dst);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,16 @@ struct WebSocketContextData {
|
|||||||
topicTree.drain();
|
topicTree.drain();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper for topictree publish, common path from app and ws */
|
||||||
|
void publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress) {
|
||||||
|
/* We frame the message right here and only pass raw bytes to the pub/subber */
|
||||||
|
char *dst = (char *) malloc(protocol::messageFrameSize(message.size()));
|
||||||
|
size_t dst_length = protocol::formatMessage<true>(dst, message.data(), message.length(), opCode, message.length(), false);
|
||||||
|
|
||||||
|
topicTree.publish(topic, std::string_view(dst, dst_length));
|
||||||
|
::free(dst);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user