diff --git a/wpiutil/src/main/native/cpp/WebSocket.cpp b/wpiutil/src/main/native/cpp/WebSocket.cpp index c44c26adea..4bb49d3391 100644 --- a/wpiutil/src/main/native/cpp/WebSocket.cpp +++ b/wpiutil/src/main/native/cpp/WebSocket.cpp @@ -22,16 +22,18 @@ namespace { class WebSocketWriteReq : public uv::WriteReq { public: explicit WebSocketWriteReq( - std::function, uv::Error)> callback) { - finish.connect([=](uv::Error err) { + std::function, uv::Error)> callback) + : m_callback{std::move(callback)} { + finish.connect([this](uv::Error err) { span bufs{m_bufs}; for (auto&& buf : bufs.subspan(0, m_startUser)) { buf.Deallocate(); } - callback(bufs.subspan(m_startUser), err); + m_callback(bufs.subspan(m_startUser), err); }); } + std::function, uv::Error)> m_callback; SmallVector m_bufs; size_t m_startUser; }; @@ -589,7 +591,7 @@ void WebSocket::Send( return; } - auto req = std::make_shared(callback); + auto req = std::make_shared(std::move(callback)); raw_uv_ostream os{req->m_bufs, 4096}; // opcode (includes FIN bit) diff --git a/wpiutil/src/main/native/include/wpi/WebSocket.h b/wpiutil/src/main/native/include/wpi/WebSocket.h index 6b50ea86df..fc2ae4a469 100644 --- a/wpiutil/src/main/native/include/wpi/WebSocket.h +++ b/wpiutil/src/main/native/include/wpi/WebSocket.h @@ -183,7 +183,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendText(span data, std::function, uv::Error)> callback) { - Send(kFlagFin | kOpText, data, callback); + Send(kFlagFin | kOpText, data, std::move(callback)); } /** @@ -193,7 +193,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendText(std::initializer_list data, std::function, uv::Error)> callback) { - SendText({data.begin(), data.end()}, callback); + SendText({data.begin(), data.end()}, std::move(callback)); } /** @@ -203,7 +203,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendBinary(span data, std::function, uv::Error)> callback) { - Send(kFlagFin | kOpBinary, data, callback); + Send(kFlagFin | kOpBinary, data, std::move(callback)); } /** @@ -213,7 +213,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendBinary(std::initializer_list data, std::function, uv::Error)> callback) { - SendBinary({data.begin(), data.end()}, callback); + SendBinary({data.begin(), data.end()}, std::move(callback)); } /** @@ -226,7 +226,7 @@ class WebSocket : public std::enable_shared_from_this { void SendTextFragment( span data, std::function, uv::Error)> callback) { - Send(kOpText, data, callback); + Send(kOpText, data, std::move(callback)); } /** @@ -239,7 +239,7 @@ class WebSocket : public std::enable_shared_from_this { void SendTextFragment( std::initializer_list data, std::function, uv::Error)> callback) { - SendTextFragment({data.begin(), data.end()}, callback); + SendTextFragment({data.begin(), data.end()}, std::move(callback)); } /** @@ -252,7 +252,7 @@ class WebSocket : public std::enable_shared_from_this { void SendBinaryFragment( span data, std::function, uv::Error)> callback) { - Send(kOpBinary, data, callback); + Send(kOpBinary, data, std::move(callback)); } /** @@ -265,7 +265,7 @@ class WebSocket : public std::enable_shared_from_this { void SendBinaryFragment( std::initializer_list data, std::function, uv::Error)> callback) { - SendBinaryFragment({data.begin(), data.end()}, callback); + SendBinaryFragment({data.begin(), data.end()}, std::move(callback)); } /** @@ -277,7 +277,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendFragment(span data, bool fin, std::function, uv::Error)> callback) { - Send(kOpCont | (fin ? kFlagFin : 0), data, callback); + Send(kOpCont | (fin ? kFlagFin : 0), data, std::move(callback)); } /** @@ -289,7 +289,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendFragment(std::initializer_list data, bool fin, std::function, uv::Error)> callback) { - SendFragment({data.begin(), data.end()}, fin, callback); + SendFragment({data.begin(), data.end()}, fin, std::move(callback)); } /** @@ -298,9 +298,9 @@ class WebSocket : public std::enable_shared_from_this { * write completes. */ void SendPing(std::function callback = nullptr) { - SendPing({}, [callback](auto bufs, uv::Error err) { - if (callback) { - callback(err); + SendPing({}, [f = std::move(callback)](auto bufs, uv::Error err) { + if (f) { + f(err); } }); } @@ -313,7 +313,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendPing(span data, std::function, uv::Error)> callback) { - Send(kFlagFin | kOpPing, data, callback); + Send(kFlagFin | kOpPing, data, std::move(callback)); } /** @@ -324,7 +324,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendPing(std::initializer_list data, std::function, uv::Error)> callback) { - SendPing({data.begin(), data.end()}, callback); + SendPing({data.begin(), data.end()}, std::move(callback)); } /** @@ -333,9 +333,9 @@ class WebSocket : public std::enable_shared_from_this { * write completes. */ void SendPong(std::function callback = nullptr) { - SendPong({}, [callback](auto bufs, uv::Error err) { - if (callback) { - callback(err); + SendPong({}, [f = std::move(callback)](auto bufs, uv::Error err) { + if (f) { + f(err); } }); } @@ -348,7 +348,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendPong(span data, std::function, uv::Error)> callback) { - Send(kFlagFin | kOpPong, data, callback); + Send(kFlagFin | kOpPong, data, std::move(callback)); } /** @@ -359,7 +359,7 @@ class WebSocket : public std::enable_shared_from_this { */ void SendPong(std::initializer_list data, std::function, uv::Error)> callback) { - SendPong({data.begin(), data.end()}, callback); + SendPong({data.begin(), data.end()}, std::move(callback)); } /**