@@ -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+ }
92161int 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}
0 commit comments