kopia lustrzana https://github.com/jamescoxon/dl-fldigi
112 wiersze
3.5 KiB
C++
112 wiersze
3.5 KiB
C++
// ----------------------------------------------------------------------------
|
|
// kmlserver.h -- KML Server
|
|
//
|
|
// Copyright (C) 2012
|
|
// Remi Chateauneu, F4ECW
|
|
//
|
|
// This file is part of fldigi.
|
|
//
|
|
// Fldigi is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Fldigi is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with fldigi. If not, see <http://www.gnu.org/licenses/>.
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#ifndef _KMLSERVER_H
|
|
#define _KMLSERVER_H
|
|
|
|
#include <limits.h>
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <sstream>
|
|
|
|
#include <coordinate.h>
|
|
|
|
/// Keyhole Markup Language: This publishes a complete message, localisation+time+weather etc...
|
|
class KmlServer {
|
|
protected:
|
|
/// Counts the number of complete messages written.
|
|
int m_nb_broadcasts ;
|
|
int exit_kml_server;
|
|
int request_broadcast;
|
|
public:
|
|
/// List of key-value pairs displayed for example in Google Earth balloons.
|
|
struct CustomDataT : public std::vector< std::pair< std::string, std::string > > {
|
|
/// Also used when reloading a KML file.
|
|
void Push( const char * k, const std::string & v );
|
|
|
|
/// TODO: Most of keys are duplicated. Should store them in a hash to reduce memory footprint.
|
|
void Push( const char * k, const char * v ) {
|
|
Push( k, std::string(v) );
|
|
}
|
|
/// This helper makes insertions simpler.
|
|
template< class Type >
|
|
void Push( const char * k, const Type & v ) {
|
|
std::stringstream strm ;
|
|
strm << v ;
|
|
Push( k, strm.str() );
|
|
}
|
|
};
|
|
|
|
KmlServer() : m_nb_broadcasts(0), exit_kml_server(0), request_broadcast(0) {}
|
|
|
|
virtual ~KmlServer() {}
|
|
|
|
/// BEWARE: Will work until 2038.
|
|
static const time_t UniqueEvent = INT_MAX ;
|
|
|
|
/// This can for example go to a NMEA client.
|
|
virtual void Broadcast(
|
|
const std::string & category,
|
|
time_t evtTim,
|
|
const CoordinateT::Pair & refCoo,
|
|
double altitude,
|
|
const std::string & kml_name,
|
|
const std::string & styleNam,
|
|
const std::string & descrTxt,
|
|
const CustomDataT & custDat ) = 0;
|
|
|
|
/// Singleton.
|
|
static KmlServer * GetInstance(void);
|
|
|
|
/// Number of calls to Broadcast(). Debugging purpose only.
|
|
int NbBroadcasts(void) const { return m_nb_broadcasts; }
|
|
|
|
/// Debugging only, just to check what happens inside.
|
|
void ResetCounter() { m_nb_broadcasts = 0;}
|
|
|
|
virtual void Reset() = 0;
|
|
|
|
/// TODO: Maybe have one display style per category, instead of the same for all.
|
|
virtual void InitParams(
|
|
const std::string & kml_command,
|
|
const std::string & kml_dir,
|
|
double kml_merge = 10000,
|
|
int kml_retention = 0, // Keep all data.
|
|
int kml_refresh = 120,
|
|
int kml_balloon_style = 0) = 0;
|
|
|
|
virtual void ReloadKmlFiles() = 0;
|
|
|
|
/// Creates the process for the command to be run when KML data is saved.
|
|
static void SpawnProcess();
|
|
|
|
/// Stops the sub-thread, flush KML data to the files.
|
|
static void Exit();
|
|
|
|
static std::string Tm2Time( time_t tim );
|
|
/// No value means, now.
|
|
static std::string Tm2Time(void);
|
|
};
|
|
|
|
#endif // _KMLSERVER_H
|