コード例 #1
0
nsresult
MediaManager::GetUserMediaDevices(nsPIDOMWindow* aWindow,
  nsIGetUserMediaDevicesSuccessCallback* aOnSuccess,
  nsIDOMGetUserMediaErrorCallback* aOnError)
{
  NS_ASSERTION(NS_IsMainThread(), "Only call on main thread");

  NS_ENSURE_TRUE(aOnError, NS_ERROR_NULL_POINTER);
  NS_ENSURE_TRUE(aOnSuccess, NS_ERROR_NULL_POINTER);

  nsCOMPtr<nsIGetUserMediaDevicesSuccessCallback> onSuccess(aOnSuccess);
  nsCOMPtr<nsIDOMGetUserMediaErrorCallback> onError(aOnError);

  nsCOMPtr<nsIRunnable> gUMDRunnable = new GetUserMediaDevicesRunnable(
    onSuccess.forget(), onError.forget()
  );

  nsCOMPtr<nsIThread> deviceThread;
  nsresult rv = NS_NewThread(getter_AddRefs(deviceThread));
  NS_ENSURE_SUCCESS(rv, rv);


  deviceThread->Dispatch(gUMDRunnable, NS_DISPATCH_NORMAL);
  return NS_OK;
}
コード例 #2
0
ファイル: SendLogsDialog.cpp プロジェクト: RJ/lastfm-desktop
void
SendLogsDialog::send()
{
    SendLogsRequest* request = new SendLogsRequest( ui.moreInfoTextEdit->toPlainText() );

    connect( request, SIGNAL( success() ), SLOT( onSuccess() ) );
    connect( request, SIGNAL( error() ), SLOT( onError() ) );

    QDir logDir = CoreDir::logs();
    QStringList logExt( "*.log" );
        
    // find logs
    logDir.setFilter( QDir::Files | QDir::Readable );
    logDir.setNameFilters( logExt );
    QList<QFileInfo> logFiles = logDir.entryInfoList();
    
    foreach( QFileInfo log, logFiles )
        request->addLog( log.completeBaseName(), log.absoluteFilePath() );

    request->addLogData( "clientinfo", clientInformationString() );
    request->addLogData( "sysinfo", systemInformationString() );
    
    request->send();
    
    ui.buttonBox->setEnabled( false );
    ui.moreInfoTextEdit->setEnabled( false );
    ui.spinner->show();
    ui.spinner->movie()->start();
}
コード例 #3
0
ファイル: Task.cpp プロジェクト: NTNU-MCS/dune
      void
      getPlanInfo(const IMC::PlanDB& req)
      {
        if (req.plan_id.empty())
        {
          onFailure(DTR("undefined plan id"));
          return;
        }

        *m_query_plan_stmt << req.plan_id;

        bool found = m_query_plan_stmt->execute();

        if (!found)
        {
          onFailure(DTR("undefined plan"));
          return;
        }

        m_plan_info.plan_id = req.plan_id;
        *m_query_plan_stmt >> m_plan_info.change_time
                           >> m_plan_info.change_sid
                           >> m_plan_info.change_sname
                           >> m_plan_info.md5
                           >> m_plan_info.plan_size;

        m_reply.arg.set(m_plan_info);
        m_query_plan_stmt->reset();

        onSuccess();
      }
コード例 #4
0
ファイル: Task.cpp プロジェクト: tsalidis/dune
      void
      onVehicleManeuver(const IMC::VehicleState* vs)
      {
        if (!execMode() || pendingReply())
          return;

        if (vs->flags & IMC::VehicleState::VFLG_MANEUVER_DONE)
        {
          if (m_plan->isDone())
          {
            vehicleRequest(IMC::VehicleCommand::VC_STOP_MANEUVER);

            std::string comp = DTR("plan completed");
            onSuccess(comp, false);
            m_pcs.last_outcome = IMC::PlanControlState::LPO_SUCCESS;
            m_reply.plan_id = m_spec.plan_id;
            changeMode(IMC::PlanControlState::PCS_READY, comp);
          }
          else
          {
            IMC::PlanManeuver* pman = m_plan->loadNextManeuver();
            startManeuver(pman);
          }
        }
        else
        {
          m_pcs.man_eta = vs->maneuver_eta;
        }
      }
