Exemple #1
0
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;
}
Exemple #2
0
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;
}