bool CPlayer::Logon(const std::string& ip, USHORT port) { if (isLogon()) { Logout(); } m_logonSocket = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN sock_in; sock_in.sin_addr.S_un.S_addr=inet_addr(ip.c_str()); sock_in.sin_family=AF_INET; sock_in.sin_port=htons(port); for (int i=0; i<5; ++i) { if (connect(m_logonSocket,(SOCKADDR*)&sock_in,sizeof(SOCKADDR))) { // send and recv packets to make a connection with logon server ::InterlockedExchange(&m_bLogon, 1); m_hLogonThread = CreateThread(NULL, 0, LogonThreadProc, reinterpret_cast<LPVOID>(this), 0, NULL); return true; } ::Sleep(500); } return false; }
void ServiceClient::parseBuffer(const QByteArray& buff) { //qDebug() << "Recieved! size=" << m_uiBlockSize; //QByteArray buff = m_qTcpSocket->read(m_uiBlockSize); ::uploadercontrol::ServiceResponse serverResponse; bool bParse = serverResponse.ParseFromArray(buff, m_uiBlockSize);//bytes.data(), bytes.size()); if(!bParse) { //QMessageBox::information(0, "", "Ошибка чтения данных!"); qDebug() << "Error of read!"; m_flagForWaitBytes = WAIT_ID; m_uiBlockSize = 0; // /*QString rn = QString::number(200 * ((double)qrand()/RAND_MAX)); FileUploadInfoModel fu1; fu1.setProgress(50); fu1.setFileName(rn); fu1.setIsBackup(false); fu1.setUploadStatus(FileUploadInfoModel::Pending); fu1.setCheckSum(rn); fu1.setIsArchive(false); fu1.setTask("fgfg"); fu1.setDateTime(QDateTime::currentDateTime()); fu1.setAttemptsRemaining(22); fu1.setResult(""); fu1.setIndexed(false); emit dataUpload(fu1); fu1.setCheckSum("dfdfdfdf"); fu1.setFileName("111111111111"); fu1.setUploadStatus(FileUploadInfoModel::Pending); fu1.setIsBackup(true); emit dataUpload(fu1);*/ // return; } //разбор байтов и определение типа switch(serverResponse.messagetype()) { case ::uploadercontrol::ServiceResponse::AUTHORIZATION_STATUS: { //если пользователь еще не авторизован, то принимаем класс AutorizationResponce m_Credentials.setAdmin(serverResponse.authorization().isadmin()); m_Credentials.setAlreadyAuthorized(serverResponse.authorization().alreadyauthorized()); if(!serverResponse.authorization().isok()) Disconnect(); emit isLogon(m_Credentials, serverResponse.authorization().isok()); break; } case ::uploadercontrol::ServiceResponse::FILE_STATUS: { //если пользователь авторизован, то другой тип сообщения FileUploadInfoModel fu; if(serverResponse.filestatus().has_login()) fu.setLogin(QString::fromStdString(serverResponse.filestatus().login())); for(const auto& item : serverResponse.filestatus().infos()) { int progress = 0; if(item.size() != 0) progress = (100 * item.bytesprocessed()) / ((double)item.size()); fu.setProgress(progress); fu.setFileName(QString::fromStdString(item.pathname())); fu.setIsBackup(item.isbackup()); fu.setUploadStatus(convertStatus(item.status())); fu.setCheckSum(QString::fromStdString(item.checksum())); fu.setIsArchive(serverResponse.filestatus().responsetype() == ::uploadercontrol::Archive); fu.setTask(QString::fromStdString(item.task())); fu.setDateTime(QDateTime::fromTime_t(item.uploaddate())); fu.setAttemptsRemaining(item.retriescount()); fu.setResult(QString::fromStdString(item.additionalmessage())); fu.setIndexed(item.has_fileid()); //qDebug() << fu.fileName(); emit dataUpload(fu); } break; } case ::uploadercontrol::ServiceResponse::COPYING_STATUS: { //информация о том сколько байтов скопировано при промежуточном копировании FileUploadInfoModel fu; fu.setFileSize(serverResponse.copyingstatus().filestotal()); fu.setProgress(serverResponse.copyingstatus().filescopied()); emit dataInfoCopying(fu); break; } case ::uploadercontrol::ServiceResponse::MAINTENANCE_STATUS: { // emit isPaused(serverResponse.maintenancestatus().ispaused()); break; } case ::uploadercontrol::ServiceResponse::FILELIST: { //emit isPaused(serverResponse.maintenancestatus().ispaused()); QList<FileSystemRemoteItemModel> fileList; for(int i = 0; i < serverResponse.filelist().list_size(); i++) { FileSystemRemoteItemModel item; item.setIsFolder(serverResponse.filelist().list(i).isfolder()); item.setName(QString::fromStdString(serverResponse.filelist().list(i).name())); fileList.append(item); } responseFolderContents(fileList, serverResponse.filelist().foldercontentrecursively()); break; } case ::uploadercontrol::ServiceResponse::ERRORMESSAGE: { // emit questionsAboutDownloading(QString::fromStdString(serverResponse.error().message())); break; } default: { qDebug() << "default messagetype = " << serverResponse.messagetype(); } } //Обнуляем переменную m_flagForWaitBytes = WAIT_ID; m_uiBlockSize = 0; }