Commit 7d8dbb2a by xiongziliang

修复websocket客户端相关bug:#311

parent 87611169
...@@ -124,7 +124,8 @@ protected: ...@@ -124,7 +124,8 @@ protected:
if(Sec_WebSocket_Accept == const_cast<HttpHeader &>(headers)["Sec-WebSocket-Accept"]){ if(Sec_WebSocket_Accept == const_cast<HttpHeader &>(headers)["Sec-WebSocket-Accept"]){
//success //success
onWebSocketException(SockException()); onWebSocketException(SockException());
return 0; //后续全是websocket负载数据
return -1;
} }
shutdown(SockException(Err_shutdown,StrPrinter << "Sec-WebSocket-Accept mismatch")); shutdown(SockException(Err_shutdown,StrPrinter << "Sec-WebSocket-Accept mismatch"));
return 0; return 0;
...@@ -139,6 +140,16 @@ protected: ...@@ -139,6 +140,16 @@ protected:
*/ */
void onResponseCompleted() override {} 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 //TcpClient override
/** /**
...@@ -182,20 +193,6 @@ protected: ...@@ -182,20 +193,6 @@ protected:
} }
/** /**
* tcp收到数据
* @param pBuf
*/
void onRecv(const Buffer::Ptr &pBuf) override{
if(_onRecv){
//完成websocket握手后,拦截websocket数据并解析
_onRecv(pBuf);
}else{
//websocket握手数据
HttpClientImp::onRecv(pBuf);
}
}
/**
* tcp连接断开 * tcp连接断开
* @param ex * @param ex
*/ */
...@@ -299,9 +296,9 @@ private: ...@@ -299,9 +296,9 @@ private:
//触发连接成功事件 //触发连接成功事件
_delegate.onConnect(ex); _delegate.onConnect(ex);
//拦截websocket数据接收 //拦截websocket数据接收
_onRecv = [this](const Buffer::Ptr &pBuf){ _onRecv = [this](const char *data, int len){
//解析websocket数据包 //解析websocket数据包
this->WebSocketSplitter::decode((uint8_t*)pBuf->data(),pBuf->size()); this->WebSocketSplitter::decode((uint8_t *)data, len);
}; };
return; return;
} }
...@@ -320,7 +317,7 @@ private: ...@@ -320,7 +317,7 @@ private:
private: private:
string _Sec_WebSocket_Key; string _Sec_WebSocket_Key;
function<void(const Buffer::Ptr &pBuf)> _onRecv; function<void(const char *data, int len)> _onRecv;
ClientTypeImp<ClientType,DataType> &_delegate; ClientTypeImp<ClientType,DataType> &_delegate;
string _payload; string _payload;
}; };
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论