BOOL SessionLayout::_DisplayMsgToIE(IN MessageEntity msg)
{
	CString jsInterface = _T("sendMessage");
	module::UserInfoEntity userInfo;
	if (!module::getUserListModule()->getUserInfoBySId(msg.talkerSid, userInfo))
	{
		return FALSE;
	}

	Json::Value root;
	root["name"] = util::cStringToString(userInfo.getRealName());
	root["avatar"] = userInfo.getAvatarPathWithoutOnlineState();
	root["msgtype"] = msg.msgRenderType;
	root["uuid"] = msg.talkerSid;
	root["mtype"] = msg.isMySendMsg() ? "me" : "other";
	CTime timeData(msg.msgTime);
	root["time"] = util::cStringToString(timeData.Format(_T("%Y-%m-%d %H:%M:%S")));

	//语音内容特殊处理
	if (MESSAGE_RENDERTYPE_AUDIO == msg.msgRenderType)
	{
		root["voiceid"] = msg.content;
		CString sVoicetime;
		sVoicetime.Format(_T("%d秒"), msg.msgAudioTime);
		root["voicetime"] = util::cStringToString(sVoicetime);
		root["voiceisread"] = msg.msgAudioReaded ? std::string("true") : string("false");
	}
	else
	{
		CString csContent = util::stringToCString(msg.content);
		ReceiveMsgManage::getInstance()->parseContent(csContent, FALSE, GetWidth());
		std::string content = util::cStringToString(csContent);
		root["content"] = content;
	}
	Json::StyledWriter styleWrite;
	std::string record = styleWrite.write(root);
	Json::Reader jsonRead;
	Json::Value rootRead;
	CString jsData = _T("[]");
	if (!jsonRead.parse(record, rootRead) || rootRead.isNull())
	{
		CString csError = util::stringToCString(record, CP_UTF8);
		LOG__(APP, _T("json parse error:%s"), csError);
		jsData = _T("[]");
		return FALSE;
	}
	else
		jsData = util::stringToCString(record, CP_UTF8);
	//调用页面的JS代码
	if (m_pWebBrowser)
	{
		VARIANT VarResult;
		if (!m_pWebBrowser->CallJScript(jsInterface.GetBuffer(), jsData.GetBuffer(), &VarResult))
		{
			LOG__(ERR, _T("CallJScript failed:%s"),jsData);
		}
		jsData.ReleaseBuffer();
	}
	return TRUE;
}
Пример #2
0
void FileTransferSocket::_fileLoginResponse(IN std::string& body)
{
	IM::File::IMFileLoginRsp imFileLoginRsp;
    if (!imFileLoginRsp.ParseFromString(body))
    {
        LOG__(ERR, _T("parse failed,body:%s"), util::stringToCString(body));
        return;
    }
	if (imFileLoginRsp.result_code() != 0)
	{
		LOG__(ERR, _T("file server login failed! "));
		return;
	}
	//打开文件
	std::string taskId = imFileLoginRsp.task_id();
	TransferFileEntity fileEntity;
	if (!TransferFileEntityManager::getInstance()->getFileInfoByTaskId(taskId, fileEntity))
	{
		LOG__(ERR, _T("file server login:can't find the fileInfo "));
		return;
	}

	LOG__(APP, _T("IMFileLoginRsp, file server login succeed"));
	//提示界面,界面上插入该项
	if (IM::BaseDefine::ClientFileRole::CLIENT_REALTIME_SENDER == fileEntity.nClientMode
		|| IM::BaseDefine::ClientFileRole::CLIENT_OFFLINE_UPLOAD == fileEntity.nClientMode)
	{
		module::getFileTransferModule()->asynNotifyObserver(module::KEY_FILETRANSFER_SENDFILE, fileEntity.sTaskID);
	}
	else if (IM::BaseDefine::ClientFileRole::CLIENT_REALTIME_RECVER == fileEntity.nClientMode
		|| IM::BaseDefine::ClientFileRole::CLIENT_OFFLINE_DOWNLOAD == fileEntity.nClientMode)
	{
		module::getFileTransferModule()->asynNotifyObserver(module::KEY_FILETRANSFER_REQUEST, fileEntity.sTaskID);
	}
}
BOOL DatabaseModule_Impl::_execImMessageCreateTableDML()
{
	try
	{
		m_pSqliteDB->execDML(createImMessageSql.c_str());
		m_pSqliteDB->execDML(createImMessageIndex.c_str());
	}
	catch (CppSQLite3Exception& sqliteException)
	{
		CString csErrMsg = util::stringToCString(sqliteException.errorMessage(), CP_UTF8);
		LOG__(ERR, _T("create table failed,error msg:%s")
			, csErrMsg);
#ifdef _DEBUG
		MessageBoxA(0, sqliteException.errorMessage(), "BD ERROR", MB_OK | MB_ICONHAND);
#endif	
		return FALSE;
	}
	catch (...)
	{
		LOG__(ERR, _T("create table unknown exception"));
		return FALSE;
	}

	return TRUE;
}
void FileTransferModule_Impl::_hasOfflineRes(IN std::string& body)
{
    IM::File::IMFileHasOfflineRsp imFileHasOfflineRsp;
    if (!imFileHasOfflineRsp.ParseFromString(body))
    {
        LOG__(ERR, _T("parse failed,body:%s"), util::stringToCString(body));
        return;
    }

    UINT32 nFileNum = imFileHasOfflineRsp.offline_file_list_size();
    for (UINT32 i = nFileNum; i > 0; --i)
    {
        const IM::BaseDefine::OfflineFileInfo& offLineInfo = imFileHasOfflineRsp.offline_file_list(i - 1);
        TransferFileEntity fileInfo;
        fileInfo.sFromID = util::uint32ToString(offLineInfo.from_user_id());
        fileInfo.sToID = module::getSysConfigModule()->userID();
        fileInfo.nFileSize = offLineInfo.file_size();
        fileInfo.sTaskID = offLineInfo.task_id();
        fileInfo.sFileName = offLineInfo.file_name();
        fileInfo.nClientMode = IM::BaseDefine::ClientFileRole::CLIENT_OFFLINE_DOWNLOAD;
        const IM::BaseDefine::IpAddr& ipAdd = offLineInfo.ip_addr_list(0);
        fileInfo.sIP = ipAdd.ip();
        fileInfo.nPort = ipAdd.port();
        fileInfo.time = static_cast<UInt32>(time(0));
        if (TransferFileEntityManager::getInstance()->pushTransferFileEntity(fileInfo))
        {
            LOG__(APP, _T("离线文件 sFileID = %s"), util::stringToCString(fileInfo.sTaskID));
            TransferFileEntityManager::getInstance()->openFileSocketByTaskId(fileInfo.sTaskID);
        }
    }
}
Пример #5
0
void SessionLayout::_AsynSendReadAck(IN MessageEntity& msg)
{
	if (MESSAGE_RENDERTYPE_SYSTEMTIPS == msg.msgRenderType
		|| MESSAGE_RENDERTYPE_FILETRANSFER == msg.msgRenderType)
	{
		LOG__(APP, _T("not send read ack msgRenderType:%d"),msg.msgRenderType);
		return;
	}
	if (MESSAGE_TYPE_HISTORY == msg.msgStatusType
		|| MESSAGE_TYPE_NONE == msg.msgStatusType)
	{
		LOG__(APP, _T("Not runtime or offline msgStatusType:%d,msgId:%d"), msg.msgStatusType,msg.msgId);
		return;
	}
	imcore::IMLibCoreStartOperationWithLambda(
		[=]()mutable
	{
		std::string OriginSessionId = msg.getOriginSessionId();
		IM::Message::IMMsgDataReadAck imMsgDataReadAck;
		imMsgDataReadAck.set_user_id(module::getSysConfigModule()->userId());
		imMsgDataReadAck.set_session_id(util::stringToInt32(OriginSessionId));
		imMsgDataReadAck.set_msg_id(msg.msgId);
		imMsgDataReadAck.set_session_type(static_cast<IM::BaseDefine::SessionType>(msg.msgSessionType));
		module::getTcpClientModule()->sendPacket(IM::BaseDefine::SID_MSG, IM::BaseDefine::CID_MSG_READ_ACK, &imMsgDataReadAck);
    },0, imcore::OPERATION_NAME_MSG_READ_ACK
	);
}
Пример #6
0
void ReceiveMsgManage::removeAllMessage()
{
	CAutoLock lock(&m_lock);
	//记录下程序退出时所有的消息列表,并且记录下来,这个会成为离线消息
	SessionMessageMap::iterator iterMap = m_mapSessionMsg.begin();
	LOG__(ERR, _T("MessageMananger unread message trace begin:"));
	for (; iterMap != m_mapSessionMsg.end(); ++iterMap)
	{
		SessionMessage_List msgList;
		if (popMessagesBySId(iterMap->first, msgList))
		{
			SessionMessage_List::iterator iter = msgList.begin();
			for (; iter != msgList.end(); ++iter)
			{
				MessageEntity& msg = *iter;
				CString csUId = util::stringToCString(msg.talkerSid);
				CString csCnt = util::stringToCString(msg.content, CP_UTF8);
				CTime time(msg.msgTime);
				CString csTime = time.Format(_T("%Y-%m-%d %H:%M:%S"));
				LOG__(DEBG, _T("time:%s id:%s,content:%s"), csTime, csUId, csCnt);
			}
		}
	}
	LOG__(DEBG, _T("MessageMananger unread message trace end"));
	m_mapSessionMsg.clear();
}
Пример #7
0
void MainListLayout::_UpdateRecentSessionItem(IN const std::string& sessionId, IN const UInt32 sessionType)
{
	SessionListItemInfo item;
	item.folder = false;
	item.empty = false;
	if (IM::BaseDefine::SessionType::SESSION_TYPE_GROUP == static_cast<IM::BaseDefine::SessionType>(sessionType))
	{
		module::GroupInfoEntity groupInfo;
		if (!module::getGroupListModule()->getGroupInfoBySId(sessionId, groupInfo))
		{
			LOG__(ERR, _T("Can't get the groupInfo, groupId = %s"), util::stringToCString(sessionId));
			return;
		}
		item.id = util::stringToCString(groupInfo.gId);
		item.avatarPath = util::stringToCString(groupInfo.getAvatarPath());
		item.nickName = groupInfo.csName;
		m_UIRecentConnectedList->UpdateItemInfo(item);
	}
	else if (IM::BaseDefine::SessionType::SESSION_TYPE_SINGLE == static_cast<IM::BaseDefine::SessionType>(sessionType))
	{
		module::UserInfoEntity userInfo;
		if (!module::getUserListModule()->getUserInfoBySId(sessionId, userInfo))
		{
			LOG__(ERR, _T("Can't get the userInfo, userId = %s"), util::stringToCString(sessionId));
			return;
		}
		item.id = util::stringToCString(userInfo.sId);
		item.avatarPath = util::stringToCString(userInfo.getAvatarPath());
		item.nickName = userInfo.getRealName();
		m_UIRecentConnectedList->UpdateItemInfo(item);
	}
}
BOOL DatabaseModule_Impl::sqlDeleteGroupInfoEntity(IN const std::string& groupId)
{
	try
	{
		CppSQLite3Statement stmt = m_pSqliteDB->compileStatement(deleteGroupInfoSql.c_str());
		stmt.bind(1, groupId.c_str());
		stmt.execDML();
	}
	catch (CppSQLite3Exception& sqliteException)
	{
#ifdef _DEBUG
		MessageBoxA(0, sqliteException.errorMessage(), "BD ERROR", MB_OK | MB_ICONHAND);
#endif
		CString csErrMsg = util::stringToCString(sqliteException.errorMessage(), CP_UTF8);
		LOG__(ERR, _T("delete failed,error msg:%s"), csErrMsg);
		return FALSE;
	}
	catch (...)
	{
		LOG__(ERR, _T("db unknown exception"));
		return FALSE;
	}

	return TRUE;
}
Пример #9
0
void FileTransferSocket::onConnectDone()
{
	LOG__(APP, _T("FileTransferSocket::onConnected()"));
	startHeartbeat();

	TransferFileEntity info;
    if (!TransferFileEntityManager::getInstance()->getFileInfoByTaskId(m_sTaskId, info))
    {
        LOG__(APP, _T("Can't get the file info,task id:%s"),util::stringToCString(m_sTaskId));
        return;
    }
		
	//拉模式文件传输,传输taskid、token、client_mode
	IM::File::IMFileLoginReq imFileLoginReq;
	imFileLoginReq.set_user_id(module::getSysConfigModule()->userId());
	imFileLoginReq.set_task_id(info.sTaskID);
	imFileLoginReq.set_file_role(static_cast<IM::BaseDefine::ClientFileRole>(info.nClientMode));

    LOG__(APP, _T("IMFileLoginReq,sTaskID:%s,nClientMode:%d"), util::stringToCString(info.sTaskID), info.nClientMode);
	//send packet
    LOG__(APP, _T("IMFileLoginReq,taskId:%s"), util::stringToCString(info.sTaskID));
    sendPacket(IM::BaseDefine::ServiceID::SID_FILE, IM::BaseDefine::FileCmdID::CID_FILE_LOGIN_REQ, &imFileLoginReq);

	//CImPduClientFileLoginReq pduFileLoginReq(module::getSysConfigModule()->userID().c_str()
	//	, "", info.sTaskID.c_str(), );
	//sendPacket(&pduFileLoginReq);
}
BOOL DatabaseModule_Impl::sqlInsertOrReplaceGroupInfoEntity(IN const module::GroupInfoEntity& groupInfo)
{
	try
	{
		CppSQLite3Statement stmt = m_pSqliteDB->compileStatement(insertGroupInfoSql.c_str());
		stmt.bind(1, groupInfo.gId.c_str());
		stmt.bind(2, util::cStringToString(groupInfo.csName).c_str());
		stmt.bind(3, util::cStringToString(groupInfo.desc).c_str());
		stmt.bind(4, groupInfo.avatarUrl.c_str());
		stmt.bind(5, groupInfo.creatorId.c_str());
		stmt.bind(6, int(groupInfo.type));
		stmt.bind(7, int(groupInfo.version));
		stmt.bind(8, int(groupInfo.groupUpdated));
		stmt.bind(9, int(groupInfo.shieldStatus));
		std::string& strJson = _makeJsonForGroupMembers(groupInfo.groupMemeberList);
		stmt.bind(10, strJson.c_str());
		stmt.execDML();
	}
	catch (CppSQLite3Exception& sqliteException)
	{
#ifdef _DEBUG
		MessageBoxA(0, sqliteException.errorMessage(), "BD ERROR", MB_OK | MB_ICONHAND);
#endif
		CString csErrMsg = util::stringToCString(sqliteException.errorMessage(), CP_UTF8);
		LOG__(ERR, _T("insert failed,error msg:%s"), csErrMsg);
		return FALSE;
	}
	catch (...)
	{
		LOG__(ERR, _T("db unknown exception"));
		return FALSE;
	}

	return TRUE;
}
void DatabaseModule_Impl::_parseJsonForGroupMembers(IN std::string strJson, OUT std::list<std::string>& groupMemeberList)
{
	Json::Reader reader;
	Json::Value root;

	try
	{
		if (reader.parse(strJson, root) || root.isNull())
		{
			const Json::Value arrayObj = root["UserIds"];
			for (int i = 0; i < static_cast<int>(arrayObj.size()); ++i)
			{
				groupMemeberList.push_back(arrayObj[i].asString());
			}
		}
		else
		{
			LOG__(ERR, _T("json parse falied! json data:%s"),util::stringToCString(strJson));
		}
	}
	catch (...)
	{
		LOG__(ERR, _T("json parse falied! json data:%s"), util::stringToCString(strJson));
	}
}
Пример #12
0
// -----------------------------------------------------------------------------
// private   
void ReloginManager::doRelogin()
{
    try
    {
        if(m_bDoReloginNow)
        {
            LOG__(APP,_T("is doing Relogin now..."));
            return;
        }

        //清理掉队列里面 未发送的 消息已读确认 Operation《不处理可能会引发丢消息》
        imcore::IMLibCoreClearOperationByName(imcore::OPERATION_NAME_MSG_READ_ACK);

        LoginParam param;
		module::TTConfig* pCfg = module::getSysConfigModule()->getSystemConfig();
		param.mySelectedStatus = pCfg->myselectStatus;
		param.csUserName = pCfg->userName;
		param.password = pCfg->password;
		param.csUserName.Trim();

		LoginOperation* pOperation = new LoginOperation(BIND_CALLBACK_1(ReloginManager::OnOperationCallback), param);
		imcore::IMLibCoreStartOperation(pOperation);
        m_bDoReloginNow = TRUE;
    }
    catch (...)
    {
		module::getTcpClientModule()->shutdown();
        startReloginTimer(++m_secondCount);
        LOG__(ERR, _T("relogin unknown exception"));
        m_bDoReloginNow = FALSE;
    }
}
Пример #13
0
BOOL ReceiveMsgManage::pushMessageBySId(const std::string& sId, MessageEntity& msg)
{
	if (sId.empty())
	{
		LOG__(ERR, _T("sId is empty!"));
		return FALSE;
	}
	CAutoLock lock(&m_lock);
	try
	{
		SessionMessage_List* listChatMsg = _getChatMsgListBySID(sId);
		if (listChatMsg)
		{
			listChatMsg->push_back(msg);
		}
		else
		{
			SessionMessage_List listChatMsg2;
			listChatMsg2.push_back(msg);
			m_mapSessionMsg[sId] = listChatMsg2;
		}
	}
	catch (...)
	{
		CString csSid = util::stringToCString(sId);
		CString csMsgCnt = util::stringToCString(msg.content, CP_UTF8);
		LOG__(ERR, _T("pushMessageBySId failed,SId:%s,msg conteng:%s"), csSid, csMsgCnt);
		return FALSE;
	}
	return TRUE;
}
Пример #14
0
void LoginModule_Impl::notifyLoginDone()
{
	imcore::IMLibCoreStartOperationWithLambda(
		[]
	{
		//鑾峰彇閮ㄩ棬淇℃伅
		UInt32 lastTime = module::getSysConfigModule()->getDepartmentInfoLatestUpdateTime();
		IM::Buddy::IMDepartmentReq imDepartmentReq;
		imDepartmentReq.set_user_id(module::getSysConfigModule()->userId());
		imDepartmentReq.set_latest_update_time(lastTime);
		module::getTcpClientModule()->sendPacket(IM::BaseDefine::ServiceID::SID_BUDDY_LIST
			, IM::BaseDefine::BuddyListCmdID::CID_BUDDY_LIST_DEPARTMENT_REQUEST
			, &imDepartmentReq);
		LOG__(APP, _T("IMDepartmentReq,latest update time :%d"), lastTime);

		//澧為噺鑾峰彇鎵�鏈変汉淇℃伅
		lastTime = module::getSysConfigModule()->getUserInfoLatestUpdateTime();//鑾峰彇鏈�鍚庝竴娆℃洿鏂颁汉鍛樹俊鎭殑鏃堕棿
		IM::Buddy::IMAllUserReq imAllUserReq;
		imAllUserReq.set_user_id(module::getSysConfigModule()->userId());
		imAllUserReq.set_latest_update_time(lastTime);
		module::getTcpClientModule()->sendPacket(IM::BaseDefine::ServiceID::SID_BUDDY_LIST
			, IM::BaseDefine::BuddyListCmdID::CID_BUDDY_LIST_ALL_USER_REQUEST
			,&imAllUserReq);
		LOG__(APP, _T("IMAllUserReq,latest update time :%d"), lastTime);

		//澧為噺鑾峰彇缇ゅ垪琛�
		IM::Group::IMNormalGroupListReq imNormalGroupListReq;
		imNormalGroupListReq.set_user_id(module::getSysConfigModule()->userId());
		module::getTcpClientModule()->sendPacket(IM::BaseDefine::ServiceID::SID_GROUP
			, IM::BaseDefine::GroupCmdID::CID_GROUP_NORMAL_LIST_REQUEST
			, &imNormalGroupListReq);
		LOG__(APP, _T("IMNormalGroupListReq"));
	});
}
BOOL DatabaseModule_Impl::sqlUpdateRecentSessionInfoEntity(IN const module::SessionEntity& sessionInfo)
{
	try
	{
		CppSQLite3Statement stmt = m_pSqliteDB->compileStatement(updateRecentSessionByIdSql.c_str());
		stmt.bind(1, sessionInfo.sessionID.c_str());
		stmt.bind(2, int(sessionInfo.sessionType));
		stmt.bind(3, int(sessionInfo.updatedTime));
		stmt.bind(4, int(sessionInfo.latestmsgId));
		stmt.bind(5, sessionInfo.latestMsgContent.c_str());
		stmt.bind(6, sessionInfo.latestMsgFromId.c_str());

		stmt.bind(7, sessionInfo.sessionID.c_str());
		int countUpdate = stmt.execDML();
		if (0 == countUpdate)
		{
			return FALSE;
		}
	}
	catch (CppSQLite3Exception& sqliteException)
	{
#ifdef _DEBUG
		MessageBoxA(0, sqliteException.errorMessage(), "BD ERROR", MB_OK | MB_ICONHAND);
#endif
		CString csErrMsg = util::stringToCString(sqliteException.errorMessage(), CP_UTF8);
		LOG__(ERR, _T("db failed,error msg:%s"), csErrMsg);
		return FALSE;
	}
	catch (...)
	{
		LOG__(ERR, _T("db unknown exception"));
		return FALSE;
	}
	return TRUE;
}
Пример #16
0
void SessionLayout::_AddGroupMemberToList(IN const std::string& sID, IN const BOOL bCreator)
{
	module::UserInfoEntity userInfo;
	if (!module::getUserListModule()->getUserInfoBySId(sID, userInfo))
	{
		LOG__(ERR, _T("can't find the userInfo:%s,GroupId:%s"),util::stringToCString(sID),util::stringToCString(m_sId));
		return;
	}
	CDialogBuilder dlgBuilder;
	CListContainerElementUI* pListElement = (CListContainerElementUI*)dlgBuilder.Create(_T("SessionDialog\\groupMembersListItem.xml"), (UINT)0, NULL, &m_paint_manager);
	if (!pListElement)
	{
		LOG__(ERR, _T("群item创建失败"));
		return;
	}
	CButtonUI* pLogo = static_cast<CButtonUI*>(pListElement->FindSubControl(_T("AvatarInfo")));
	PTR_VOID(pLogo);
	pLogo->SetBkImage(util::stringToCString(userInfo.getAvatarPath()));

	if (bCreator)
	{
		CButtonUI* pCreator = static_cast<CButtonUI*>(pListElement->FindSubControl(_T("Creator")));
		PTR_VOID(pCreator);
		pCreator->SetVisible(true);
		pCreator->SetUserData(_T("Creator"));
	}

	CLabelUI* pNameLable = static_cast<CLabelUI*>(pListElement->FindSubControl(_T("nickname")));
	PTR_VOID(pNameLable);
	pNameLable->SetText(userInfo.getRealName());
	pListElement->SetUserData(util::stringToCString(userInfo.sId));

	m_pGroupMemberList->Add(pListElement);
}
Пример #17
0
BOOL DatabaseModule_Impl::_startup()
{
	try
	{
		CString dbPathTemp = module::getMiscModule()->getTTCommonAppdataUserDir();
		util::createAllDirectories(dbPathTemp);
		module::TTConfig* pCfg = module::getSysConfigModule()->getSystemConfig();
		if (pCfg->csUserId.IsEmpty())
			return FALSE;
		CString dbPath = dbPathTemp + _T("\\") + pCfg->csUserId + _T(".db");
		dbPathTemp = module::getMiscModule()->getTTCommonAppdata();
		CString globalDBPath = dbPathTemp + _T("\\global.db");
		m_sDBPath = util::cStringToString(dbPath);
		m_sGlobalDBPath = util::cStringToString(globalDBPath);
		if (!_openDB())
		{
			LOG__(ERR, _T("open db failed"));
			return FALSE;
		}
	}
	catch (...)
	{
		LOG__(ERR, _T("unknown exception"));
		return FALSE;
	}

	return TRUE;
}
Пример #18
0
void LoginDialog::_DoLogin()
{
	LOG__(APP,_T("User Clicked LoginBtn"));

	m_ptxtTip->SetText(_T(""));
	CDuiString userName = m_pedtUserName->GetText();
	CDuiString password = m_pedtPassword->GetText();
	if (userName.IsEmpty())
	{
		CString csTip = util::getMultilingual()->getStringById(_T("STRID_LOGINDIALOG_USERNAME_EMPTY"));
		m_ptxtTip->SetText(csTip);
		return;
	}
	if (password.IsEmpty())
	{
		CString csTip = util::getMultilingual()->getStringById(_T("STRID_LOGINDIALOG_PASSWORD_EMPTY"));
		m_ptxtTip->SetText(csTip);
		return;
	}
	module::TTConfig* pCfg = module::getSysConfigModule()->getSystemConfig();
	pCfg->userName = userName;
	if (m_bPassChanged)
	{
		std::string sPass = util::cStringToString(CString(password));
		char* pOutData = 0;
		uint32_t nOutLen = 0;
		int retCode = EncryptPass(sPass.c_str(), sPass.length(), &pOutData, nOutLen);
		if (retCode == 0 && nOutLen > 0 && pOutData != 0)
		{
			pCfg->password = std::string(pOutData, nOutLen);
			Free(pOutData);
		}
		else
		{
			LOG__(ERR, _T("EncryptPass Failed!"));
			CString csTip = util::getMultilingual()->getStringById(_T("STRID_LOGINDIALOG_LOGIN_ENCRYPT_PASE_FAIL"));
			m_ptxtTip->SetText(csTip);			
			return;
		}
	}

	pCfg->isRememberPWD = m_pChkRememberPWD->GetCheck();
	module::getSysConfigModule()->saveData();

	CString csTxt = util::getMultilingual()->getStringById(_T("STRID_LOGINDIALOG_BTN_DOLOGIN"));
	m_pBtnLogin->SetText(csTxt);
	m_pBtnLogin->SetEnabled(false);

	//连接登陆服务器
	DoLoginServerParam param;
	DoLoginServerHttpOperation* pOper = new DoLoginServerHttpOperation(
		BIND_CALLBACK_1(LoginDialog::OnHttpCallbackOperation), param);
	module::getHttpPoolModule()->pushHttpOperation(pOper);
}
Пример #19
0
void FileTransferModule_Impl::_sendfileResponse(IN std::string& body)
{
    IM::File::IMFileRsp imFileRsp;
    if (!imFileRsp.ParseFromString(body))
    {
        LOG__(ERR, _T("parse failed,body:%s"), util::stringToCString(body));
        return;
    }

    UInt32 nResult = imFileRsp.result_code();
    if (nResult != 0)
    {
        LOG__(ERR, _T("_sendfileResponse result != 0"));
        module::getFileTransferModule()->asynNotifyObserver(module::KEY_FILESEVER_UPLOAD_FAILED);
    }

    TransferFileEntity fileEntity;
    fileEntity.sTaskID = imFileRsp.task_id();
    assert(!fileEntity.sTaskID.empty());
    fileEntity.sFromID = util::uint32ToString(imFileRsp.from_user_id());
    fileEntity.sToID = util::uint32ToString(imFileRsp.to_user_id());
    fileEntity.sFileName = imFileRsp.file_name();
    fileEntity.setSaveFilePath(util::stringToCString(fileEntity.sFileName));//发送方文件地址,就是保存地址
    fileEntity.time = static_cast<UInt32>(time(0));
    uint32_t transMode = imFileRsp.trans_mode();
    if (IM::BaseDefine::FileType::FILE_TYPE_ONLINE == transMode)
    {
        fileEntity.nClientMode = IM::BaseDefine::ClientFileRole::CLIENT_REALTIME_SENDER;
    }
    else if (IM::BaseDefine::FileType::FILE_TYPE_OFFLINE == transMode)
    {
        fileEntity.nClientMode = IM::BaseDefine::ClientFileRole::CLIENT_OFFLINE_UPLOAD;
    }
    fileEntity.pFileObject = new TransferFile(util::stringToCString(fileEntity.sFileName),FALSE);
    if (fileEntity.pFileObject)
    {
        fileEntity.nFileSize = fileEntity.pFileObject->length();
    }

    UINT32 nIPCount = imFileRsp.ip_addr_list_size();
    if (nIPCount <= 0)
    {
        return;
    }
    const IM::BaseDefine::IpAddr& ipAdd = imFileRsp.ip_addr_list(0);
    fileEntity.sIP = ipAdd.ip();
    fileEntity.nPort = ipAdd.port();

    if (!TransferFileEntityManager::getInstance()->pushTransferFileEntity(fileEntity))
        TransferFileEntityManager::getInstance()->updateFileInfoBysTaskID(fileEntity);

    LOG__(DEBG, _T("FileTransferSevice_Impl::准备连接文件服务器 sTaskId = %s"), util::stringToCString(fileEntity.sTaskID));
    TransferFileEntityManager::getInstance()->openFileSocketByTaskId(fileEntity.sTaskID);
}
Пример #20
0
BOOL AudioMessageMananger::saveAudioDataToFile(IN UCHAR* data, IN UINT32 lenth, IN std::string sFileName)
{
	if (lenth <= 4)
	{
		LOG__(ERR, _T("lenth<=4"));
		return FALSE;
	}
	CString sFilePath = module::getMiscModule()->GetAudioFileSavedPath();

	if (!::PathIsDirectory(sFilePath))
	{
		util::createAllDirectories(sFilePath);
		sFilePath += _T("\\");
	}

	sFilePath += util::stringToCString(sFileName, CP_UTF8);

	if (util::isFileExist(sFilePath))
	{
		return TRUE;
	}

	HANDLE hFile = CreateFile(sFilePath,
		GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL,
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (INVALID_HANDLE_VALUE == hFile)
	{
		DWORD res = GetLastError();
		LOG__(ERR, _T("CreateFile error:GetLastError = %d"), res);
		return FALSE;
	}
	::SetFilePointer(hFile, 0, 0, FILE_END);

	DWORD lret = 0;
	BOOL  bRes = WriteFile(hFile, (LPCVOID)data, lenth, &lret, NULL);
	if (!bRes)
	{
		DWORD res = GetLastError();
		LOG__(ERR, _T("WriteFile error:GetLastError = %d"), res);
		return FALSE;
	}

	if (NULL != hFile)
	{
		CloseHandle(hFile);
		hFile = NULL;
	}

	return TRUE;
}
Пример #21
0
BOOL AudioMessageMananger::playAudioMsgByAudioSid(IN const std::string& sSessionID, IN const std::string& sAID)
{
	if (sAID.empty() || sSessionID.empty())
	{
		LOG__(ERR, _T("date error,sSessionID:%s ,sAID:%s"), util::stringToCString(sSessionID), util::stringToCString(sAID));
		return FALSE;
	}
	//若是未读语音消息,则置成已读
	SessionMessageMap::iterator itAudio = m_mapUnReadAudioMsg.find(sSessionID);
	if (itAudio != m_mapUnReadAudioMsg.end())
	{
		SessionMessage_List& listChatMsg = itAudio->second;
		for (SessionMessage_List::iterator it = listChatMsg.begin();
			it != listChatMsg.end(); ++it)
		{
			if (it->content == sAID)
			{
				it->msgAudioReaded = 1;
			}
		}
	}

	//播放声音
	CString csFilePath = module::getMiscModule()->GetAudioFileSavedPath();
	csFilePath += util::stringToCString(sAID, CP_UTF8);
	if (!PathFileExists(csFilePath))
	{
		LOG__(ERR, _T("File not exist:%s "), csFilePath);
		return FALSE;
	}
	csFilePath = _T("\"") + csFilePath + _T("\"");

	//先关闭原来的播放窗口 
	HWND hTTWnd = FindWindow(NULL, _T("teamtalkaudio-speexdecWindow"));
	if (hTTWnd)
	{
		COPYDATASTRUCT cpyData = { 0 };
		//cpyData.lpData = (PVOID)m_sPlayingAID.c_str();
		//cpyData.cbData = m_sPlayingAID.length();
		cpyData.dwData = 1; // 1 表示退出语音播放进程
		::SendMessage(hTTWnd, WM_COPYDATA, 0, (LPARAM)&cpyData);
		LOG__(DEBG, _T("breakPlayingAnimate"));
	}

	//解析播放语音文件
	CString csPath = util::getAppPath() + _T("speexdec.exe");
	LOG__(DEBG, _T("playAudioMsgByAudioSid FilePath:%s"), csFilePath);
	::ShellExecute(NULL, _T("open"), csPath, csFilePath, _T(""), SW_HIDE);

	m_sPlayingSessionID = sSessionID;
	m_sPlayingAID = sAID;
	return TRUE;
}
Пример #22
0
void P2PCmdModule_Impl::_p2pCmdNotifyResponse(std::string& pbBody)
{
    IM::SwitchService::IMP2PCmdMsg imP2PCmdMsg;
    if (!imP2PCmdMsg.ParseFromString(pbBody))
    {
        LOG__(ERR, _T("ParseFromString failed:%s"), util::stringToCString(pbBody));
        return;
    }
    std::string jsonMsgData = imP2PCmdMsg.cmd_msg_data();
    std::string sFromId = util::uint32ToString(imP2PCmdMsg.from_user_id());
    LOG__(APP, _T("IMP2PCmdMsg cmd_msg_data = %s,sFromId = %s"), util::stringToCString(jsonMsgData), util::stringToCString(sFromId));
    UINT32 nServiceID = 0;
    UINT32 nCmdID = 0;
    _parseMsgJsonData(jsonMsgData, nServiceID, nCmdID);

    if (module::KEY_P2PCMD_SHAKEWINDOW == nServiceID && module::KEY_P2PCMD_SHAKEWINDOW_NOTIFY == nCmdID)
    {
        //窗口抖动生成一条系统消息,提示用户
        module::UserInfoEntity userInfo;
        if (module::getUserListModule()->getUserInfoBySId(sFromId, userInfo))
        {
            CString csTipFormat = util::getMultilingual()->getStringById(_T("STRID_SESSIONMODULE_SHAKEWINDOW_TIP"));
            CString csTip;
            MessageEntity msg;
            csTip.Format(csTipFormat, userInfo.getRealName());
            msg.content = util::cStringToString(csTip);
            msg.sessionId = sFromId;
            msg.talkerSid = module::getSysConfigModule()->userID();
            msg.msgRenderType = MESSAGE_RENDERTYPE_SYSTEMTIPS;
            msg.msgSessionType = MESSAGETYPE_FROM_FRIEND;
            msg.msgTime = (UInt32)time(0);
            ReceiveMsgManage::getInstance()->pushMessageBySId(msg.sessionId, msg);
            module::getSessionModule()->asynNotifyObserver(module::KEY_SESSION_NEWMESSAGE, sFromId);//收到屏幕抖动消息提示
        }
        module::getSessionModule()->asynNotifyObserver(module::KEY_SESSION_SHAKEWINDOW_MSG, sFromId);//抖动窗口
    }
    else if (module::KEY_P2PCMD_WRITING == nServiceID)
    {
        if (module::KEY_P2PCMD_WRITING_NOTIFY == nCmdID)
        {
            module::getSessionModule()->asynNotifyObserver(module::KEY_SESSION_WRITING_MSG, sFromId);
        }
        else if (module::KEY_P2PCMD_STOP_WRITING_NOTIFY == nCmdID)
        {
            module::getSessionModule()->asynNotifyObserver(module::KEY_SESSION_STOPWRITING_MSG, sFromId);
        }
    }
    else
    {
        LOG__(APP, _T("Unkown p2p message,nServiceID:%d,nCmdID:%d"), nServiceID, nCmdID);
    }
}
Пример #23
0
BOOL CUIRecentSessionList::AddNode(const std::string& sId)
{
	if (UIIMList::IsExistSId(sId))
	{
		LOG__(DEBG, _T("already exist!"));
		return FALSE;
	}
	SessionListItemInfo item;

	module::SessionEntity* pSessionInfo = SessionEntityManager::getInstance()->getSessionEntityBySId(sId);
	if (!pSessionInfo)
	{
		LOG__(DEBG, _T("Can't get the SessionEntity"));
		return FALSE;
	}
	item.folder = false;
	item.empty = false;
	item.description = util::stringToCString(pSessionInfo->latestMsgContent);
	item.Time = pSessionInfo->updatedTime;
	item.id = util::stringToCString(sId);
	if (pSessionInfo->sessionType == module::SESSION_USERTYPE)
	{
		module::UserInfoEntity userInfo;
		if (module::getUserListModule()->getUserInfoBySId(sId, userInfo))
		{
			item.avatarPath = util::stringToCString(userInfo.getAvatarPath());
			item.nickName = userInfo.getRealName();
		}
		else
		{
			item.nickName = util::stringToCString(sId);
			item.avatarPath = module::getUserListModule()->getDefaultAvatartPath();
		}
	}
	else if (module::SESSION_GROUPTYPE == pSessionInfo->sessionType)
	{
		module::GroupInfoEntity groupInfo;
		if (module::getGroupListModule()->getGroupInfoBySId(sId, groupInfo))
		{
			item.avatarPath = util::stringToCString(groupInfo.getAvatarPath());
			item.nickName = groupInfo.csName;
		}
		else
		{
			item.nickName = util::stringToCString(sId);
			item.avatarPath = module::getGroupListModule()->getDefaultAvatartPath();
		}
	}

	AddNode(item, NULL);
	return TRUE;
}
Пример #24
0
void ReloginManager::OnOperationCallback(std::shared_ptr<void> param)
{
	m_bDoReloginNow = FALSE;
	LoginParam* pLoginParam = (LoginParam*)param.get();
	if (LOGIN_OK == pLoginParam->result)
	{
		LOG__(ERR, _T("ReloginManager regloin success!!!"));

		module::getSessionModule()->setTime(pLoginParam->serverTime);

		//通知服务器客户端初始化完毕,获取组织架构信息和群列表
		module::getLoginModule()->notifyLoginDone();

		//清空存在客户端的未读消息,因为服务端又会将这个消息送过来,避免重复
		module::getMessageModule()->removeAllMessage();

		//获取最近联系会话
		UInt32 updateTime = module::getSessionModule()->getGlobalUpdateTime();
		LOG__(APP, _T("IMRecentContactSessionReq after relogin done, local update time = %d"), updateTime);
		IM::Buddy::IMRecentContactSessionReq imRecentContactSessionReq;
		imRecentContactSessionReq.set_user_id(module::getSysConfigModule()->userId());
		imRecentContactSessionReq.set_latest_update_time(updateTime);
		module::getTcpClientModule()->sendPacket(IM::BaseDefine::ServiceID::SID_BUDDY_LIST
			, IM::BaseDefine::BuddyListCmdID::CID_BUDDY_LIST_RECENT_CONTACT_SESSION_REQUEST
			, &imRecentContactSessionReq);

		//通知网络已经恢复正常,可以进行各种操作了
		module::getLoginModule()->asynNotifyObserver(module::KEY_LOGIN_RELOGINOK, pLoginParam->mySelectedStatus);
	}
	else
	{
		LOG__(ERR, _T("ReloginManager regloin failed!!!"));
		module::getTcpClientModule()->shutdown();

		//TCP\IP验证token失效,开启重新获取token的task
		//if (LOGIN_TOKEN_FAILED == pLoginParam->result)
		{
			//开启定时获取token的定时器
		}
		if (IM::BaseDefine::REFUSE_REASON_VERSION_TOO_OLD == pLoginParam->result)
		{
			CString csTip = util::getMultilingual()->getStringById(_T("STRID_WEBLOGINFORM_TIP_VERSION_TOOOLD"));
			CString csTitle = module::getMiscModule()->getAppTitle();
			::MessageBox(0, csTip, csTitle, MB_OK | MB_ICONINFORMATION);
			module::getMiscModule()->quitTheApplication();
		}
		else
		{
			startReloginTimer(++m_secondCount);
		}
	}
}
Пример #25
0
BOOL FileTransferSocket::startFileTransLink()
{
	TransferFileEntity FileInfo;
	if (TransferFileEntityManager::getInstance()->getFileInfoByTaskId(m_sTaskId, FileInfo))
	{
		//大佛:使用msg server 传过来的IP和端口
		LOG__(APP, _T("connect IP=%s,Port=%d"), util::stringToCString(FileInfo.sIP), FileInfo.nPort);
		connect(util::stringToCString(FileInfo.sIP), FileInfo.nPort);
		//connect(util::stringToCString(module::FILETRANSFER_IP), module::FILETRANSFER_PORT);
		return TRUE;
	}
	LOG__(ERR, _T("can't find the TaskId"));
	return FALSE;
}
Пример #26
0
void LoginModule_Impl::_kickUserResponse(IN std::string& pbBody)
{
	IM::Login::IMKickUser imKickUser;
	if (!imKickUser.ParseFromString(pbBody))
	{
		LOG__(ERR, _T("ParseFromString failed,body:%s"), util::stringToCString(pbBody));
		return;
	}
	LOG__(APP, _T("IMKickUser kick_reason = %d"),imKickUser.kick_reason());
	if (IM::BaseDefine::KickReasonType::KICK_REASON_DUPLICATE_USER == imKickUser.kick_reason()
		|| IM::BaseDefine::KickReasonType::KICK_REASON_MOBILE_KICK == imKickUser.kick_reason())
	{
		module::getLoginModule()->asynNotifyObserver(module::KEY_LOGIN_KICKOUT, Int32(imKickUser.kick_reason()));
	}
}
Пример #27
0
void TcpClientModule_Impl::onReceiveData(const char* data, int32_t size)
{
	if (m_pServerPingTimer)
		m_pServerPingTimer->m_bHasReceivedPing = TRUE;

	imcore::TTPBHeader header;
	header.unSerialize((byte*)data, imcore::HEADER_LENGTH);	
	if (IM::BaseDefine::CID_OTHER_HEARTBEAT == header.getCommandId() && IM::BaseDefine::SID_OTHER == header.getModuleId())
	{
		//模块器端过来的心跳包,不跳到业务层派发
		return;
	}

	LOG__(NET, _T("receiveData message moduleId:0x%x,commandId:0x%x")
		, header.getModuleId(), header.getCommandId());

	if (g_seqNum == header.getSeqNumber())
	{
		m_pImLoginResp->ParseFromArray(data + imcore::HEADER_LENGTH, size - imcore::HEADER_LENGTH);
		::SetEvent(m_eventReceived);
		return;
	}

	//将网络包包装成任务放到逻辑任务队列里面去
	_handlePacketOperation(data, size);
}
Пример #28
0
void CEventDispatch::RemoveEvent(SOCKET fd, uint8_t socket_event)
{
	if (epoll_ctl(m_epfd, EPOLL_CTL_DEL, fd, NULL) != 0)
	{
		LOG__(NET,  "epoll_ctl failed, errno=%d\n", errno);
	}
}
Пример #29
0
BOOL AudioMessageMananger::popPlayingAudioMsg()
{
	stopPlayingAnimate();

	SessionMessageMap::iterator itAudio = m_mapUnReadAudioMsg.find(m_sPlayingSessionID);
	if (itAudio == m_mapUnReadAudioMsg.end())
	{
		LOG__(DEBG, _T("Not exist in the list!"));
		return FALSE;
	}
	SessionMessage_List& listChatMsg = itAudio->second;
	SessionMessage_List::iterator it = listChatMsg.begin();
	for (; it != listChatMsg.end();)
	{
		if (it->isReaded() && it->content == m_sPlayingAID)
		{
			listChatMsg.erase(it);//删除已经播放过的
			m_sPlayingSessionID.clear();
			m_sPlayingAID.clear();
			return TRUE;
		}
		else
			++it;
	}
	return FALSE;
}
Пример #30
0
void SessionLayout::FreshAllGroupMemberAvatar()
{
	if (!m_pGroupMemberList)
	{
		return;
	}
	for (int n = 0; n < m_pGroupMemberList->GetCount(); n++)
	{
		CListContainerElementUI* pItem = (CListContainerElementUI*)m_pGroupMemberList->GetItemAt(n);
		if (pItem)
		{
			CDuiString userData = pItem->GetUserData();
			if (!userData.IsEmpty())
			{
				std::string sid = util::cStringToString(CString(userData));
				module::UserInfoEntity userInfo;
				if (!module::getUserListModule()->getUserInfoBySId(sid, userInfo))
				{
					LOG__(ERR, _T("can't find the userInfo:%s,GroupId:%s"),util::stringToCString(sid),util::stringToCString(m_sId));
					continue;;
				}
				CButtonUI* btnAvatarInfo = (CButtonUI*)pItem->FindSubControl(_T("AvatarInfo"));
				if (btnAvatarInfo)
				{
					btnAvatarInfo->SetBkImage(util::stringToCString(userInfo.getAvatarPath()));
				}
			}
		}
	}
	m_pGroupMemberList->SortItems(GroupMemberListItemCompareFunc, 0);
}