Skip to content

Commit f487007

Browse files
committed
1. set high water callback for send message.
2. dont' send msg when TcpConnection already closed.
1 parent be54683 commit f487007

5 files changed

Lines changed: 48 additions & 38 deletions

File tree

examples/BenchWebsocket.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ static void sendPacket(const HttpSession::Ptr& session, const char* data, size_t
2828
bw.writeINT8('"');
2929
bw.writeINT8('}');
3030

31-
auto frame = std::make_shared<std::string>();
31+
std::string frame;
3232
WebSocketFormat::wsFrameBuild(bw.getData(),
3333
bw.getPos(),
34-
*frame,
34+
frame,
3535
WebSocketFormat::WebSocketFrameType::TEXT_FRAME,
3636
true,
3737
true);
38-
session->send(frame);
38+
session->send(std::move(frame));
3939
}
4040

4141
int main(int argc, char **argv)

examples/BroadCastServer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static size_t getClientNum()
4949
return clients.size();
5050
}
5151

52-
static void broadCastPacket(const std::shared_ptr<std::string>& packet)
52+
static void broadCastPacket(const brynet::net::SendableMsg::Ptr & packet)
5353
{
5454
auto packetLen = packet->size();
5555
RecvPacketNum++;
@@ -115,7 +115,7 @@ int main(int argc, char** argv)
115115
break;
116116
}
117117

118-
auto packet = std::make_shared<std::string>(buffer, packetLen);
118+
auto packet = brynet::net::MakeStringMsg(buffer, packetLen);
119119
mainLoop->runAsyncFunctor([packet]()
120120
{
121121
broadCastPacket(packet);

examples/HttpServer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ int main(int argc, char **argv)
5353
std::cout << "frame enter of type:" << int(opcode) << std::endl;
5454
std::cout << "payload is:" << payload << std::endl;
5555
// echo frame
56-
auto frame = std::make_shared<std::string>();
56+
std::string frame;
5757
WebSocketFormat::wsFrameBuild(payload.c_str(),
5858
payload.size(),
59-
*frame,
59+
frame,
6060
WebSocketFormat::WebSocketFrameType::TEXT_FRAME,
6161
true,
6262
false);
63-
httpSession->send(frame);
63+
httpSession->send(std::move(frame));
6464
};
6565

6666
wrapper::HttpListenerBuilder listenBuilder;

include/brynet/net/TcpConnection.hpp

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,42 @@ namespace brynet { namespace net {
4747
virtual size_t size() = 0;
4848
};
4949

50+
class StringSendMsg : public SendableMsg
51+
{
52+
public:
53+
explicit StringSendMsg(const char* buffer, size_t len)
54+
:
55+
mMsg(buffer, len)
56+
{}
57+
58+
explicit StringSendMsg(std::string buffer)
59+
:
60+
mMsg(std::move(buffer))
61+
{}
62+
63+
const void* data() override
64+
{
65+
return static_cast<const void*>(mMsg.data());
66+
}
67+
size_t size() override
68+
{
69+
return mMsg.size();
70+
}
71+
72+
private:
73+
std::string mMsg;
74+
};
75+
76+
static SendableMsg::Ptr MakeStringMsg(const char* buffer, size_t len)
77+
{
78+
return std::make_shared<StringSendMsg>(buffer, len);
79+
}
80+
81+
static SendableMsg::Ptr MakeStringMsg(std::string buffer)
82+
{
83+
return std::make_shared<StringSendMsg>(std::move(buffer));
84+
}
85+
5086
class TcpConnection : public Channel,
5187
public brynet::base::NonCopyable,
5288
public std::enable_shared_from_this<TcpConnection>
@@ -162,40 +198,14 @@ namespace brynet { namespace net {
162198
size_t len,
163199
PacketSendedCallback&& callback = nullptr)
164200
{
165-
send(std::make_shared<std::string>(buffer, len), std::move(callback));
201+
send(MakeStringMsg(buffer, len), std::move(callback));
166202
}
167203

168204
void send(
169-
const std::shared_ptr<std::string>& packet,
205+
std::string buffer,
170206
PacketSendedCallback&& callback = nullptr)
171207
{
172-
class StringSendMsg : public SendableMsg
173-
{
174-
public:
175-
explicit StringSendMsg(std::shared_ptr<std::string>&& msg)
176-
:
177-
mMsg(std::move(msg))
178-
{}
179-
explicit StringSendMsg(const std::shared_ptr<std::string>& msg)
180-
:
181-
mMsg(msg)
182-
{}
183-
184-
const void* data() override
185-
{
186-
return static_cast<const void*>(mMsg->data());
187-
}
188-
189-
size_t size() override
190-
{
191-
return mMsg->size();
192-
}
193-
194-
private:
195-
std::shared_ptr<std::string> mMsg;
196-
};
197-
198-
send(std::make_shared<StringSendMsg>(packet), std::move(callback));
208+
send(MakeStringMsg(std::move(buffer)), std::move(callback));
199209
}
200210

201211
// setDataCallback(std::function<void(brynet::base::BasePacketReader&)>)

include/brynet/net/http/HttpService.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace brynet { namespace net { namespace http {
3232
void send(PacketType&& packet,
3333
TcpConnection::PacketSendedCallback&& callback = nullptr)
3434
{
35-
mSession->send(std::forward<std::shared_ptr<std::string>>(packet),
35+
mSession->send(std::forward<PacketType&&>(packet),
3636
std::move(callback));
3737
}
3838
void send(const char* packet,

0 commit comments

Comments
 (0)