From 7d8dbb2a4b6f2b3d903778bdb9e42f333f40a974 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Tue, 26 May 2020 12:11:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dwebsocket=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E7=9B=B8=E5=85=B3bug:#311?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Http/WebSocketClient.h | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/Http/WebSocketClient.h b/src/Http/WebSocketClient.h index 2010da0f..93f140be 100644 --- a/src/Http/WebSocketClient.h +++ b/src/Http/WebSocketClient.h @@ -124,7 +124,8 @@ protected: if(Sec_WebSocket_Accept == const_cast(headers)["Sec-WebSocket-Accept"]){ //success onWebSocketException(SockException()); - return 0; + //后续全是websocket负载数据 + return -1; } shutdown(SockException(Err_shutdown,StrPrinter << "Sec-WebSocket-Accept mismatch")); return 0; @@ -139,6 +140,16 @@ protected: */ void onResponseCompleted() override {} + /** + * 接收websocket负载数据 + */ + void onResponseBody(const char *buf,int64_t size,int64_t recvedSize,int64_t totalSize) override{ + if(_onRecv){ + //完成websocket握手后,拦截websocket数据并解析 + _onRecv(buf, size); + } + }; + //TcpClient override /** @@ -181,20 +192,6 @@ protected: HttpClientImp::onConnect(ex); } - /** - * tcp收到数据 - * @param pBuf - */ - void onRecv(const Buffer::Ptr &pBuf) override{ - if(_onRecv){ - //完成websocket握手后,拦截websocket数据并解析 - _onRecv(pBuf); - }else{ - //websocket握手数据 - HttpClientImp::onRecv(pBuf); - } - } - /** * tcp连接断开 * @param ex @@ -299,9 +296,9 @@ private: //触发连接成功事件 _delegate.onConnect(ex); //拦截websocket数据接收 - _onRecv = [this](const Buffer::Ptr &pBuf){ + _onRecv = [this](const char *data, int len){ //解析websocket数据包 - this->WebSocketSplitter::decode((uint8_t*)pBuf->data(),pBuf->size()); + this->WebSocketSplitter::decode((uint8_t *)data, len); }; return; } @@ -320,7 +317,7 @@ private: private: string _Sec_WebSocket_Key; - function _onRecv; + function _onRecv; ClientTypeImp &_delegate; string _payload; };