PASCAL wWinMain
->MainWnd::PreTranslateMessage
->MainWnd::OnDefaultAction
Conductor::StartLogin
->PeerConnectionClient::Connect
->PeerConnectionClient::DoConnect
Conductor::ConnectToPeer
该函数还初始化CreatePeerConnection、AddStreams。
->PeerConnection::CreateOffer
->WebRtcSession::CreateOffer
->WebRtcSessionDescriptionFactory::CreateOffer
->WebRtcSessionDescriptionFactory::SetCertificate
->WebRtcSessionDescriptionFactory::InternalCreateOffer
->WebRtcSessionDescriptionFactory::PostCreateSessionDescriptionSucceeded(MSG_CREATE_SESSIONDESCRIPTION_SUCCESS消息)
->WebRtcSessionDescriptionFactory::OnMessage
->Conductor::OnSuccess
->Conductor::SendMessage(SEND_MESSAGE_TO_PEER消息)
->PeerConnectionClient::SendToPeer
control_socket_->SignalReadEvent.connect(this,&PeerConnectionClient::OnRead);
hanging_get_->SignalReadEvent.connect(this,&PeerConnectionClient::OnHangingGetRead);
->ReadIntoBuffer
->ParseServerResponse等
说明:
Client端使用两个socket与Server通讯:control_socket_、hanging_get_。
1、control_socket_负责login、主动发起的sdp信令。
2、hanging_get_负责接收peer端经过server转发给本端的sdp。
该demo里面的一条SDP对应一个SOCK_STREAM。也就是传输完一条SDP信令,关闭一次SOCK_STREAM。下次再有数据要传,就重新打开。
server侧的DataSocket::Send发送关闭命令
Client侧的PeerConnectionClient::ReadIntoBuffer受理关闭请求
这样设计原因如下:
1、NAT的session生命期时间不固定,之前建立好的链接,可能被随时切断。所以当网络报文发送不是十分密集的情况下,一个交互关闭一次SOCK_STREAM,比较安全。
2、定义两个control_socket_、hanging_get_原因:control_socket_仅负责收发client发起的SDP信令。hanging_get_仅负责对端Client通过Server转发过来的SDP信令。这两种信令有可能在同一时间处理,若仅使用一个control_socket_,会出现处理不过来异常。