diff options
author | Norbert Preining <norbert@preining.info> | 2024-02-28 03:01:23 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-02-28 03:01:23 +0000 |
commit | 0afdc3e8c2d8e96d0cd0a5f05f1481a4eecc51d2 (patch) | |
tree | 805f2acf8e0115574bc5781d1dfb87fbe2e63ba8 /graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp | |
parent | a64a01e8eaa2c096e7879421f075ebfa2a8bb7f0 (diff) |
CTAN sync 202402280301
Diffstat (limited to 'graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp')
-rw-r--r-- | graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp b/graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp index 799d0aec9a..4b3a9aea35 100644 --- a/graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp +++ b/graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp @@ -97,18 +97,18 @@ namespace lsp { { do_read(); } - void do_write(const std::string& data) + void do_write(const char* data, size_t size) { - socket_.async_write_some(boost::asio::buffer(data.data(), data.size()), - boost::asio::bind_executor(strand_,[this](boost::system::error_code ec, std::size_t n) - { - if (!ec) - { - return; - } - proxy_->error_message = ec.message(); - - })); + socket_.async_write_some(boost::asio::buffer(data, size), + boost::asio::bind_executor(strand_,[this](boost::system::error_code ec, std::size_t n) + { + if (!ec) + { + return; + } + proxy_->error_message = ec.message(); + + })); } void do_read() { @@ -140,13 +140,23 @@ namespace lsp { tcp_stream_wrapper& tcp_stream_wrapper::write(const std::string& c) { - session.do_write(c); - return *this; + size_t off = 0; + for(;off < c.size();){ + if(off + 1024 < c.size()){ + session.do_write(c.data()+off,1024); + off += 1024; + }else{ + session.do_write(c.data()+off,c.size() - off); + break; + } + } + return *this; } tcp_stream_wrapper& tcp_stream_wrapper::write(std::streamsize _s) { - session.do_write(std::to_string(_s)); + auto s = std::to_string(_s); + session.do_write(s.data(),s.size()); return *this; } @@ -195,7 +205,7 @@ namespace lsp { TcpServer::TcpServer(const std::string& address, const std::string& port, std::shared_ptr < MessageJsonHandler> json_handler, std::shared_ptr < Endpoint> localEndPoint, lsp::Log& log, uint32_t _max_workers) - : point(json_handler, localEndPoint, log, _max_workers),d_ptr(new Data( log, _max_workers)) + : point(json_handler, localEndPoint, log,lsp::JSONStreamStyle::Standard, _max_workers),d_ptr(new Data( log, _max_workers)) { |