{
"semi-binary", objects::CCDDClient::eSemiBinary },
50{
"binary", objects::CCDDClient::eBinary }
54objects::CCDDClient::eBinary);
64data_format = TDataFormatParam::GetDefault();
72m_DataFormat(data_format)
102 SetArgs(
"binary=1&requestPacket=" 107 out.SetFormattingFlags(kJSONFlags);
122}
while(!next_reply->IsSetEnd_of_reply());
134cdd_request->SetSerial_number(serial_number);
135cdd_request->SetRequest().SetGet_blob_id().Assign(seq_id);
136cdd_packet.
Set().push_back(cdd_request);
138 Ask(cdd_packet, *cdd_reply);
147cdd_request->SetSerial_number(serial_number);
148cdd_request->SetRequest().SetGet_blob().Assign(blob_id);
149cdd_packet.
Set().push_back(cdd_request);
151 Ask(cdd_packet, *cdd_reply);
221shared_ptr<SCDDCacheInfo>
info= found->second;
233shared_ptr<SCDDCacheInfo>
info= found->second;
246shared_ptr<SCDDCacheInfo>
info= make_shared<SCDDCacheInfo>(idh, blob);
312 return int(s_Counter.
Add(1));
317 size_tpool_soft_limit,
318time_t pool_age_limit,
319 boolexclude_nucleotides)
343 if(ret.
data)
returnret;
358cdd_request->SetSerial_number(serial);
365cdd_request->SetRequest().SetGet_blob_by_seq_id(*nc_id);
366cdd_packet.
Set().push_back(cdd_request);
371 client.Get().Ask(cdd_packet, *cdd_reply);
375 auto& cdd_blob = cdd_reply->SetReply().SetGet_blob_by_seq_id();
376ret.
info.
Reset(&cdd_blob.SetBlob_id());
393 if(ret.
info)
break;
396 if(ret.
data)
returnret;
411cdd_request->SetSerial_number(serial);
413list<CRef<CSeq_id>>& req_ids = cdd_request->SetRequest().SetGet_blob_by_seq_ids();
419req_ids.push_back(nc_id);
421 if(req_ids.empty())
returnret;
422cdd_packet.
Set().push_back(cdd_request);
427 client.Get().Ask(cdd_packet, *cdd_reply);
431 auto& cdd_blob = cdd_reply->SetReply().SetGet_blob_by_seq_id();
432ret.
info.
Reset(&cdd_blob.SetBlob_id());
447 if(blob.
info)
returnblob.
info;
452cdd_request->SetSerial_number(serial);
457cdd_request->SetRequest().SetGet_blob_id().Assign(*
id);
458cdd_packet.
Set().push_back(cdd_request);
463 client.Get().Ask(cdd_packet, *cdd_reply);
467blob.
info.
Reset(&cdd_reply->SetReply().SetGet_blob_id());
481 if(blob.
data)
returnblob.
data;
497cdd_request->SetSerial_number(serial);
499 auto& req = cdd_request->SetRequest().SetGet_blob();
500req.SetSat(blob_id.
GetSat());
503cdd_packet.
Set().push_back(cdd_request);
508 client.Get().Ask(cdd_packet, *cdd_reply);
512ret.
Reset(&cdd_reply->SetReply().SetGet_blob());
524 if(!reply)
return false;
525 if(reply->GetReply().IsEmpty() && !reply->IsSetError())
return false;
526 if(reply->IsSetError()) {
531 if(reply->GetSerial_number() != serial) {
532 ERR_POST(
"CDD - serial number mismatch: "<< serial <<
" != "<< reply->GetSerial_number());
536 if(reply->GetReply().Which() != choice) {
537 ERR_POST(
"CDD - wrong reply type: "<< reply->GetReply().Which() <<
" != "<< choice);
547 switch(
id.Which()) {
603 if(
client->first >= cutoff
624s << (
unsigned int)blob_id.
GetSat() <<
'/' 634vector<string> parts;
636 if(parts.size() != 3)
returnret;
638blob_id->SetSat((
TBlobId::TSat)NStr::StringToNumeric<unsigned int>(parts[0]));
639blob_id->SetSub_sat((
TBlobId::TSub_sat)NStr::StringToNumeric<unsigned int>(parts[1]));
640blob_id->SetSat_key((
TBlobId::TSat_key)NStr::StringToNumeric<unsigned int>(parts[2]));
User-defined methods of the data storage class.
User-defined methods of the data storage class.
const size_t kMaxCacheSize
const int kMaxCacheLifespanSeconds
static ESerialDataFormat s_GetSerialFormat(CCDDClient::EDataFormat &data_format)
NCBI_PARAM_DEF(double, CDD, client_timeout, -1.0)
NCBI_PARAM_ENUM_ARRAY(objects::CCDDClient::EDataFormat, CDD, data_format)
NCBI_PARAM_DECL(double, CDD, client_timeout)
typedef NCBI_PARAM_TYPE(CDD, data_format) TDataFormatParam
NCBI_PARAM_ENUM_DEF(objects::CCDDClient::EDataFormat, CDD, data_format, objects::CCDDClient::eBinary)
NCBI_PARAM_ENUM_DECL(objects::CCDDClient::EDataFormat, CDD, data_format)
#define DEFAULT_CDD_SERVICE_NAME
CAtomicCounter_WithAutoInit â.
void x_UpdateDeadline(shared_ptr< SCDDCacheInfo > &info)
CCDDClientPool::SCDDBlob TBlob
TBlob Get(const CSeq_id_Handle &seq_id)
list< shared_ptr< SCDDCacheInfo > > TInfoQueue
CCDDClientPool::TBlobId TBlobId
map< CSeq_id_Handle, shared_ptr< SCDDCacheInfo > > TSeqIdMap
map< string, shared_ptr< SCDDCacheInfo > > TBlobIdMap
virtual const char * GetErrCodeString(void) const override
Get error code interpreted as text.
CCDDClientGuard(CCDDClientPool &pool)
CCDDClientPool::TClient m_Client
static CRef< TBlobId > StringToBlobId(const string &s)
SCDDBlob GetBlobBySeq_ids(const TSeq_idSet &ids)
TBlobData GetBlobByBlobId(const TBlobId &blob_id)
TBlobData x_RequestBlobData(const TBlobId &blob_id)
CCDDClientPool(const string &service_name="getCddSeqAnnot", size_t pool_soft_limit=10, time_t pool_age_limit=900, bool exclude_nucleotides=true)
void x_ReleaseClient(TClient &client)
static string BlobIdToString(const TBlobId &blob_id)
SCDDBlob GetBlobBySeq_id(CSeq_id_Handle idh)
bool IsValidId(const CSeq_id &id)
unique_ptr< CCDDBlobCache > m_Cache
static int x_NextSerialNumber(void)
TClientPool::iterator TClient
bool m_ExcludeNucleotides
void x_DiscardClient(TClient &client)
TBlobInfo GetBlobIdBySeq_id(CSeq_id_Handle idh)
bool x_CheckReply(CRef< CCDD_Reply > &reply, int serial, CCDD_Reply::TReply::E_Choice choice)
CRef< CCDD_Reply > AskBlob(int serial_number, const CID2_Blob_Id &blob_id)
CRef< CCDD_Reply > AskBlobId(int serial_number, const CSeq_id &seq_id)
EDataFormat
Serial data format for requests and replies.
@ eSemiBinary
JSON requests, binary ASN.1 replies.
@ eDefaultFormat
Determined by [CCddClient] data_format.
@ eJSON
Bidirectional JSON.
@ eBinary
Bidirectional binary ASN.1.
CCDDClient(const string &service_name=kEmptyStr, EDataFormat data_format=eDefaultFormat)
virtual void ReadReply(CObjectIStream &in, CCDD_Reply &reply)
virtual void Ask(const CCDD_Request_Packet &request, CCDD_Reply &reply)
virtual void WriteRequest(CObjectOStream &out, const CCDD_Request_Packet &request)
void JustAsk(const CCDD_Request_Packet &request)
This stream exchanges data with a named service, in a constraint that the service is implemented as o...
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
CTimeout â Timeout interval.
const_iterator end() const
const_iterator find(const key_type &key) const
const_iterator lower_bound(const key_type &key) const
const_iterator end() const
iterator insert(const value_type &val)
const_iterator begin() const
container_type::iterator iterator
std::ofstream out("events_result.xml")
main entry point for tests
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
@ eNoOwnership
No ownership is assumed.
EIO_Status Fetch(const STimeout *timeout=kDefaultTimeout)
Flush the stream and fetch the response (w/o extracting any user data)
TValue Add(int delta) THROWS_NONE
Atomically add value (=delta), and return new counter value.
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
TErrCode GetErrCode(void) const
Get error code.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
virtual const char * GetErrCodeString(void) const
Get error code interpreted as text.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
virtual void Ask(const CCDD_Request_Packet &request, CCDD_Reply &reply)
void SetArgs(const string &args)
Set additional connection arguments.
unique_ptr< CObjectOStream > m_Out
virtual void x_Connect(void) override
virtual void WriteRequest(CObjectOStream &out, const CCDD_Request_Packet &request)
unsigned int TSerial_Format_Flags
MSerial_Format â.
ESerialDataFormat
Data file format.
@ fSerial_Json_NoIndentation
do not use indentation
@ fSerial_Json_NoEol
do not write end-of-line symbol
@ eSerial_AsnBinary
ASN.1 binary.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Optimized implementation of CSerialObject::Assign, which is not so efficient.
CConstRef< CSeq_id > GetSeqId(void) const
static CSeq_id_Handle GetHandle(const CSeq_id &id)
Normal way of getting a handle, works for any seq-id.
virtual void SetFormattingFlags(TSerial_Format_Flags flags)
Set output formatting flags.
void Reset(void)
Reset reference object.
EIO_Status SetTimeout(EIO_Event event, const STimeout *timeout)
Specify timeout for the pipe I/O (see Open|Read|Write functions).
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static string URLEncode(const CTempString str, EUrlEncode flag=eUrlEnc_SkipMarkChars)
URL-encode string.
@ eUrlEnc_URIQueryValue
Encode query part of an URI, arg value.
void Set(EType type)
Set special value.
static void GetCurrentTimeT(time_t *sec, long *nanosec=0)
Get current UTC time in time_t format (with nanoseconds).
@ eDefault
Default timeout (to be interpreted by the client code)
const STimeout * g_CTimeoutToSTimeout(const CTimeout &cto, STimeout &sto)
CTimeout/STimeout adapters.
const TBlob_id & GetBlob_id(void) const
Get the Blob_id member data.
const TMessage & GetMessage(void) const
Get the Message member data.
E_Choice
Choice variants.
TSeverity GetSeverity(void) const
Get the Severity member data.
Tdata & Set(void)
Assign a value to data member.
const TSeq_id & GetSeq_id(void) const
Get the Seq_id member data.
TCode GetCode(void) const
Get the Code member data.
@ e_Get_blob_by_seq_id
return (Seq-annot + blob-id) for get-blob-by-seq-id OR get-blob-by-seq-ids request
@ e_Get_blob_id
return blob-id for get-blob-id request
@ e_Get_blob
return Seq-annot for get-blob request
TSat_key GetSat_key(void) const
Get the Sat_key member data.
TSub_sat GetSub_sat(void) const
Get the Sub_sat member data.
TSat GetSat(void) const
Get the Sat member data.
@ e_Gibbmt
Geninfo backbone moltype.
@ e_Giim
Geninfo import id.
@ e_Gpipe
Internal NCBI genome pipeline processing ID.
@ e_Gibbsq
Geninfo backbone seqid.
@ e_General
for other databases
@ e_Gi
GenInfo Integrated Database.
@ e_Named_annot_track
Internal named annotation tracking ID.
@ e_not_set
No variant selected.
unsigned int
A callback function used to compare two keys in a database.
constexpr bool empty(list< Ts... >) noexcept
static const STimeout kZeroTimeout
std::istream & in(std::istream &in_, double &x_)
static CNamedPipeClient * client
CCDDClientPool::SCDDBlob TBlob
SCDDCacheInfo & operator=(const SCDDCacheInfo &)
SCDDCacheInfo(const SCDDCacheInfo &)
SCDDCacheInfo(const CSeq_id_Handle idh, const TBlob &b)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4