![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
#include
"anychat.h" ![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
#include <stdlib.h>
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
#include <stdio.h>
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
CAnyChat::CAnyChat()
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
m_dwRemoteUserId = -1;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
CAnyChat::~CAnyChat()
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
//
void CAnyChat::OpenRemoteUserStream(
void)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
if(m_dwRemoteUserId != (DWORD)-1)
// already opned remote user stream
return;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
DWORD dwUserNum = 0;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
BRAC_GetOnlineUser(NULL, dwUserNum);
if(dwUserNum == 0)
return;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
LPDWORD lpUserList = (LPDWORD)malloc(
sizeof(DWORD) * dwUserNum);
if(!lpUserList)
return;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
BRAC_GetOnlineUser(lpUserList, dwUserNum);
for(
int i=0; i<(
int)dwUserNum; i++)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
m_dwRemoteUserId = lpUserList[i];
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
BRAC_UserCameraControl(m_dwRemoteUserId, TRUE);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
BRAC_UserSpeakControl(m_dwRemoteUserId, TRUE);
break;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 连接服务器消息
void CAnyChat::OnAnyChatConnectMessage(BOOL bSuccess)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"On Connect: bSuccess(%d)\r\n",(
int)bSuccess);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户登陆消息
void CAnyChat::OnAnyChatLoginMessage(DWORD dwUserId, DWORD dwErrorCode)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"On Login: dwUserId(%d), ErrorCode:%d\r\n",(
int)dwUserId,dwErrorCode);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户进入房间消息
void CAnyChat::OnAnyChatEnterRoomMessage(DWORD dwRoomId, DWORD dwErrorCode)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"On EnterRoom(dwRoomId=%d, dwErrorCode=%d)\r\n",dwRoomId,dwErrorCode);
if(dwErrorCode == 0)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
BRAC_UserCameraControl(-1,TRUE);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
BRAC_UserSpeakControl(-1, TRUE);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 房间在线用户消息
void CAnyChat::OnAnyChatOnlineUserMessage(DWORD dwUserNum, DWORD dwRoomId)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"Onlineuser(dwUserNum=%d, dwRoomId=%d)\r\n",dwUserNum,dwRoomId);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
OpenRemoteUserStream();
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户打开/关闭音频设备设备消息
void CAnyChat::OnAnyChatMicStateChgMessage(DWORD dwUserId, BOOL bOpenMic)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户进入/退出房间消息
void CAnyChat::OnAnyChatUserAtRoomMessage(DWORD dwUserId, BOOL bEnter)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"On UserAtRoom(dwUserId=%d, bEnter=%d)\r\n",(
int)dwUserId,(
int)bEnter);
if(dwUserId == m_dwRemoteUserId && !bEnter)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
m_dwRemoteUserId = -1;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
OpenRemoteUserStream();
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
//网络断开消息
void CAnyChat::OnAnyChatLinkCloseMessage(DWORD dwErrorCode)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"On Link Close(reason=%d)\r\n",dwErrorCode);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
m_dwRemoteUserId = -1;
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户摄像头状态改变消息
void CAnyChat::OnAnyChatCameraStateChgMessage(DWORD dwUserId, DWORD dwState)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户聊天模式改变消息
void CAnyChat::OnAnyChatChatModeChgMessage(DWORD dwUserId, BOOL bPublicChat)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户活动状态发生变化消息
void CAnyChat::OnAnyChatActiveStateChgMessage(DWORD dwUserId, DWORD dwState)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// P2P连接状态变化消息
void CAnyChat::OnAnyChatP2PConnectStateMessage(DWORD dwUserId, DWORD dwState)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
fprintf(stdout,
"On P2P Connect State Change(dwUserId=%d, dwState=%d)\r\n",(
int)dwUserId,dwState);
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户私聊请求消息
void CAnyChat::OnAnyChatPrivateRequestMessage(DWORD dwUserId, DWORD dwRequestId)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户私聊请求回复消息
void CAnyChat::OnAnyChatPrivateEchoMessage(DWORD dwUserId, DWORD dwErrorCode)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 用户退出私聊消息
void CAnyChat::OnAnyChatPrivateExitMessage(DWORD dwUserId, DWORD dwErrorCode)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// SDK警告消息
void CAnyChat::OnAnyChatSDKWarningMessage(DWORD dwErrorCode, DWORD dwReserved)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 视频数据回调
void CAnyChat::OnAnyChatVideoDataCallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, LPBITMAPINFOHEADER lpbmiHeader)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 音频数据回调
void CAnyChat::OnAnyChatAudioDataCallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, LPWAVEFORMATEX lpWaveFormatEx)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 发送文字的回调函数
void CAnyChat::OnAnyChatTextMsgCallBack(DWORD dwFromUserid, DWORD dwToUserid, BOOL bSecret, LPCTSTR lpMsgBuf, DWORD dwLen)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 透明通道回调函数
void CAnyChat::OnAnyChatTransBufferCallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 透明通道数据扩展回调函数
void CAnyChat::OnAnyChatTransBufferExCallBack(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 文件传输回调函数
void CAnyChat::OnAnyChatTransFileCallBack(DWORD dwUserid, LPCTSTR lpFileName, LPCTSTR lpTempFilePath, DWORD dwFileLength, DWORD wParam, DWORD lParam, DWORD dwTaskId)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 音量变化回调函数
void CAnyChat::OnAnyChatVolumeChangeCallBack(BRAC_AudioDevice device, DWORD dwCurrentVolume)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// SDK Filter 通信数据回调函数
void CAnyChat::OnAnyChatSDKFilterDataCallBack(LPBYTE lpBuf, DWORD dwLen)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 录像、快照任务完成回调函数
void CAnyChat::OnAnyChatRecordSnapShotCallBack(DWORD dwUserid, LPCTSTR lpFileName, DWORD dwParam, BOOL bRecordType)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}
// 异步消息通知回调函数
void CAnyChat::OnAnyChatNotifyMessageCallBack(DWORD dwNotifyMsg, DWORD wParam, DWORD lParam)
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
{
![InBlock.gif](p_w_picpaths/editer/InBlock.gif)
}