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); } } }
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(); }
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); } } }
void Protocol::UpdateStatusMsg() { status_message_initialized = true; TCHAR tmp[1024]; GetStatusMsg(GetStatus(), tmp, sizeof(tmp)); status_message = tmp; }
TCHAR* Protocol::GetStatusMsg() { GetStatusMsg(status, status_message, _countof(status_message)); return status_message; }
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; }