コード例 #5
0
ファイル: Work.cpp プロジェクト: vogel/stellar-core
void
Work::complete(CompleteResult result)
{
    CLOG(DEBUG, "Work") << "completed " << getUniqueName();
    auto& succ =
        mApp.getMetrics().NewMeter({"work", "unit", "success"}, "unit");
    auto& fail =
        mApp.getMetrics().NewMeter({"work", "unit", "failure"}, "unit");

    switch (result)
    {
    case WORK_COMPLETE_OK:
        setState(onSuccess());
        break;
    case WORK_COMPLETE_FAILURE:
        setState(WORK_FAILURE_RETRY);
        break;
    case WORK_COMPLETE_FATAL:
        setState(WORK_FAILURE_FATAL);
        break;
    }

    switch (getState())
    {
    case WORK_SUCCESS:
        succ.Mark();
        CLOG(DEBUG, "Work")
            << "notifying parent of successful " << getUniqueName();
        notifyParent();
        break;

    case WORK_FAILURE_RETRY:
        fail.Mark();
        onFailureRetry();
        scheduleRetry();
        break;

    case WORK_FAILURE_RAISE:
    case WORK_FAILURE_FATAL:
        fail.Mark();
        onFailureRaise();
        CLOG(DEBUG, "Work") << "notifying parent of failed " << getUniqueName();
        notifyParent();
        break;

    case WORK_PENDING:
        succ.Mark();
        advance();
        break;

    case WORK_RUNNING:
        succ.Mark();
        scheduleRun();
        break;

    default:
        assert(false);
        break;
    }
}
コード例 #6
0
ファイル: Task.cpp プロジェクト: Aero348/dune
      void
      deletePlan(const IMC::PlanDB& req)
      {
        if (req.plan_id.empty())
        {
          onFailure(DTR("undefined plan id"));
          return;
        }

        inProgress();
        m_db->beginTransaction();

        int count = 0;
        try
        {
          *m_delete_plan_stmt << req.plan_id;
          m_delete_plan_stmt->execute(&count);
          if (count)
            onChange(req);
        }
        catch (std::runtime_error& e)
        {
          onFailure(e.what());
          m_db->rollback();
          return;
        }

        m_db->commit();

        if (!count)
          onFailure(DTR("undefined plan"));
        else
          onSuccess();
      }
コード例 #7
0
ファイル: Task.cpp プロジェクト: Aero348/dune
      void
      getPlan(const IMC::PlanDB& req)
      {
        if (req.plan_id.empty())
        {
          onFailure(DTR("undefined plan id"));
          return;
        }

        *m_get_plan_stmt << req.plan_id;

        bool found = m_get_plan_stmt->execute();


        if (!found)
        {
          onFailure(DTR("undefined plan"));
        }
        else
        {
          Database::Blob data;
          *m_get_plan_stmt >> data;

          IMC::PlanSpecification* spec = new IMC::PlanSpecification;
          spec->deserializeFields((const uint8_t*)&data[0], data.size());
          m_reply.arg.set(spec);

          if (m_args.trace)
            spec->toText(std::cerr);

          onSuccess();
        }
        m_get_plan_stmt->reset();
      }
