void CDaemon::handleClientRead() { QTcpSocket * socket = qobject_cast<QTcpSocket *>(sender()); while(socket->bytesAvailable() > 8) { QDataStream stream(socket); quint64 size; stream >> size; if(socket->bytesAvailable() >= size) { QByteArray buffer(socket->read(size)); QDataStream bStream(buffer); quint8 opcode; bStream >> opcode; switch(opcode) { case OPCODE_ADD: handleAdd(bStream); break; case OPCODE_REMOVE: handleRemove(bStream); break; case OPCODE_START: handleStart(bStream); break; case OPCODE_STOP: handleAbort(bStream); break; case OPCODE_QUEUE: handleQueue(bStream); break; default: qWarning() << "Unhandled packet:" << quint32(opcode); break; } } }
CommandEngine::CommandEngine(Core *parent) : mCore(parent) { core()->print("CommandEngine initialized.", "CE"); queueTick = new QTimer(this); connect(queueTick, SIGNAL(timeout()), this, SLOT(handleQueue())); queueTick->start(150); }
int bamfiltermc(libmaus2::util::ArgInfo const & arginfo) { bool const verbose = arginfo.getValue("verbose",getDefaultVerbose()); libmaus2::bambam::BamAlignmentDecoderWrapper::unique_ptr_type decwrapper( libmaus2::bambam::BamMultiAlignmentDecoderFactory::construct(arginfo)); ::libmaus2::bambam::BamAlignmentDecoder * ppdec = &(decwrapper->getDecoder()); ::libmaus2::bambam::BamAlignmentDecoder & dec = *ppdec; ::libmaus2::bambam::BamHeader const & header = dec.getHeader(); ::libmaus2::bambam::BamAlignment & algn = dec.getAlignment(); std::string const tmpfilenamebase = arginfo.getUnparsedValue("tmpfile",arginfo.getDefaultTmpFileName()); uint64_t const numthreads = arginfo.getValueUnsignedNumeric<uint64_t>("numthreads",getDefaultNumThreads()); /* * start index/md5 callbacks */ std::string const tmpfileindex = tmpfilenamebase + "_index"; ::libmaus2::util::TempFileRemovalContainer::addTempFile(tmpfileindex); std::string md5filename; std::string indexfilename; std::vector< ::libmaus2::lz::BgzfDeflateOutputCallback * > cbs; ::libmaus2::lz::BgzfDeflateOutputCallbackMD5::unique_ptr_type Pmd5cb; if ( arginfo.getValue<unsigned int>("md5",getDefaultMD5()) ) { if ( libmaus2::bambam::BamBlockWriterBaseFactory::getMD5FileName(arginfo) != std::string() ) md5filename = libmaus2::bambam::BamBlockWriterBaseFactory::getMD5FileName(arginfo); else std::cerr << "[V] no filename for md5 given, not creating hash" << std::endl; if ( md5filename.size() ) { ::libmaus2::lz::BgzfDeflateOutputCallbackMD5::unique_ptr_type Tmd5cb(new ::libmaus2::lz::BgzfDeflateOutputCallbackMD5); Pmd5cb = UNIQUE_PTR_MOVE(Tmd5cb); cbs.push_back(Pmd5cb.get()); } } libmaus2::bambam::BgzfDeflateOutputCallbackBamIndex::unique_ptr_type Pindex; if ( arginfo.getValue<unsigned int>("index",getDefaultIndex()) ) { if ( libmaus2::bambam::BamBlockWriterBaseFactory::getIndexFileName(arginfo) != std::string() ) indexfilename = libmaus2::bambam::BamBlockWriterBaseFactory::getIndexFileName(arginfo); else std::cerr << "[V] no filename for index given, not creating index" << std::endl; if ( indexfilename.size() ) { libmaus2::bambam::BgzfDeflateOutputCallbackBamIndex::unique_ptr_type Tindex(new libmaus2::bambam::BgzfDeflateOutputCallbackBamIndex(tmpfileindex)); Pindex = UNIQUE_PTR_MOVE(Tindex); cbs.push_back(Pindex.get()); } } std::vector< ::libmaus2::lz::BgzfDeflateOutputCallback * > * Pcbs = 0; if ( cbs.size() ) Pcbs = &cbs; /* * end md5/index callbacks */ ::libmaus2::bambam::BamHeader::unique_ptr_type genuphead( libmaus2::bambam::BamHeaderUpdate::updateHeader(arginfo,header,"bamfiltermc",std::string(PACKAGE_VERSION)) ); libmaus2::bambam::BamBlockWriterBase::unique_ptr_type Pwriter(libmaus2::bambam::BamBlockWriterBaseFactory::construct(*genuphead,arginfo,Pcbs)); libmaus2::bambam::BamBlockWriterBase & wr = *Pwriter; // freelist size uint64_t const flsize = 16*1024; libmaus2::util::FreeList < libmaus2::bambam::BamAlignment, BamAlignmentFreeListDefaultAllocator, BamAlignmentFreeListDefaultTypeInfo > FL(flsize); libmaus2::util::SimpleQueue < libmaus2::bambam::BamAlignment::shared_ptr_type > Q; libmaus2::bambam::BamAuxFilterVector auxvec; auxvec.set('M','C'); uint64_t alcnt = 0; while ( dec.readAlignment() ) { if ( FL.empty() ) handleQueue(Q,FL,wr,auxvec,numthreads); assert ( ! FL.empty() ); libmaus2::bambam::BamAlignment::shared_ptr_type P = FL.get(); P->swap(algn); Q.push_back(P); if ( verbose && ((++alcnt % (1024*1024)) == 0) ) std::cerr << "[V] " << alcnt << std::endl; } handleQueue(Q,FL,wr,auxvec,numthreads); // reset BAM writer Pwriter.reset(); if ( Pmd5cb ) Pmd5cb->saveDigestAsFile(md5filename); if ( Pindex ) Pindex->flush(std::string(indexfilename)); return EXIT_SUCCESS; }