Minetest  5.4.0
rollback.h
Go to the documentation of this file.
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14 
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 
20 #pragma once
21 
22 #include <string>
23 #include "irr_v3d.h"
24 #include "rollback_interface.h"
25 #include <list>
26 #include <vector>
27 #include "sqlite3.h"
28 
29 class IGameDef;
30 
31 struct ActionRow;
32 struct Entity;
33 
35 {
36 public:
37  RollbackManager(const std::string & world_path, IGameDef * gamedef);
39 
40  void reportAction(const RollbackAction & action_);
41  std::string getActor();
42  bool isActorGuess();
43  void setActor(const std::string & actor, bool is_guess);
44  std::string getSuspect(v3s16 p, float nearness_shortcut,
45  float min_nearness);
46  void flush();
47 
48  void addAction(const RollbackAction & action);
49  std::list<RollbackAction> getEntriesSince(time_t first_time);
50  std::list<RollbackAction> getNodeActors(v3s16 pos, int range,
51  time_t seconds, int limit);
52  std::list<RollbackAction> getRevertActions(
53  const std::string & actor_filter, time_t seconds);
54 
55 private:
56  void registerNewActor(const int id, const std::string & name);
57  void registerNewNode(const int id, const std::string & name);
58  int getActorId(const std::string & name);
59  int getNodeId(const std::string & name);
60  const char * getActorName(const int id);
61  const char * getNodeName(const int id);
62  bool createTables();
63  bool initDatabase();
64  bool registerRow(const ActionRow & row);
65  const std::list<ActionRow> actionRowsFromSelect(sqlite3_stmt * stmt);
67  const std::list<RollbackAction> rollbackActionsFromActionRows(
68  const std::list<ActionRow> & rows);
69  const std::list<ActionRow> getRowsSince(time_t firstTime,
70  const std::string & actor);
71  const std::list<ActionRow> getRowsSince_range(time_t firstTime, v3s16 p,
72  int range, int limit);
73  const std::list<RollbackAction> getActionsSince_range(time_t firstTime, v3s16 p,
74  int range, int limit);
75  const std::list<RollbackAction> getActionsSince(time_t firstTime,
76  const std::string & actor = "");
77  void migrate(const std::string & filepath);
78  static float getSuspectNearness(bool is_guess, v3s16 suspect_p,
79  time_t suspect_t, v3s16 action_p, time_t action_t);
80 
81 
82  IGameDef *gamedef = nullptr;
83 
84  std::string current_actor;
85  bool current_actor_is_guess = false;
86 
87  std::list<RollbackAction> action_todisk_buffer;
88  std::list<RollbackAction> action_latest_buffer;
89 
90  std::string database_path;
91  sqlite3 * db;
92  sqlite3_stmt * stmt_insert;
93  sqlite3_stmt * stmt_replace;
94  sqlite3_stmt * stmt_select;
95  sqlite3_stmt * stmt_select_range;
96  sqlite3_stmt * stmt_select_withActor;
97  sqlite3_stmt * stmt_knownActor_select;
98  sqlite3_stmt * stmt_knownActor_insert;
99  sqlite3_stmt * stmt_knownNode_select;
100  sqlite3_stmt * stmt_knownNode_insert;
101 
102  std::vector<Entity> knownActors;
103  std::vector<Entity> knownNodes;
104 };
Definition: gamedef.h:49
Definition: rollback_interface.h:112
Definition: rollback.h:35
static float getSuspectNearness(bool is_guess, v3s16 suspect_p, time_t suspect_t, v3s16 action_p, time_t action_t)
Definition: rollback.cpp:797
void flush()
Definition: rollback.cpp:912
sqlite3_stmt * stmt_knownNode_insert
Definition: rollback.h:100
void reportAction(const RollbackAction &action_)
Definition: rollback.cpp:822
std::list< RollbackAction > getRevertActions(const std::string &actor_filter, time_t seconds)
Definition: rollback.cpp:960
std::string getSuspect(v3s16 p, float nearness_shortcut, float min_nearness)
Definition: rollback.cpp:869
int getNodeId(const std::string &name)
Definition: rollback.cpp:167
std::string current_actor
Definition: rollback.h:84
void registerNewActor(const int id, const std::string &name)
Definition: rollback.cpp:133
const std::list< ActionRow > getRowsSince_range(time_t firstTime, v3s16 p, int range, int limit)
Definition: rollback.cpp:638
std::vector< Entity > knownActors
Definition: rollback.h:102
bool current_actor_is_guess
Definition: rollback.h:85
std::vector< Entity > knownNodes
Definition: rollback.h:103
RollbackManager(const std::string &world_path, IGameDef *gamedef)
Definition: rollback.cpp:92
sqlite3_stmt * stmt_select
Definition: rollback.h:94
bool registerRow(const ActionRow &row)
Definition: rollback.cpp:389
~RollbackManager()
Definition: rollback.cpp:115
sqlite3_stmt * stmt_select_range
Definition: rollback.h:95
bool isActorGuess()
Definition: rollback.cpp:858
const std::list< RollbackAction > getActionsSince(time_t firstTime, const std::string &actor="")
Definition: rollback.cpp:665
void addAction(const RollbackAction &action)
Definition: rollback.cpp:933
const std::list< RollbackAction > rollbackActionsFromActionRows(const std::list< ActionRow > &rows)
Definition: rollback.cpp:575
sqlite3_stmt * stmt_knownActor_insert
Definition: rollback.h:98
bool initDatabase()
Definition: rollback.cpp:260
void setActor(const std::string &actor, bool is_guess)
Definition: rollback.cpp:863
std::list< RollbackAction > getEntriesSince(time_t first_time)
Definition: rollback.cpp:944
sqlite3_stmt * stmt_knownActor_select
Definition: rollback.h:97
const char * getActorName(const int id)
Definition: rollback.cpp:187
void registerNewNode(const int id, const std::string &name)
Definition: rollback.cpp:140
sqlite3_stmt * stmt_select_withActor
Definition: rollback.h:96
bool createTables()
Definition: rollback.cpp:213
std::list< RollbackAction > action_latest_buffer
Definition: rollback.h:88
ActionRow actionRowFromRollbackAction(const RollbackAction &action)
Definition: rollback.cpp:540
const char * getNodeName(const int id)
Definition: rollback.cpp:200
std::list< RollbackAction > getNodeActors(v3s16 pos, int range, time_t seconds, int limit)
Definition: rollback.cpp:950
IGameDef * gamedef
Definition: rollback.h:82
std::list< RollbackAction > action_todisk_buffer
Definition: rollback.h:87
const std::list< RollbackAction > getActionsSince_range(time_t firstTime, v3s16 p, int range, int limit)
Definition: rollback.cpp:658
const std::list< ActionRow > getRowsSince(time_t firstTime, const std::string &actor)
Definition: rollback.cpp:622
std::string getActor()
Definition: rollback.cpp:853
sqlite3_stmt * stmt_insert
Definition: rollback.h:92
sqlite3 * db
Definition: rollback.h:91
const std::list< ActionRow > actionRowsFromSelect(sqlite3_stmt *stmt)
Definition: rollback.cpp:474
std::string database_path
Definition: rollback.h:90
void migrate(const std::string &filepath)
Definition: rollback.cpp:672
sqlite3_stmt * stmt_replace
Definition: rollback.h:93
int getActorId(const std::string &name)
Definition: rollback.cpp:147
sqlite3_stmt * stmt_knownNode_select
Definition: rollback.h:99
core::vector3d< s16 > v3s16
Definition: irr_v3d.h:28
Definition: rollback.cpp:65
Definition: rollback.cpp:85
Definition: rollback_interface.h:55
std::string p(std::string path)
Definition: test_filepath.cpp:59