コード例 #8
0
ファイル: AnimationCache.cpp プロジェクト: AndrewMeadows/hifi
void Animation::downloadFinished(const QByteArray& data) {
    // parse the animation/fbx file on a background thread.
    AnimationReader* animationReader = new AnimationReader(_url, data);
    connect(animationReader, SIGNAL(onSuccess(HFMModel::Pointer)), SLOT(animationParseSuccess(HFMModel::Pointer)));
    connect(animationReader, SIGNAL(onError(int, QString)), SLOT(animationParseError(int, QString)));
    QThreadPool::globalInstance()->start(animationReader);
}
コード例 #9
0
void IDBRequest::requestCompleted(const IDBResultData& resultData)
{
    m_idbError = resultData.error();
    if (!m_idbError.isNull())
        onError();
    else
        onSuccess();
}
コード例 #10
0
ファイル: Session.cpp プロジェクト: yewsky/507
void Session::onReadDone(const boost::system::error_code& error, size_t  bytes_transferred, Callback cb)
{
    if (!error) {
        onSuccess(cb);
    } else {
        onError(error, cb);
    }
}
コード例 #11
0
ファイル: QueryActor.cpp プロジェクト: olegartys/s-house
int QueryActor::onGetStateSuccess(int id, std::string data) {
    Response resp;
    resp.id = id;
    resp.data = data;
    resp.statusCode = Response::StatusCode::SUCCESS;

    onSuccess(resp);
}
コード例 #12
0
ファイル: RegFinishDlg.cpp プロジェクト: bugou/test
void CRegFinishDlg::onRemoteContactList(const char *domain)
{
	CRegWizard *wiz = (CRegWizard *) GetParent();
	this->domain = domain;

	onSuccess();

	getUdpSession()->logout();
}
コード例 #13
0
ファイル: RegFinishDlg.cpp プロジェクト: bugou/test
void CRegFinishDlg::onSendError(uint32 seq)
{
	CRegWizard *wiz = (CRegWizard *) GetParent();

	if (!wiz->isFinished)
		onTimeout();
	else
		onSuccess();
}
コード例 #14
0
ファイル: Session.cpp プロジェクト: yewsky/507
void Session::onConnectDone(const boost::system::error_code& error, Callback cb)
{
    if (!error) {
    	_response.hdr.flags = 0;
    	_response.hdr.extra = sizeof("连接成功");
    	strcpy(_response.content, "连接成功");
        onSuccess(cb);
    } else {
        onError(error, cb);
    }
}
コード例 #15
0
ファイル: Task.cpp プロジェクト: Aero348/dune
      void
      getDatabaseState(const IMC::PlanDB& req)
      {
        (void)req;
        IMC::PlanDBState* state = new IMC::PlanDBState;

        state->plan_size = 0;
        state->plan_count = 0;

        MD5 md5sum;

        IMC::MessageList<PlanDBInformation>* plandbinfo = &state->plans_info;

        while (m_plan_iterator_stmt->execute())
        {
          IMC::PlanDBInformation* pinfo = new IMC::PlanDBInformation;

          *m_plan_iterator_stmt >> pinfo->plan_id
                                >> pinfo->change_time
                                >> pinfo->change_sid
                                >> pinfo->change_sname
                                >> pinfo->md5
                                >> pinfo->plan_size;

          md5sum.update((const uint8_t*)&pinfo->md5[0], 16); // the MD5 of all MD5s ordered by plan_id
          state->plan_size += pinfo->plan_size;
          state->plan_count++;

          if (m_args.trace)
            pinfo->toText(std::cerr);

          plandbinfo->push_back(*pinfo);

          delete pinfo;
        }
        m_plan_iterator_stmt->reset();

        // Finalized MD5 digest
        state->md5.resize(16);
        md5sum.finalize((uint8_t*)&state->md5[0]);

        m_lastchange_query_stmt->execute();
        *m_lastchange_query_stmt >> state->change_time
                                 >> state->change_sid
                                 >> state->change_sname;
        m_lastchange_query_stmt->reset();

        if (m_args.trace)
          state->toText(std::cerr);
        m_reply.arg.set(*state);
        onSuccess();

        delete state;
      }
コード例 #16
0
ファイル: Task.cpp プロジェクト: tsalidis/dune
      //! Get current plan
      void
      getPlan(void)
      {
        if (!initMode() && !execMode())
        {
          onFailure(DTR("no plan is running"));
          return;
        }

        m_reply.arg.set(m_spec);
        m_reply.plan_id = m_spec.plan_id;
        onSuccess();
      }
