@@ -6,28 +6,22 @@ int main() {
66 /* Fill with user data */
77 };
88
9- /* Keeping track of last precompressed message both in original and compressed format */
10- std::string originalMessage;
11- std::string compressedMessage;
9+ /* Keeping track of last prepared message */
10+ uWS::PreparedMessage preparedMessage;
1211 std::mutex m;
1312
1413 /* For demo, we create a thread that will update the precompressed message every second */
15- std::thread t2 ([&originalMessage, &compressedMessage, &m]() {
16- uWS::ZlibContext zlibContext;
17- uWS::DeflationStream compressor (uWS::DEDICATED_COMPRESSOR);
18- int counter = 0 ;
19-
20- while (true ) {
21- counter++;
22-
14+ std::thread t2 ([&m, &preparedMessage]() {
15+ for (int counter = 1 ; true ; counter++) {
2316 m.lock ();
24- originalMessage = " Hello you are looking at message number " + std::to_string (counter) + " and this text should be precompressed" ;
25- compressedMessage = compressor.deflate (&zlibContext, {originalMessage.data (), originalMessage.length ()}, true );
26- m.unlock ();
27-
17+ std::string newMessage = " Hello you are looking at message number " + std::to_string (counter) + " and this text should be precompressed" ;
18+
19+ /* Here the current preparedMessage is updated */
20+ preparedMessage = uWS::Loop::get ()->prepareMessage (newMessage, uWS::OpCode::TEXT, true );
21+
22+ m.unlock ();
2823 std::this_thread::sleep_for (std::chrono::milliseconds (500 ));
2924 }
30-
3125 });
3226
3327 uWS::App ().ws <PerSocketData>(" /*" , {
@@ -39,19 +33,14 @@ int main() {
3933 /* Open event here, you may access ws->getUserData() which points to a PerSocketData struct */
4034
4135 },
42- .message = [&originalMessage , &compressedMessage, &m ](auto *ws, std::string_view message, uWS::OpCode opCode) {
36+ .message = [&m , &preparedMessage ](auto *ws, std::string_view message, uWS::OpCode opCode) {
4337
4438 /* First respond by echoing what they send us, without compression */
4539 ws->send (message, opCode, false );
4640
47- /* This should be wrapped up into ws->sendPrepared(PreparedMessage) in the future, experimental for now */
41+ /* Send last prepared message */
4842 m.lock ();
49- if (ws->hasNegotiatedCompression () && compressedMessage.length () < originalMessage.length ()) {
50- std::cout << " Responding with precompressed message saving " << (originalMessage.length () - compressedMessage.length ()) << " bytes" << std::endl;
51- ws->send ({compressedMessage.data (), compressedMessage.length ()}, uWS::OpCode::TEXT, uWS::CompressFlags::ALREADY_COMPRESSED);
52- } else {
53- ws->send ({originalMessage.data (), originalMessage.length ()}, uWS::OpCode::TEXT);
54- }
43+ ws->sendPrepared (preparedMessage);
5544 m.unlock ();
5645 },
5746 .dropped = [](auto */*ws*/, std::string_view /*message*/, uWS::OpCode /*opCode*/) {
0 commit comments