close method change and fix code (#28)
* close method change and fix code * missing mutex
This commit is contained in:
parent
401fc39879
commit
b2aca491b6
@ -474,14 +474,8 @@ namespace ix
|
|||||||
std::string reason(_rxbuf.begin()+ws.header_size + 2,
|
std::string reason(_rxbuf.begin()+ws.header_size + 2,
|
||||||
_rxbuf.begin()+ws.header_size + 2 + (size_t) ws.N);
|
_rxbuf.begin()+ws.header_size + 2 + (size_t) ws.N);
|
||||||
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_closeDataMutex);
|
|
||||||
_closeCode = code;
|
|
||||||
_closeReason = reason;
|
|
||||||
_closeWireSize = _rxbuf.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
close();
|
close(code, reason, _rxbuf.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -781,7 +775,12 @@ namespace ix
|
|||||||
_lastSendTimePoint = std::chrono::steady_clock::now();
|
_lastSendTimePoint = std::chrono::steady_clock::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebSocketTransport::close()
|
void WebSocketTransport::close(uint16_t code, const std::string& reason)
|
||||||
|
{
|
||||||
|
close(code, reason, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebSocketTransport::close(uint16_t code, const std::string& reason, size_t closeWireSize)
|
||||||
{
|
{
|
||||||
_requestInitCancellation = true;
|
_requestInitCancellation = true;
|
||||||
|
|
||||||
@ -789,21 +788,22 @@ namespace ix
|
|||||||
|
|
||||||
// See list of close events here:
|
// See list of close events here:
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
|
// https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
|
||||||
// We use 1000: normal closure.
|
const std::string closure{(char)(code >> 8), (char)(code & 0xff)};
|
||||||
//
|
|
||||||
// >>> struct.pack('!H', 1000)
|
|
||||||
// b'\x03\xe8'
|
|
||||||
//
|
|
||||||
const std::string normalClosure = std::string("\x03\xe8");
|
|
||||||
bool compress = false;
|
bool compress = false;
|
||||||
sendData(wsheader_type::CLOSE, normalClosure, compress);
|
sendData(wsheader_type::CLOSE, closure, compress);
|
||||||
setReadyState(CLOSING);
|
setReadyState(CLOSING);
|
||||||
|
|
||||||
_socket->wakeUpFromPoll(Socket::kCloseRequest);
|
_socket->wakeUpFromPoll(Socket::kCloseRequest);
|
||||||
_socket->close();
|
_socket->close();
|
||||||
|
|
||||||
_closeCode = 1000;
|
{
|
||||||
_closeReason = "Normal Closure";
|
std::lock_guard<std::mutex> lock(_closeDataMutex);
|
||||||
|
_closeCode = code;
|
||||||
|
_closeReason = reason;
|
||||||
|
_closeWireSize = closeWireSize;
|
||||||
|
}
|
||||||
|
|
||||||
setReadyState(CLOSED);
|
setReadyState(CLOSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ namespace ix
|
|||||||
WebSocketSendInfo sendText(const std::string& message,
|
WebSocketSendInfo sendText(const std::string& message,
|
||||||
const OnProgressCallback& onProgressCallback);
|
const OnProgressCallback& onProgressCallback);
|
||||||
WebSocketSendInfo sendPing(const std::string& message);
|
WebSocketSendInfo sendPing(const std::string& message);
|
||||||
void close();
|
void close(uint16_t code = 1000, const std::string& reason = "Normal closure");
|
||||||
ReadyStateValues getReadyState() const;
|
ReadyStateValues getReadyState() const;
|
||||||
void setReadyState(ReadyStateValues readyStateValue);
|
void setReadyState(ReadyStateValues readyStateValue);
|
||||||
void setOnCloseCallback(const OnCloseCallback& onCloseCallback);
|
void setOnCloseCallback(const OnCloseCallback& onCloseCallback);
|
||||||
@ -164,6 +164,8 @@ namespace ix
|
|||||||
// No data was send through the socket for longer than the heartbeat period
|
// No data was send through the socket for longer than the heartbeat period
|
||||||
bool heartBeatPeriodExceeded();
|
bool heartBeatPeriodExceeded();
|
||||||
|
|
||||||
|
void close(uint16_t code, const std::string& reason, size_t closeWireSize);
|
||||||
|
|
||||||
void sendOnSocket();
|
void sendOnSocket();
|
||||||
WebSocketSendInfo sendData(wsheader_type::opcode_type type,
|
WebSocketSendInfo sendData(wsheader_type::opcode_type type,
|
||||||
const std::string& message,
|
const std::string& message,
|
||||||
|
Loading…
Reference in New Issue
Block a user