Esempio n. 1
0
void Protocol::SetStatus(int aStatus)
{
	char status_msg[256];

	if (ServiceExists(MS_CS_SETSTATUSEX))
	{
		// :'(

		// BEGIN From commomstatus.cpp (KeepStatus)
		int i, count, pCount;
		PROTOCOLDESCRIPTOR **protos;

		pCount = 0;
		CallService(MS_PROTO_ENUMPROTOCOLS,(WPARAM)&count,(LPARAM)&protos);
		for(i=0;i<count;i++) {
			if(protos[i]->type!=PROTOTYPE_PROTOCOL || CallProtoService(protos[i]->szName,PS_GETCAPS,PFLAGNUM_2,0)==0) continue;
			pCount += 1;
		}
		// END From commomstatus.cpp (KeepStatus)


		PROTOCOLSETTINGEX **pse = (PROTOCOLSETTINGEX **) mir_alloc0(pCount * sizeof(PROTOCOLSETTINGEX *));

		for(i = 0; i < pCount; i++)
		{
			pse[i] = (PROTOCOLSETTINGEX *) mir_alloc0(sizeof(PROTOCOLSETTINGEX));
			pse[i]->szName = "";
		}

		pse[0]->cbSize = sizeof(PROTOCOLSETTINGEX);
		pse[0]->status = aStatus;
		pse[0]->szName = (char *) name.c_str();

		GetStatusMsg(aStatus, status_msg, sizeof(status_msg));
		pse[0]->szMsg = status_msg;

		CallService(MS_CS_SETSTATUSEX, (WPARAM) &pse, 0);

		for(i = 0; i < pCount; i++)
			mir_free(pse[i]);
		mir_free(pse);
	}
	else
	{
		Call(PS_SETSTATUS, aStatus);

		if (CanSetStatusMsg(aStatus))
		{
			char status_msg[MS_MYDETAILS_GETMYSTATUSMESSAGE_BUFFER_SIZE];
			GetStatusMsg(aStatus, status_msg, sizeof(status_msg));
			SetStatusMsg(aStatus, status_msg);
		}
	}
}
Esempio n. 2
0
Protocol::Protocol(const char *aName, const TCHAR *descr)
{
	mir_strncpy(name, aName, _countof(name));
	mir_tstrncpy(description, descr, _countof(description));

	data_changed = true;

	// Load services
	int caps = CallProtoService(name, PS_GETCAPS, PFLAGNUM_1, 0);
	if (caps & PF1_IM)
		valid = true;
	else
		return;

	can_have_listening_to = (ProtoServiceExists(name, PS_SET_LISTENINGTO) != 0);

	PF3 = CallProtoService(name, PS_GETCAPS, (WPARAM)PFLAGNUM_3, 0);
	caps = CallProtoService(name, PS_GETCAPS, PFLAGNUM_4, 0);
	can_have_avatar = (caps & PF4_AVATARS) != 0;
	can_set_nick = ProtoServiceExists(name, PS_SETMYNICKNAME) != FALSE;

	// Initial value
	GetStatus();
	GetStatusMsg();
	GetNick();
	GetAvatar();
}
Esempio n. 3
0
void Protocol::SetStatus(int aStatus)
{
	TCHAR status_msg[256];

	if (ServiceExists(MS_CS_SETSTATUSEX)) {
		// BEGIN From commomstatus.cpp (KeepStatus)
		int i, count, pCount;
		PROTOACCOUNT **accs;

		pCount = 0;
		ProtoEnumAccounts(&count, &accs);
		for (i = 0; i < count; i++) {
			if (CallProtoService(accs[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0) == 0)
				continue;
			pCount++;
		}
		// END From commomstatus.cpp (KeepStatus)

		PROTOCOLSETTINGEX **pse = (PROTOCOLSETTINGEX **)mir_calloc(pCount * sizeof(PROTOCOLSETTINGEX *));
		for (i = 0; i < pCount; i++) {
			pse[i] = (PROTOCOLSETTINGEX *)mir_calloc(sizeof(PROTOCOLSETTINGEX));
			pse[i]->szName = "";
		}

		pse[0]->cbSize = sizeof(PROTOCOLSETTINGEX);
		pse[0]->status = aStatus;
		pse[0]->szName = name;

		GetStatusMsg(aStatus, status_msg, SIZEOF(status_msg));
		pse[0]->szMsg = status_msg;

		CallService(MS_CS_SETSTATUSEX, (WPARAM)&pse, 0);

		for (i = 0; i < pCount; i++)
			mir_free(pse[i]);
		mir_free(pse);
	}
	else {
		CallProtoService(name, PS_SETSTATUS, aStatus, 0);

		if (CanSetStatusMsg(aStatus)) {
			TCHAR status_msg[MS_MYDETAILS_GETMYSTATUSMESSAGE_BUFFER_SIZE];
			GetStatusMsg(aStatus, status_msg, SIZEOF(status_msg));
			SetStatusMsg(aStatus, status_msg);
		}
	}
}
Esempio n. 4
0
void Protocol::UpdateStatusMsg()
{
	status_message_initialized = true;

	TCHAR tmp[1024];
	GetStatusMsg(GetStatus(), tmp, sizeof(tmp));

	status_message = tmp;
}
Esempio n. 5
0
TCHAR* Protocol::GetStatusMsg()
{
	GetStatusMsg(status, status_message, _countof(status_message));
	return status_message;
}
Esempio n. 6
0
TCHAR* Protocol::GetStatusMsg()
{
	GetStatusMsg(status, status_message, SIZEOF(status_message));
	return status_message;
}
std::string CallHprose::UploadFileObject()
{
	if (dataFileObject.CheckInfo() == FALSE)
	{
		m_bUploadErr = true; 
		return "";
	}
	if (m_TaskStatus  == Upload_PAUSE  || m_TaskStatus == Upload_STOP || m_TaskStatus ==  Upload_DELET)
	{
		 ZTools::WriteZToolsFormatLog("CheckInfo完成,用户:%s",GetStatusMsg(m_TaskStatus));
		 return "";
	}

	ZTools::WriteZToolsFormatLog("单个文件上传前");
	
	dataFileObject.m_strFileId = "";
	
	if(m_bCreateIndexForFileInfo)
	{
		CString strTmp = GetNewGUID();
		strTmp.TrimLeft("{");
		strTmp.TrimRight("}");
		dataFileObject.m_strIndex = strTmp;
		ZTools::WriteZToolsFormatLog("创建新的GUID:%s",dataFileObject.m_strIndex.c_str());
	}

	DataFiles oFiles;
	DataFile oFile;
	oFile.name = dataFileObject.m_strFileName;
	oFile.size = ZTools::FormatString("%lld", dataFileObject.m_nFileSize); // 大文件需用long long ,匹配时用lld
	oFile.lastModified = dataFileObject.m_strLastModifyTime;
	oFile.md5 = dataFileObject.m_strMd5;
	oFile.index = m_strNetDiskFileID; // 这个值在续传的时候不会变
	oFiles.files.push_back(oFile);
	ZTools::WriteZToolsFormatLog("上传文件[%s]\nMD5值[%s]\n文件大小[%s]\nIndex值[%s]\n最后更新时间[%s]",
		oFile.name.c_str(),oFile.md5.c_str(),oFile.size.c_str(),oFile.index.c_str(),oFile.lastModified.c_str());

	std::vector<hprose::any> vecAny;
	vecAny.clear();
	vecAny.push_back(oFiles.ToJson());
	if (!init(dataFileObject.m_strHproseRpc, vecAny))
	{
		m_bUploadErr = true;
		ZTools::WriteZToolsLog(dataFileObject.m_strMsg);
		return "";
	}
	if (m_TaskStatus  == Upload_PAUSE  || m_TaskStatus == Upload_STOP || m_TaskStatus ==  Upload_DELET)
	{
		ZTools::WriteZToolsFormatLog("init成功,用户:%s",GetStatusMsg(m_TaskStatus));
		return "";
	}
	if (m_bCreateIndexForFileInfo == FALSE)
		oFile.index = dataFileObject.m_strIndex; // 使用init后返回的新的index

	//文件大小为0或者文件MD5在数据库中找到重复的,init方法会直接返回fileId,不用走cwrite逻辑
	if (!dataFileObject.m_strFileId.empty())
	{
		ZTools::WriteZToolsFormatLog("单个文件秒传完成,%s",dataFileObject.m_strFileId.c_str());
		dataFileObject.m_nFileSizeUploaded = dataFileObject.m_nFileSize;

		return dataFileObject.m_strFileId;
	}

	std::wstring wstrFilePath = s2ws_1(dataFileObject.m_strFilePath);
	std::ifstream fIn(wstrFilePath, std::ios::binary);
	if (fIn == NULL || fIn.is_open() == false)
	{
		dataFileObject.m_strMsg = ZTools::FormatString("read file error: %s", dataFileObject.m_strFilePath.c_str());
		ZTools::WriteZToolsLog(dataFileObject.m_strMsg);
		m_bUploadErr = true; 
		return "";
	}
	if(dataFileObject.m_nFileSizeUploaded > 0)
		fIn.seekg(dataFileObject.m_nFileSizeUploaded,std::ios::beg); //断点续传

	int nBlockSize = 256 * 1024;
	std::vector<char> vchar;
	vchar.resize(nBlockSize, '\0');
	std::streamsize nBlockRead = 0;

	//dataFileObject.m_nFileSizeUploaded = 0;
	ZTools::WriteZToolsLog("开始执行cwrite循环...");
	ZTools::WriteZToolsFormatLog("cwrite使用的Index值为:%s",oFile.index.c_str());
	while (true)
	{
		nBlockRead = fIn.read(reinterpret_cast<char*>(&vchar[0]), 256*1024).gcount();
		if (nBlockRead == 0)
		{
			break;
		}

		if (m_TaskStatus  == Upload_PAUSE  || m_TaskStatus == Upload_STOP || m_TaskStatus ==  Upload_DELET)
		{
			dataFileObject.m_strMsg = (LPCTSTR)GetStatusMsg(m_TaskStatus);
			ZTools::WriteZToolsFormatLog("cwrite循环中,用户:%s",dataFileObject.m_strMsg.c_str());
			break;
		}

		vecAny.clear();
		vecAny.push_back(oFile.index);
		vecAny.push_back(vchar);
		vecAny.push_back(nBlockRead);

		if (!cwrite(dataFileObject.m_strHproseRpc, vecAny))
		{
			if (dataFileObject.m_strMsg.empty())
				dataFileObject.m_strMsg = "上传出错!";
			ZTools::WriteZToolsLog(dataFileObject.m_strMsg);
			//MessageBox(NULL,dataFileObject.m_strMsg.c_str(),"错误",MB_OK|MB_ICONERROR);
			m_bUploadErr = true; 
			return "";
		}

		dataFileObject.m_nFileSizeUploaded += nBlockRead;
	}	

	if (dataFileObject.m_strFileId.empty())
	{
		if (dataFileObject.m_strMsg.empty())
			dataFileObject.m_strMsg = "unkown error";

		if (m_TaskStatus == Upload_Runing)
			m_bUploadErr = true; 

		ZTools::WriteZToolsLog(dataFileObject.m_strMsg);
		return "";
	}

	ZTools::WriteZToolsFormatLog("单个文件上传完成,%s",dataFileObject.m_strFileId.c_str());

	dataFileObject.m_nFileSizeUploaded = dataFileObject.m_nFileSize;

	return dataFileObject.m_strFileId;	
}