コード例 #17
0
ファイル: Task.cpp プロジェクト: tsalidis/dune
      //! Start a given plan
      //! @param[in] plan_id name of the plan to execute
      //! @param[in] spec plan specification message if any
      //! @param[in] flags plan control flags
      //! @return false if previously executing maneuver was not stopped
      bool
      startPlan(const std::string& plan_id, const IMC::Message* spec, uint16_t flags)
      {
        bool stopped = stopPlan(true);

        changeMode(IMC::PlanControlState::PCS_INITIALIZING,
                   DTR("plan initializing: ") + plan_id);

        if (!loadPlan(plan_id, spec, true))
          return stopped;

        changeLog(plan_id);

        // Flag the plan as starting
        if (initMode() || execMode())
        {
          if (!stopped)
            m_plan->planStopped();

          m_plan->planStarted();
        }

        dispatch(m_spec);

        if ((flags & IMC::PlanControl::FLG_CALIBRATE) &&
            m_args.do_calib)
        {
          if (!startCalibration())
            return stopped;
        }
        else
        {
          IMC::PlanManeuver* pman = m_plan->loadStartManeuver();
          startManeuver(pman);

          if (execMode())
          {
            onSuccess(m_last_event);
          }
          else
          {
            onFailure(m_last_event);
            return stopped;
          }
        }

        return true;
      }
コード例 #18
0
void IDBOpenDBRequest::requestCompleted(const IDBResultData& data)
{
    LOG(IndexedDB, "IDBOpenDBRequest::requestCompleted");

    switch (data.type()) {
    case IDBResultType::Error:
        onError(data);
        break;
    case IDBResultType::OpenDatabaseSuccess:
        onSuccess(data);
        break;
    case IDBResultType::OpenDatabaseUpgradeNeeded:
        onUpgradeNeeded(data);
        break;
    }
}
コード例 #19
0
ファイル: CuttingDialog.cpp プロジェクト: Timmmm/robocut
void CuttingDialog::startCut(const CutParams& params)
{
	if (thread)
	{
		qDebug() << "Internal error: startCut() called twice.";
		return;
	}
	thread = new CuttingThread(this);

	connect(thread, SIGNAL(success()), SLOT(onSuccess()));
	connect(thread, SIGNAL(error(QString)), SLOT(onError(QString)));

	thread->setParams(params);

	thread->start();
}
コード例 #20
0
medSegmentationWorkspace::medSegmentationWorkspace(QWidget * parent /* = NULL */ ) :
medAbstractWorkspace(parent), d(new medSegmentationWorkspacePrivate)
{
    d->segmentationToolBox = new medSegmentationSelectorToolBox(parent);

    connect(d->segmentationToolBox, SIGNAL(installEventFilterRequest(medViewEventFilter*)),
            this, SLOT(addViewEventFilter(medViewEventFilter*)));

    connect(d->segmentationToolBox,SIGNAL(success()),this,SLOT(onSuccess()));

    // Always have a parent.
    if (!parent)
        throw (std::runtime_error ("Must have a parent widget"));

    this->addToolBox(d->segmentationToolBox);
}
コード例 #21
0
ファイル: Task.cpp プロジェクト: posilva/dune
      void
      storeInDB(const IMC::PlanSpecification* spec)
      {
        m_plan_info.plan_size = spec->getPayloadSerializationSize();
        m_plan_info.plan_id = spec->plan_id;
        m_plan_info.change_time = Clock::getSinceEpoch();
        m_plan_info.change_sid = spec->getSource();
        m_plan_info.change_sname = resolveSystemId(m_plan_info.change_sid);

        Database::Blob plan_data(m_plan_info.plan_size);
        spec->serializeFields((uint8_t*)&plan_data[0]);

        m_plan_info.md5.resize(16);
        MD5::compute((uint8_t*)&plan_data[0], m_plan_info.plan_size, (uint8_t*)&m_plan_info.md5[0]);

        m_db->beginTransaction();

        int count = 0;
        try
        {
          *m_delete_plan_stmt << m_plan_info.plan_id;
          m_delete_plan_stmt->execute(&count);
          m_delete_plan_stmt->reset();

          *m_insert_plan_stmt << m_plan_info.plan_id
                              << m_plan_info.change_time
                              << m_plan_info.change_sid
                              << m_plan_info.change_sname
                              << m_plan_info.md5
                              << plan_data;
          m_insert_plan_stmt->execute();
          onChange(m_plan_info.change_time, m_plan_info.change_sid, m_plan_info.change_sname);
        }
        catch (std::runtime_error& e)
        {
          onFailure(e.what());
          m_db->rollback();
        }

        m_db->commit();

        if (m_args.trace)
          m_plan_info.toText(std::cerr);

        m_reply.arg.set(m_plan_info);
        onSuccess(count ? DTR("OK (updated)") : DTR("OK (new entry)"));
      }
