Skip to content

Commit e566ace

Browse files
committed
updated test
1 parent 6b68d36 commit e566ace

File tree

2 files changed

+74
-3
lines changed

2 files changed

+74
-3
lines changed

Test/main.cpp

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void wssautobahntest() {
1717
listener.set_ReadTimeout(100);
1818
listener.set_WriteTimeout(100);
1919
auto lastheard = std::chrono::high_resolution_clock::now();
20-
listener.onHttpUpgrade([&](const SL::WS_LITE::WSocket& socket) {
20+
listener.onHttpUpgrade([&](const SL::WS_LITE::WSocket& socket) {
2121
lastheard = std::chrono::high_resolution_clock::now();
2222
SL_WS_LITE_LOG(SL::WS_LITE::Logging_Levels::INFO_log_level, "listener::onHttpUpgrade");
2323
});
@@ -62,6 +62,16 @@ void generaltest() {
6262
SL_WS_LITE_LOG(SL::WS_LITE::Logging_Levels::INFO_log_level, "listener::onConnection");
6363

6464
});
65+
listener.onMessage([&](const SL::WS_LITE::WSocket& socket, const SL::WS_LITE::WSMessage& message) {
66+
lastheard = std::chrono::high_resolution_clock::now();
67+
SL::WS_LITE::WSMessage msg;
68+
msg.Buffer = std::shared_ptr<unsigned char>(new unsigned char[message.len], [](unsigned char* p) { delete[] p; });
69+
msg.len = message.len;
70+
msg.code = message.code;
71+
msg.data = msg.Buffer.get();
72+
memcpy(msg.data, message.data, message.len);
73+
listener.send(socket, msg, false);
74+
});
6575
listener.onDisconnection([&](const SL::WS_LITE::WSocket& socket, unsigned short code, const std::string& msg) {
6676
lastheard = std::chrono::high_resolution_clock::now();
6777
SL_WS_LITE_LOG(SL::WS_LITE::Logging_Levels::INFO_log_level, "listener::onDisconnection");
@@ -89,9 +99,70 @@ void generaltest() {
8999
std::this_thread::sleep_for(200ms);
90100
}
91101
}
102+
void multithreadtest() {
103+
std::cout << "Starting Multi threaded test..." << std::endl;
104+
SL::WS_LITE::ThreadCount thrdcount(4);
105+
SL::WS_LITE::PortNumber port(3003);
106+
auto listener = SL::WS_LITE::WSListener::CreateListener(thrdcount, port);
107+
auto lastheard = std::chrono::high_resolution_clock::now();
108+
listener.onHttpUpgrade([&](const SL::WS_LITE::WSocket& socket) {
109+
lastheard = std::chrono::high_resolution_clock::now();
110+
});
111+
listener.onConnection([&](const SL::WS_LITE::WSocket& socket, const std::unordered_map<std::string, std::string>& header) {
112+
lastheard = std::chrono::high_resolution_clock::now();
113+
});
114+
listener.onDisconnection([&](const SL::WS_LITE::WSocket& socket, unsigned short code, const std::string& msg) {
115+
lastheard = std::chrono::high_resolution_clock::now();
116+
});
117+
listener.onMessage([&](const SL::WS_LITE::WSocket& socket, const SL::WS_LITE::WSMessage& message) {
118+
lastheard = std::chrono::high_resolution_clock::now();
119+
SL::WS_LITE::WSMessage msg;
120+
msg.Buffer = std::shared_ptr<unsigned char>(new unsigned char[message.len], [](unsigned char* p) { delete[] p; });
121+
msg.len = message.len;
122+
msg.code = message.code;
123+
msg.data = msg.Buffer.get();
124+
memcpy(msg.data, message.data, message.len);
125+
listener.send(socket, msg, false);
126+
});
127+
listener.startlistening();
128+
std::vector<SL::WS_LITE::WSClient> clients;
129+
clients.reserve(100);
130+
for (auto i = 0; i < 100; i++) {
131+
clients.push_back(SL::WS_LITE::WSClient::CreateClient(thrdcount));
132+
clients[i].onHttpUpgrade([&](const SL::WS_LITE::WSocket& socket) {
133+
lastheard = std::chrono::high_resolution_clock::now();
134+
});
135+
clients[i].onConnection([&clients, &lastheard, i](const SL::WS_LITE::WSocket& socket, const std::unordered_map<std::string, std::string>& header) {
136+
lastheard = std::chrono::high_resolution_clock::now();
137+
SL::WS_LITE::WSMessage msg;
138+
std::string txtmsg = "testing msg";
139+
txtmsg += std::to_string(i);
140+
msg.Buffer = std::shared_ptr<unsigned char>(new unsigned char[txtmsg.size()], [](unsigned char* p) { delete[] p; });
141+
msg.len = txtmsg.size();
142+
msg.code = SL::WS_LITE::OpCode::TEXT;
143+
msg.data = msg.Buffer.get();
144+
memcpy(msg.data, txtmsg.data(), txtmsg.size());
145+
clients[i].send(socket, msg, false);
146+
});
147+
clients[i].onDisconnection([&](const SL::WS_LITE::WSocket& socket, unsigned short code, const std::string& msg) {
148+
lastheard = std::chrono::high_resolution_clock::now();
149+
});
150+
clients[i].onMessage([&](const SL::WS_LITE::WSocket& socket, const SL::WS_LITE::WSMessage& message) {
151+
lastheard = std::chrono::high_resolution_clock::now();
152+
});
153+
clients[i].connect("localhost", port);
154+
155+
}
156+
157+
while (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - lastheard).count() < 2000) {
158+
std::this_thread::sleep_for(200ms);
159+
}
160+
}
92161
int main(int argc, char* argv[]) {
93162
wssautobahntest();
94163
std::this_thread::sleep_for(1s);
95164
generaltest();
165+
std::this_thread::sleep_for(1s);
166+
multithreadtest();
96167
return 0;
97168
}

include/internal/WebSocketProtocol.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ namespace SL {
147147
work(std::make_unique<asio::io_service::work>(io_service)) {
148148
Threads.resize(threadcount.value);
149149
for (auto& ctx : Threads) {
150-
ctx.Thread = std::thread([&]() {
150+
ctx.Thread = std::move(std::thread([&]() {
151151
std::error_code ec;
152152
io_service.run(ec);
153-
});
153+
}));
154154
inflateInit2(&ctx.inflationStream, -MAX_WBITS);
155155
ctx.inflationBuffer = std::make_unique<char[]>(LARGE_BUFFER_SIZE);
156156
}

0 commit comments

Comments
 (0)