Skip to content

Commit 19964e2

Browse files
committed
changed disconect
1 parent 4feecdc commit 19964e2

File tree

3 files changed

+11
-27
lines changed

3 files changed

+11
-27
lines changed

include/WS_Lite.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ namespace SL {
5454
enum SocketStatus :int {
5555
CONNECTING,
5656
CONNECTED,
57-
CLOSED,
58-
CLOSING
57+
CLOSING,
58+
CLOSED
5959
};
6060
enum ExtensionOptions : unsigned char {
6161
NO_OPTIONS = 0,

include/internal/WebSocketProtocol.h

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace SL {
3939
}
4040
template<class PARENTTYPE, class SOCKETTYPE> void writeexpire_from_now(const PARENTTYPE& parent, const SOCKETTYPE& socket, std::chrono::seconds secs)
4141
{
42-
42+
4343
std::error_code ec;
4444
if (secs.count() == 0) socket->write_deadline.cancel(ec);
4545
socket->write_deadline.expires_from_now(secs, ec);
@@ -57,26 +57,8 @@ namespace SL {
5757
template<class PARENTTYPE, class SOCKETTYPE>inline void startwrite(const PARENTTYPE& parent, const SOCKETTYPE& socket) {
5858
if (!socket->SendMessageQueue.empty()) {
5959
socket->Writing = true;
60-
if(socket->SocketStatus_ == SocketStatus::CONNECTED){
61-
auto msg(socket->SendMessageQueue.front());
62-
write(parent, socket, msg.msg);
63-
} else if (socket->SocketStatus_ == SocketStatus::CLOSING){
64-
//find the close message and discard all others
65-
auto discardedcount=0;
66-
while(!socket->SendMessageQueue.empty()){
67-
auto msg(socket->SendMessageQueue.front());
68-
if(msg.msg.code == OpCode::CLOSE){
69-
socket->SendMessageQueue.clear();//remove any remaining messages
70-
write(parent, socket, msg.msg);
71-
} else {
72-
socket->SendMessageQueue.pop_front();
73-
discardedcount+=1;
74-
}
75-
}
76-
SL_WS_LITE_LOG(Logging_Levels::INFO_log_level, "Sent Close message and discarded " <<discardedcount<< " other messages. Remaining messages "<<socket->SendMessageQueue.size());
77-
socket->SendMessageQueue.clear();//just in case
78-
}
79-
60+
auto msg(socket->SendMessageQueue.front());
61+
write(parent, socket, msg.msg);
8062
}
8163
else {
8264
socket->Writing = false;
@@ -120,15 +102,16 @@ namespace SL {
120102
if (parent->onDisconnection) {
121103
parent->onDisconnection(socket, msg.code, "");
122104
}
105+
socket->SendMessageQueue.clear();//clear all outbound messages
123106
socket->canceltimers();
124107
std::error_code ec;
125108
socket->Socket.lowest_layer().shutdown(asio::ip::tcp::socket::shutdown_both, ec);
126109
ec.clear();
127110
socket->Socket.lowest_layer().close(ec);
128-
}
129-
111+
}
112+
130113
template<class PARENTTYPE, class SOCKETTYPE, class SENDBUFFERTYPE>void closeImpl(const PARENTTYPE& parent, const SOCKETTYPE& socket, unsigned short code, const std::string& msg, const SENDBUFFERTYPE& networkmsg) {
131-
socket->Writing = false;
114+
socket->Writing = false;
132115
if (networkmsg.code == OpCode::CLOSE) {
133116
//failed when sending a close message... get out and notify
134117
handleclose(parent, socket, networkmsg);

src/internal/ClientImpl.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ namespace SL {
5757
auto read_buffer(std::make_shared<asio::streambuf>());
5858
asio::async_read_until(socket->Socket, *read_buffer, "\r\n\r\n", [read_buffer, accept_sha1, socket, self](const std::error_code& ec, size_t bytes_transferred) {
5959
if (!ec) {
60-
SL_WS_LITE_LOG(Logging_Levels::INFO_log_level, "Read Handshake bytes " << bytes_transferred);
60+
SL_WS_LITE_LOG(Logging_Levels::INFO_log_level, "Read Handshake bytes " << bytes_transferred<<" sizeof read_buffer "<< read_buffer->size());
61+
6162
std::istream stream(read_buffer.get());
6263

6364
std::unordered_map<std::string, std::string> header;

0 commit comments

Comments
 (0)