#include "StdAfx.h"
#include "MeetingConnImpl.h"
#include "Poco/Timestamp.h"
#include "Poco/MD5Engine.h"
#include "MeetingFrameImpl.h"
using Poco::MD5Engine;
using Poco::DigestEngine;
using Poco::Timestamp;
#define BUF_LEN 1024*1024
MeetingConnImpl *MeetingConnImpl:: m_instance = NULL;
MeetingConnImpl *MeetingConnImpl::GetInstance(void)
{
if(m_instance == NULL)
{
m_instance = new MeetingConnImpl();
::atexit(ReleaseALL);
}
return m_instance;
}
MeetingConnImpl::MeetingConnImpl(void)
{
m_ulRoomID = 1;
m_mySessionID = 0;
m_userRole = 4;
m_bHasLogined = false;
m_bHasLoginRoom = false;
m_bLogicServerConnected = false;
m_bRawSockConnected = false;
m_TempRecvBuf = new char[BUF_LEN];
memset(m_strHeadImg,0,sizeof(m_strHeadImg));
memset(m_strUserAccount,0,sizeof(m_strUserAccount));
memset(m_strUserName,0,sizeof(m_strUserName));
memset(m_strServer,0,sizeof(m_strServer));
memset(m_TempRecvBuf,0,sizeof(m_TempRecvBuf));
memset(m_strLogin,0,sizeof(m_strLogin));
m_recvLen = 0;
m_pSock = NULL;
m_mySessionID = 0;
//m_pLogFile = new FileStream("c:\\command.txt");
m_bStop = false;
m_pIMeetingEvent = NULL;
}
MeetingConnImpl::~MeetingConnImpl(void)
{
if(m_TempRecvBuf)
{
delete []m_TempRecvBuf;
m_TempRecvBuf = NULL;
}
//释放这个指针的时候要判断线程是否已经结束了
while(thread.isRunning())
{
Thread::sleep(10);
}
if(m_pSock)
{
delete m_pSock;
m_pSock = NULL;
}
}
void MeetingConnImpl::ReConnect()
{
if(thread.isRunning()||m_bRawSockConnected == true || m_bLogicServerConnected == true ||m_bHasLogined == true )
return;
m_pSock = new StreamSocket();
try
{
if(m_pSock)
{
m_pSock->connectNB(SocketAddress(m_strServer));
}
}
catch (ConnectionRefusedException&)
{
m_pIMeetingEvent->OnNetEvent(NET_EVENT_TIME_OUT,"can't connect to login server");
return ;
}
catch(NetException&)
{
m_pIMeetingEvent->OnNetEvent(NET_EVENT_TIME_OUT,"can't connect to login server");
return ;
}
catch(IOException&)
{
m_pIMeetingEvent->OnNetEvent(NET_EVENT_TIME_OUT,"can't connect to login server");
return ;
}
/* 启动信令接收线程 */
m_bStop = false;
thread.start(*this);
}
long filesize(FILE*stream)
{
long curpos,length;
curpos=ftell(stream);
fseek(stream,0L,SEEK_END);
length=ftell(stream);
fseek(stream,curpos,SEEK_SET);
return length;
}
bool MeetingConnImpl::Connect(char* strServer,IMeetingFrameEvent* pIMeetingEvent)
{
if(thread.isRunning())
return false;
m_bRawSockConnected = false;
if(pIMeetingEvent == NULL)
return false;
m_pIMeetingEvent = pIMeetingEvent;
if(NULL != m_pSock)
{
m_pSock->close();
delete m_pSock;
m_pSock = NULL;
}
m_pSock = new StreamSocket();
strcpy(m_strServer,strServer);
try
{
if(m_pSock)
{
m_pSock->connectNB(SocketAddress(strServer));
}
}
catch (ConnectionRefusedException&)
{
m_pIMeetingEvent->OnNetEvent(NET_EVENT_TIME_OUT,"can't connect to login server");
goto OnError;
}
catch(NetException&)
{
m_pIMeetingEvent->OnNetEvent(NET_EVENT_TIME_OUT,"can't connect to login server");
goto OnError;
}
catch(IOException&)
{
m_pIMeetingEvent->OnNetEvent(NET_EVENT_TIME_OUT,"can't connect to login server");
goto OnError;
}
/* 启动信令接收线程 */
m_bStop = false;
thread.start(*this);
return true;
OnError:
m_pSock->close();
delete m_pSock;
m_pSock = NULL;
return false;
}
void MeetingConnImpl::Release()
{
m_bStop = true;
m_bHasLogined = false;
m_bHasLoginRoom = false;
thread.join();
m_bLogicServerConnected = m_bRawSockConnected = false;
}
//用房间号登录,呢称,房间密码,终端类型
void MeetingConnImpl::LoginWithRoomNo(const char* strUserName, const char* strRoomPassword,uint32_t clientType,uint32_t u32RoomID)
{
//md5
m_tryLoginCount = 0;
m_lastLoginTime = Timestamp();
m_loginType = 2;
m_userRole = 2;
m_ulRoomID = u32RoomID;
//MD5Engine engine;
//engine.update(strRoomPassword);
strcpy(m_strUserAccount, strUserName);
strcpy(m_strUserName, strUserName);
strcpy(m_strPassword,strRoomPassword);
m_clientType = clientType;
if(m_bHasLogined == true)
return;
m_bHasLogined = false;
char utfStr[1024]={0};
sprintf(utfStr, "{\"cmd\":\"loginWithRoomNo\",\"roomID\":%u,\"password\":\"%s\",\"client_type\":%u}\r\n",u32RoomID,m_strPassword,clientType);
strcpy(m_strLogin,utfStr);
}
//用户帐号,密码登入
void MeetingConnImpl::Login(const char* strUserName, const char* strPassword,uint32_t clientType,bool bEncrypt)
{
/*
std::string strTest="[18621066138,18979080001]";
std::string strTest2 = strTest;
Parser parser;
Var result;
try
{
result = parser.parse(strTest2);
Poco::JSON::Array::Ptr array =result.extract<Poco::JSON::Array::Ptr>();
for(Poco::Int32 i = 0; i<array->size();i++)
{
Var item = array->get(i);
unsigned long long phone = item;
cout<<phone;
}
}
catch(JSONException& jsone)
{
//printf("%s \n",buffer);
std::cout << jsone.message() << std::endl;
return;
}
*/
//md5
m_loginType = 1;
m_userRole = 2;
m_tryLoginCount = 0;
m_lastLoginTime = Timestamp();
if(bEncrypt)
{
MD5Engine engine;
engine.update(strPassword);
strcpy(m_strUserAccount, strUserName);
strcpy(m_strPassword, DigestEngine::digestToHex(engine.digest()).data());
}
else
{
strcpy(m_strUserAccount, strUserName);
strcpy(m_strPassword,strPassword);
}
m_clientType = clientType;
if(m_bHasLogined == true)
return;
m_bHasLogined = false;
char utfStr[1024]={0};
sprintf(utfStr, "{\"cmd\":\"login\",\"account\":\"%s\",\"password\":\"%s\",\"client_type\":%u}\r\n",m_strUserAccount,m_strPassword,clientType);
strcpy(m_strLogin,utfStr);
}
//登出
void MeetingConnImpl::Logout()
{
char * msg = new char[64];
strcpy(msg,"{\"cmd\":\"logout\"}\r\n");
FastMutex::ScopedLock autoLock(m_lock);
m_sendBufList.push(msg);
}
void MeetingConnImpl::SendTextMsg(uint64_t toSessionID,char * msg,char* fontName,uint32_t fontSize,uint32_t color,uint64_t flag)
{
std::string msg2 = HTTPCookie::escape(msg);
std::string strFont = HTTPCookie::escape(fontName);
char *utfStr = new char[1024*6];
if(fontName == NULL)
fontName = "";
sprintf(utfStr,"{\"cmd\":\"textChat\",\"fromSessionID\":%I64u,\"fromUserName\":\"%s\",\"toSessionID\":%I64u,\"msg\":\"%s\",\"fontSize\":%u,\"color\":%u,\"flag\":%I64u,\"fontName\":\"%s\",\"roomID\":%u}\r\n",
m_mySessionID,m_strUserName,toSessionID,msg2.data(),fontSize,color,flag,strFont.data(),m_ulRoomID);
FastMutex::ScopedLock autoLock(m_lock);
PMsgItem pMsgItem = new MsgItem();
pMsgItem->ulUserID = toSessionID;
pMsgItem->font_size = fontSize;
pMsgItem->color = color;
pMsgItem->fontFlat = flag;
strcpy(pMsgItem->userName,this->m_strUserName);
strcpy(pMsgItem->msg,msg);
strcpy(pMsgItem->familly,fontName);
//插入到列表
m_chatMsgList.push_back(vector<PMsgItem>::value_type(pMsgItem));
m_sendBufList.push(utfStr);
}
//是否连接
bool MeetingConnImpl::IsConnect()
{
return thread.isRunning();
}
//得到房间列表
void MeetingConnImpl::GetRoomList()
{
char *utfStr = new char[64];
sprintf(utfStr, "{\"cmd\":\"getRoomList\"}\r\n");
FastMutex::ScopedLock autoLock(m_lock);
m_sendBufList.push(utfStr);
}
//得到房间用户列表
void MeetingConnImpl::GetRoomUserList(uint32_t roomID)
{
char *utfStr = new char[64];
sprintf(utfStr, "{\"cmd\":\"getRoomUserList\",\"roomID\":%u}\r\n",roomID);
FastMutex::ScopedLock autoLock(m_lock);
m_sendBufList.push(utfStr);
}
//得到房间信息
void MeetingConnImpl::GetRoomInfo(uint32_t roomID)
{
char *utfStr = new char[128];
sprintf(utfStr, "{\"cmd\":\"getRoomInfo\",\"roomID\":%u}\r\n",roomID);
FastMutex::ScopedLock autoLock(m_lock);
m_sendBufList.push(utfStr);
}
//得到聊天历史记录
void MeetingConnImpl::GetChatHistory(uint32_t roomID)
{
char *utfStr = new char[128];
sprintf(utfStr, "{
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
价值500万商业视频会议源代码 (2000个子文件)
ZYMediaFrame.h.bak 7KB
MeetingConnImpl.cpp 38KB
MeetingFrameImpl.cpp 36KB
RoomWdg.cpp 19KB
ccommonwidget.cpp 14KB
LeftWdg.cpp 14KB
eventcenter.cpp 14KB
ccommondialog.cpp 13KB
UserLoginWdg.cpp 12KB
DlgAVSetting.cpp 10KB
ConvertDocThread.cpp 9KB
WdgDocShare.cpp 8KB
VideoWin.cpp 7KB
VideoMgr.cpp 7KB
videomonitormain.cpp 6KB
OcImageLoader.cpp 5KB
Meetinglistwdg.cpp 5KB
AppSetting.cpp 4KB
CListItemDelegate.cpp 4KB
ChatListModelDelegate.cpp 3KB
MeetingLoadingWidget.cpp 3KB
SeanThread.cpp 3KB
SpekerTestWdg.cpp 3KB
ButtonDelegate.cpp 3KB
main.cpp 3KB
MicTestWdg.cpp 3KB
ModifyPassWord.cpp 2KB
VoiceTestWdg.cpp 2KB
Meetinglistmodel.cpp 2KB
SeanAnimation.cpp 2KB
stdafx.cpp 2KB
VideoMonitorMgr.cpp 2KB
qupfile.cpp 2KB
qupfile.cpp 2KB
downloadthread.cpp 2KB
ServerAddressSet.cpp 2KB
SeanTestWdg.cpp 2KB
WdgNetInfo.cpp 2KB
OSInfo.cpp 2KB
MeetingDetailDelegate.cpp 1KB
MeetingRoomWordWdg.cpp 1KB
AboutWidget.cpp 1KB
SeanPptProgressWdg.cpp 1KB
SeanGifWdg.cpp 1KB
DlgApplyAdmin.cpp 1KB
autoupdate.cpp 1KB
SeanProgressBar.cpp 1KB
CListModel.cpp 1KB
SeanTableViewDelegate.cpp 1KB
ChatListModel.cpp 926B
ToolBar.cpp 749B
main.cpp 606B
LabelNetInfo.cpp 604B
SeanButton.cpp 465B
dllmain.cpp 393B
RoomSelectWdg.cpp 166B
wc.db 800KB
zlib.def 1KB
zlib.def 1KB
MeetingFrame.def 65B
QtGuid4.dll 14.2MB
QtGui4.dll 8.18MB
QtCored4.dll 4.32MB
mfc100u.dll 4.22MB
ZYMediaFrame.dll 3.81MB
ZYMediaFrame.dll 3.79MB
ZYMediaFrame.dll 2.92MB
ZYMediaFrame.dll 2.91MB
QtCore4.dll 2.48MB
QtNetworkd4.dll 1.7MB
msvcr100d.dll 1.43MB
dbghelp.dll 1.03MB
dbghelp.dll 1.03MB
dbghelp.dll 1.03MB
QtNetwork4.dll 1MB
QtNetwork4.dll 1MB
ZYMediaStream.dll 905KB
msvcr100.dll 756KB
msvcr100.dll 752KB
msvcp100d.dll 726KB
msvcrt.dll 620KB
CrashRpt1402d.dll 436KB
CrashRpt1402d.dll 436KB
msvcp100.dll 411KB
msvcp100.dll 411KB
qjpegd4.dll 366KB
qjpegd4.dll 366KB
ZYMediaStream.dll 320KB
quazip.dll 232KB
qjpeg4.dll 197KB
qjpeg4.dll 197KB
quazip.dll 138KB
CrashRpt1402.dll 135KB
CrashRpt1402.dll 135KB
zlib1.dll 105KB
zlib1.dll 105KB
crashdump.dmp 137KB
entries 3B
CrashSender1402d.exe 2.34MB
CrashSender1402d.exe 2.34MB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
rtc8_com
- 粉丝: 38
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页