/*************************************************************************** * Copyright (C) 2013 by gempa GmbH * * * * All Rights Reserved. * * * * NOTICE: All information contained herein is, and remains * * the property of gempa GmbH and its suppliers, if any. The intellectual * * and technical concepts contained herein are proprietary to gempa GmbH * * and its suppliers. * * Dissemination of this information or reproduction of this material * * is strictly forbidden unless prior written permission is obtained * * from gempa GmbH. * ***************************************************************************/ #ifndef GEMPA_CAPS_SESSIONTABLE_H #define GEMPA_CAPS_SESSIONTABLE_H #include "packet.h" #include #include #include namespace Gempa { namespace CAPS { struct SessionTableItem { SessionTableItem() : samplingFrequency(0), samplingFrequencyDivider(0), fSamplingFrequency(0.0), dataType(DT_Unknown), dataSize(0), userData(NULL) {} std::string streamID; std::string net; std::string sta; std::string loc; std::string cha; uint16_t samplingFrequency; uint16_t samplingFrequencyDivider; double fSamplingFrequency; PacketType type; DataType dataType; int dataSize; UOM uom; Time startTime; Time endTime; void *userData; bool splitStreamID(); }; class SC_GEMPA_CAPS_API SessionTable : public std::map { public: enum Status {Success, Error, EOD}; typedef std::function CallbackFunc; public: //! Default constructor SessionTable(); virtual ~SessionTable() {} //! Resets state void reset(); SessionTableItem* getItem(int id) { SessionTable::iterator it = find(id); if ( it == end() ) return NULL; return &it->second; } Status handleResponse(const char *src_data, int data_len); void setItemAddedFunc(const CallbackFunc &func) { _itemAddedFunc = func; } void setItemAboutToBeRemovedFunc(const CallbackFunc &func) { _itemAboutToBeRemovedFunc = func; } private: enum ResponseState { Unspecific, Requests }; typedef std::map StreamIDLookupTable; private: void registerItem(int id, SessionTableItem &item); void removeStream(const std::string & streamID); private: ResponseState _state; StreamIDLookupTable _streamIDLookup; CallbackFunc _itemAddedFunc; CallbackFunc _itemAboutToBeRemovedFunc; }; } } #endif