确保attachServer会被触发

This commit is contained in:
xiongziliang 2018-09-26 23:37:07 +08:00
parent f53879cff1
commit f98546a64c

View File

@ -30,6 +30,7 @@
#include "Common/config.h" #include "Common/config.h"
#include "Rtsp/Rtsp.h" #include "Rtsp/Rtsp.h"
#include "Network/TcpSession.h" #include "Network/TcpSession.h"
#include "Network/TcpServer.h"
#include "Rtmp/RtmpMediaSource.h" #include "Rtmp/RtmpMediaSource.h"
#include "Rtmp/FlvMuxer.h" #include "Rtmp/FlvMuxer.h"
#include "HttpRequestSplitter.h" #include "HttpRequestSplitter.h"
@ -152,6 +153,11 @@ public:
_session->onManager(); _session->onManager();
} }
} }
void attachServer(const TcpServer &server) override{
HttpSession::attachServer(server);
_weakServer = const_cast<TcpServer &>(server).shared_from_this();
}
protected: protected:
/** /**
* webSocket数据包 * webSocket数据包
@ -160,22 +166,32 @@ protected:
void onWebSocketDecodeHeader(const WebSocketHeader &packet) override{ void onWebSocketDecodeHeader(const WebSocketHeader &packet) override{
//新包,原来的包残余数据清空掉 //新包,原来的包残余数据清空掉
_remian_data.clear(); _remian_data.clear();
if(_firstPacket){
_firstPacket = false; if(!_firstPacket){
_session = std::make_shared<SessionImp>(nullptr,_sock); return;
//此处截取数据并进行websocket协议打包
weak_ptr<WebSocketSession> weakSelf = dynamic_pointer_cast<WebSocketSession>(shared_from_this());
_session->setOnBeforeSendCB([weakSelf](const Buffer::Ptr &buf){
auto strongSelf = weakSelf.lock();
if(strongSelf){
bool mask_flag = strongSelf->_mask_flag;
strongSelf->_mask_flag = false;
strongSelf->WebSocketSplitter::encode((uint8_t *)buf->data(),buf->size());
strongSelf->_mask_flag = mask_flag;
}
return buf->size();
});
} }
//这是个WebSocket会话而不是普通的Http会话
_firstPacket = false;
_session = std::make_shared<SessionImp>(nullptr,_sock);
auto strongServer = _weakServer.lock();
if(strongServer){
_session->attachServer(*strongServer);
}
//此处截取数据并进行websocket协议打包
weak_ptr<WebSocketSession> weakSelf = dynamic_pointer_cast<WebSocketSession>(shared_from_this());
_session->setOnBeforeSendCB([weakSelf](const Buffer::Ptr &buf){
auto strongSelf = weakSelf.lock();
if(strongSelf){
bool mask_flag = strongSelf->_mask_flag;
strongSelf->_mask_flag = false;
strongSelf->WebSocketSplitter::encode((uint8_t *)buf->data(),buf->size());
strongSelf->_mask_flag = mask_flag;
}
return buf->size();
});
} }
/** /**
@ -276,6 +292,7 @@ private:
std::shared_ptr<SessionImp> _session; std::shared_ptr<SessionImp> _session;
string _remian_data; string _remian_data;
bool _firstPacket = true; bool _firstPacket = true;
weak_ptr<TcpServer> _weakServer;
}; };
/** /**