void __JSDownloaderDelegator::startDownload()
{
    if (auto texture = Director::getInstance()->getTextureCache()->getTextureForKey(_url))
    {
        onSuccess(texture);
    }
    else
    {
        _downloader = std::make_shared<cocos2d::network::Downloader>();
//        _downloader->setConnectionTimeout(8);
        _downloader->onTaskError = [this](const cocos2d::network::DownloadTask& task,
                                          int errorCode,
                                          int errorCodeInternal,
                                          const std::string& errorStr)
        {
            this->onError();
        };

        _downloader->onDataTaskSuccess = [this](const cocos2d::network::DownloadTask& task,
                                                std::vector<unsigned char>& data)
        {
            Image* img = new (std::nothrow) Image();
            Texture2D *tex = nullptr;
            do
            {
                if (false == img->initWithImageData(data.data(), data.size()))
                {
                    break;
                }
                tex = Director::getInstance()->getTextureCache()->addImage(img, _url);
            } while (0);

            CC_SAFE_RELEASE(img);

            if (tex)
            {
                this->onSuccess(tex);
            }
            else
            {
                this->onError();
            }
        };

        _downloader->createDownloadDataTask(_url);
    }
}
コード例 #23
0
MeltedPlaylistDock::MeltedPlaylistDock(QWidget *parent)
    : QDockWidget(parent)
    , ui(new Ui::MeltedPlaylistDock)
    , m_transportControl(new MeltedPlaylist::TransportControl(m_model))
{
    ui->setupUi(this);
    ui->tableView->setModel(&m_model);
    ui->tableView->setDragDropMode(QAbstractItemView::DragDrop);
    ui->tableView->setDropIndicatorShown(true);
    ui->tableView->setDragDropOverwriteMode(false);
    ui->tableView->setAcceptDrops(true);
    connect(&m_model, SIGNAL(loaded()), ui->tableView, SLOT(resizeColumnsToContents()));
    connect(&m_model, SIGNAL(dropped(QString,int)), this, SLOT(onDropped(QString,int)));
    connect(&m_model, SIGNAL(moveClip(int,int)), this, SLOT(onMoveClip(int,int)));
    connect(&m_model, SIGNAL(success()), this, SLOT(onSuccess()));
    connect(ui->actionAppendCut, SIGNAL(triggered()), this, SLOT(on_addButton_clicked()));
    connect(ui->actionRemove, SIGNAL(triggered()), this, SLOT(on_removeButton_clicked()));
}
コード例 #24
0
void IDBOpenDBRequest::requestCompleted(const IDBResultData& data)
{
    LOG(IndexedDB, "IDBOpenDBRequest::requestCompleted");

    ASSERT(currentThread() == originThreadID());

    // If an Open request was completed after the page has navigated, leaving this request
    // with a stopped script execution context, we need to message back to the server so it
    // doesn't hang waiting on a database connection or transaction that will never exist.
    if (m_contextStopped) {
        switch (data.type()) {
        case IDBResultType::OpenDatabaseSuccess:
            connectionProxy().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), IDBResourceIdentifier::emptyValue());
            break;
        case IDBResultType::OpenDatabaseUpgradeNeeded:
            connectionProxy().abortOpenAndUpgradeNeeded(data.databaseConnectionIdentifier(), data.transactionInfo().identifier());
            break;
        default:
            break;
        }

        return;
    }

    switch (data.type()) {
    case IDBResultType::Error:
        onError(data);
        break;
    case IDBResultType::OpenDatabaseSuccess:
        onSuccess(data);
        break;
    case IDBResultType::OpenDatabaseUpgradeNeeded:
        onUpgradeNeeded(data);
        break;
    case IDBResultType::DeleteDatabaseSuccess:
        onDeleteDatabaseSuccess(data);
        break;
    default:
        RELEASE_ASSERT_NOT_REACHED();
    }
}
コード例 #25
0
void IDBOpenDBRequest::requestCompleted(const IDBResultData& data)
{
    LOG(IndexedDB, "IDBOpenDBRequest::requestCompleted");

    switch (data.type()) {
    case IDBResultType::Error:
        onError(data);
        break;
    case IDBResultType::OpenDatabaseSuccess:
        onSuccess(data);
        break;
    case IDBResultType::OpenDatabaseUpgradeNeeded:
        onUpgradeNeeded(data);
        break;
    case IDBResultType::DeleteDatabaseSuccess:
        onDeleteDatabaseSuccess(data);
        break;
    default:
        RELEASE_ASSERT_NOT_REACHED();
    }
}
コード例 #26
0
ファイル: Task.cpp プロジェクト: Aero348/dune
      void
      clearDatabase(const IMC::PlanDB& req)
      {
        inProgress();
        m_db->beginTransaction();

        try
        {
          m_delete_all_plans_stmt->execute();
          onChange(req);
        }
        catch (std::runtime_error& e)
        {
          onFailure(e.what());
          m_db->rollback();
          return;
        }

        m_db->commit();
        onSuccess();
      }
