UniSet  2.24.2
DBServer_MySQL.h
1 /*
2  * Copyright (c) 2015 Pavel Vainerman.
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as
6  * published by the Free Software Foundation, version 2.1.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Lesser Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 // --------------------------------------------------------------------------
20 // --------------------------------------------------------------------------
21 #ifndef DBServer_MySQL_H_
22 #define DBServer_MySQL_H_
23 // --------------------------------------------------------------------------
24 #include <unordered_map>
25 #include <queue>
26 #include "UniSetTypes.h"
27 #include "MySQLInterface.h"
28 #include "DBServer.h"
29 // -------------------------------------------------------------------------
30 namespace uniset
31 {
32  //------------------------------------------------------------------------------------------
150  //------------------------------------------------------------------------------------------
153  public DBServer
154  {
155  public:
156  DBServer_MySQL( uniset::ObjectId id, const std::string& prefix );
157  explicit DBServer_MySQL( const std::string& prefix );
158  virtual ~DBServer_MySQL();
159 
161  static std::shared_ptr<DBServer_MySQL> init_dbserver( int argc, const char* const* argv, const std::string& prefix = "mysql" );
162 
164  static void help_print( int argc, const char* const* argv );
165 
166  inline std::shared_ptr<LogAgregator> logAggregator()
167  {
168  return loga;
169  }
170  inline std::shared_ptr<DebugStream> log()
171  {
172  return dblog;
173  }
174 
175  protected:
176  typedef std::unordered_map<int, std::string> DBTableMap;
177 
178  virtual void initDBServer() override;
179  virtual void initDB( const std::unique_ptr<MySQLInterface>& db ) {};
180  virtual void initDBTableMap(DBTableMap& tblMap) {};
181 
182  virtual void timerInfo( const uniset::TimerMessage* tm ) override;
183  virtual void sysCommand( const uniset::SystemMessage* sm ) override;
184  virtual void sensorInfo( const uniset::SensorMessage* sm ) override;
185  virtual void confirmInfo( const uniset::ConfirmMessage* cmsg ) override;
186  virtual void onTextMessage( const uniset::TextMessage* msg ) override;
187  virtual std::string getMonitInfo( const std::string& params ) override;
188 
189  bool writeToBase( const std::string& query );
190  void createTables( MySQLInterface* db );
191 
192  inline std::string tblName( int key )
193  {
194  return tblMap[key].c_str();
195  }
196 
197  enum Timers
198  {
201  lastNumberOfTimer
202  };
203 
204  std::unique_ptr<MySQLInterface> db;
205  int PingTime = { 15000 };
206  int ReconnectTime = { 30000 };
207  bool connect_ok = { false };
209  bool activate = { false };
210 
211  typedef std::queue<std::string> QueryBuffer;
212 
213  QueryBuffer qbuf;
214  size_t qbufSize = { 200 }; // размер буфера сообщений.
215  bool lastRemove = { false };
216 
217  void flushBuffer();
219 
220  private:
221  DBTableMap tblMap;
222 
223  };
224  // ----------------------------------------------------------------------------------
225 } // end of namespace uniset
226 //------------------------------------------------------------------------------------------
227 #endif
Definition: MessageType.h:237
Definition: DBServer_MySQL.h:154
static void help_print(int argc, const char *const *argv)
Definition: DBServer_MySQL.cc:466
Timers
Definition: DBServer_MySQL.h:198
@ PingTimer
Definition: DBServer_MySQL.h:199
@ ReconnectTimer
Definition: DBServer_MySQL.h:200
static std::shared_ptr< DBServer_MySQL > init_dbserver(int argc, const char *const *argv, const std::string &prefix="mysql")
Definition: DBServer_MySQL.cc:443
bool activate
Definition: DBServer_MySQL.h:209
Definition: DBServer.h:45
Definition: MySQLInterface.h:39
Definition: MessageType.h:127
Definition: MessageType.h:171
Definition: MessageType.h:280
Definition: MessageType.h:214
Definition: Mutex.h:32
Definition: CommonEventLoop.h:15
KeyType key(const uniset::ObjectId id, const uniset::ObjectId node)
Definition: UniSetTypes.cc:746
long ObjectId
Definition: UniSetTypes_i.idl:30