Skip to content

Commit 99217d8

Browse files
committed
websocket: Remove generalized-lambda-capture to make c++11 compatible
1 parent 202be36 commit 99217d8

File tree

1 file changed

+40
-24
lines changed

1 file changed

+40
-24
lines changed

include/crow/websocket.h

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,7 @@ namespace crow
138138
/// Usually invoked to check if the other point is still online.
139139
void send_ping(std::string msg) override
140140
{
141-
dispatch([this, msg = std::move(msg)]() mutable {
142-
auto header = build_header(0x9, msg.size());
143-
write_buffers_.emplace_back(std::move(header));
144-
write_buffers_.emplace_back(std::move(msg));
145-
do_write();
146-
});
141+
send_data(0x9, std::move(msg));
147142
}
148143

149144
/// Send a "Pong" message.
@@ -152,34 +147,19 @@ namespace crow
152147
/// Usually automatically invoked as a response to a "Ping" message.
153148
void send_pong(std::string msg) override
154149
{
155-
dispatch([this, msg = std::move(msg)]() mutable {
156-
auto header = build_header(0xA, msg.size());
157-
write_buffers_.emplace_back(std::move(header));
158-
write_buffers_.emplace_back(std::move(msg));
159-
do_write();
160-
});
150+
send_data(0xA, std::move(msg));
161151
}
162152

163153
/// Send a binary encoded message.
164154
void send_binary(std::string msg) override
165155
{
166-
dispatch([this, msg = std::move(msg)]() mutable {
167-
auto header = build_header(2, msg.size());
168-
write_buffers_.emplace_back(std::move(header));
169-
write_buffers_.emplace_back(std::move(msg));
170-
do_write();
171-
});
156+
send_data(0x2, std::move(msg));
172157
}
173158

174159
/// Send a plaintext message.
175160
void send_text(std::string msg) override
176161
{
177-
dispatch([this, msg = std::move(msg)]() mutable {
178-
auto header = build_header(1, msg.size());
179-
write_buffers_.emplace_back(std::move(header));
180-
write_buffers_.emplace_back(std::move(msg));
181-
do_write();
182-
});
162+
send_data(0x1, std::move(msg));
183163
}
184164

185165
/// Send a close signal.
@@ -657,6 +637,42 @@ namespace crow
657637
delete this;
658638
}
659639

640+
641+
struct SendMessageType
642+
{
643+
std::string payload;
644+
Connection* self;
645+
int opcode;
646+
647+
void operator()()
648+
{
649+
self->send_data_impl(this);
650+
}
651+
};
652+
653+
static_assert(
654+
std::is_nothrow_move_assignable<SendMessageType>::value &&
655+
std::is_nothrow_move_constructible<SendMessageType>::value,
656+
"SendMessageType must be nothrow movable!");
657+
658+
void send_data_impl(SendMessageType* s)
659+
{
660+
auto header = build_header(s->opcode, s->payload.size());
661+
write_buffers_.emplace_back(std::move(header));
662+
write_buffers_.emplace_back(std::move(s->payload));
663+
do_write();
664+
}
665+
666+
void send_data(int opcode, std::string&& msg)
667+
{
668+
SendMessageType event_arg{
669+
std::move(msg),
670+
this,
671+
opcode};
672+
673+
post(std::move(event_arg));
674+
}
675+
660676
private:
661677
Adaptor adaptor_;
662678
Handler* handler_;

0 commit comments

Comments
 (0)