用微软的实时通信API集成丰富的客户端通信
2010-07-15 20:45:25 来源:WEB开发网初始化会话
在应用程序与其他参与者连接之前,它必须能够处理会话中的RTC事件。PC-to-PC的通信中,应用程序捕获即时消息事件、音量事件、媒体事件、客户端消息事件和会话状态改变事件。下述代码展示了怎样创建一个事件过滤器来捕获RTC客户端的特定事件。
lEventMask设置了一组应用程序感兴趣的事件。(为获得全部的事件列表,可在 MSDN 站点搜索RTC_EVENT,这样可以获得关于每一事件的更多信息。)CRTCEvents 类在客户端之间分配事件。RTCEvents 对象在应用程序和 IRTCEventNotification 接口之间创建接口。所有的RTC事件由RTCEvents 类处理。
// Set the event filter to listen for RTC events
// Using RTCEF_ALL will listen for all events
// For the sample application, we will demonstrate how to set the
// event listener for a limited set of events.
long lEventMask = RTCEF_SESSION_STATE_CHANGE |
RTCEF_MESSAGING |
RTCEF_MEDIA |
RTCEF_INTENSITY |
RTCEF_CLIENT;
hr = m_pClient->put_EventFilter( lEventMask );
// Create the event sink object
m_pEvents = new CRTCEvents;
// initialize the event handler
hr = m_pEvents->Advise( m_pClient, m_hWnd );
// Set the listen mode for RTC client
// RTCLM_BOTH opens the standard SIP port 5060, as well as
// a dynamic port.
hr = m_pClient->put_ListenForIncomingSessions(RTCLM_BOTH);
音视频的媒体类型可在会话过程中添加或删除,因此客户端必须能监听这些类型的事件。在"处理实时流会话事件"这一节中可获得关于状态改变和事件处理的更多信息。
处理RTC事件
一旦事件处理者 IRTCEventNotification 接收器中进行了注册,接收和处理RTC事件就变得相当的容易了。当例子程序接收到RTC事件时,应用程序的事件处理者就对应用程序的消息处理者发一个消息。OnRTCEvent() 处理应用程序接收到的所有事件。
OnRTCEvent(UINT message, WPARAM wParam, LPARAM lParam)
{
// Based on the RTC_EVENT type, query for the
// appropriate event interface and call a helper
// method to handle the event
switch ( wParam )
{
...
case RTCE_MEDIA:
{
IRTCMediaEvent * pEvent = NULL;
hr = pDisp->QueryInterface( IID_IRTCMediaEvent,
(void **)&pEvent );
if (SUCCEEDED(hr))
{
OnRTCMediaEvent(pEvent);
SAFE_RELEASE(pEvent);
}
}
break;
...
}
更多精彩
赞助商链接