コード例 #27
0
ファイル: Sound.cpp プロジェクト: ZappoMan/hifi
void SoundProcessor::run() {

    qCDebug(audio) << "Processing sound file" << _url.toDisplayString();

    // replace our byte array with the downloaded data
    QByteArray rawAudioByteArray = QByteArray(_data);
    QString fileName = _url.fileName().toLower();

    static const QString WAV_EXTENSION = ".wav";
    static const QString RAW_EXTENSION = ".raw";
    if (fileName.endsWith(WAV_EXTENSION)) {

        QByteArray outputAudioByteArray;

        int sampleRate = interpretAsWav(rawAudioByteArray, outputAudioByteArray);
        if (sampleRate == 0) {
            qCDebug(audio) << "Unsupported WAV file type";
            emit onError(300, "Failed to load sound file, reason: unsupported WAV file type");
            return;
        }

        downSample(outputAudioByteArray, sampleRate);
    } else if (fileName.endsWith(RAW_EXTENSION)) {
        // check if this was a stereo raw file
        // since it's raw the only way for us to know that is if the file was called .stereo.raw
        if (fileName.toLower().endsWith("stereo.raw")) {
            _isStereo = true;
            qCDebug(audio) << "Processing sound of" << rawAudioByteArray.size() << "bytes from" << _url << "as stereo audio file.";
        }

        // Process as 48khz RAW file
        downSample(rawAudioByteArray, 48000);
    } else {
        qCDebug(audio) << "Unknown sound file type";
        emit onError(300, "Failed to load sound file, reason: unknown sound file type");
        return;
    }

    emit onSuccess(_data, _isStereo, _isAmbisonic, _duration);
}
コード例 #28
0
ファイル: AnimationCache.cpp プロジェクト: AndrewMeadows/hifi
void AnimationReader::run() {
    DependencyManager::get<StatTracker>()->decrementStat("PendingProcessing");
    CounterStat counter("Processing");

    PROFILE_RANGE_EX(resource_parse, __FUNCTION__, 0xFF00FF00, 0, { { "url", _url.toString() } });
    auto originalPriority = QThread::currentThread()->priority();
    if (originalPriority == QThread::InheritPriority) {
        originalPriority = QThread::NormalPriority;
    }
    QThread::currentThread()->setPriority(QThread::LowPriority);
    try {
        if (_data.isEmpty()) {
            throw QString("Reply is NULL ?!");
        }
        QString urlname = _url.path().toLower();
        bool urlValid = true;
        urlValid &= !urlname.isEmpty();
        urlValid &= !_url.path().isEmpty();

        if (urlValid) {
            // Parse the FBX directly from the QNetworkReply
            HFMModel::Pointer hfmModel;
            if (_url.path().toLower().endsWith(".fbx")) {
                hfmModel = FBXSerializer().read(_data, QVariantHash(), _url.path());
            } else {
                QString errorStr("usupported format");
                emit onError(299, errorStr);
            }
            emit onSuccess(hfmModel);
        } else {
            throw QString("url is invalid");
        }

    } catch (const QString& error) {
        emit onError(299, error);
    }
    QThread::currentThread()->setPriority(originalPriority);
}
コード例 #29
0
void DownloadFileTransferAPI::threadFct(boost::shared_array<uint8_t> const &adata, size_t &size) {
	FBLOG_DEBUG("DownloadFileTransferAPI::threadFct", "this=" << this);
	
	mFileStream.open(mFileStr.c_str(), std::ios_base::out | std::ios_base::binary);
	if(mFileStream.fail()) {
		FBLOG_DEBUG("UploadFileTransferAPI::start", "Can't open the target file: " << mFileStr);
		onError("Can't open the target file");
		return;
	}
	
	try {
		// Write the file by chunck
		const char *data = (const char *)adata.get();
		size_t writeSize;
		while(!boost::this_thread::interruption_requested() && size > 0) {
			writeSize = size;
			if(writeSize > BUFFER_SIZE) writeSize = BUFFER_SIZE;
			mFileStream.write(data, writeSize);
			if(mFileStream.fail()) {
				FBLOG_DEBUG("DownloadFileTransferAPI::threadFct", "File write error");
				onError("File write error");
				throw std::runtime_error("File write error");
			}
			data += writeSize;
			size -= writeSize;
		}
		mFileStream.close();
		onSuccess(true);
	} catch(std::runtime_error&) {
		// Remove incomplete file
		mFileStream.close();
		boost::filesystem::remove(mFilePath);
	}
	
	detachThread(boost::this_thread::get_id());
	mThread.reset();
}
コード例 #30
0
ファイル: Task.cpp プロジェクト: tsalidis/dune
      //! Load a plan into the vehicle
      //! @param[in] plan_id name of the plan
      //! @param[in] arg argument which may either be a maneuver or a plan specification
      //! @param[in] plan_startup true if a plan will start right after
      //! @return true if plan is successfully loaded
      bool
      loadPlan(const std::string& plan_id, const IMC::Message* arg,
               bool plan_startup = false)
      {
        if ((initMode() && !plan_startup) || execMode())
        {
          onFailure(DTR("cannot load plan now"));
          return false;
        }

        std::string info;
        if (!parseArg(plan_id, arg, info))
        {
          changeMode(IMC::PlanControlState::PCS_READY,
                     DTR("plan load failed: ") + info);
          return false;
        }

        IMC::PlanStatistics ps;

        if (!parsePlan(plan_startup, ps))
        {
          changeMode(IMC::PlanControlState::PCS_READY,
                     DTR("plan parse failed: ") + m_reply.info);
          return false;
        }

        // reply with statistics
        m_reply.arg.set(ps);
        m_reply.plan_id = m_spec.plan_id;

        m_pcs.plan_id = m_spec.plan_id;

        onSuccess(DTR("plan loaded"), false);

        return true;
      }