From b1965ac20922e3722392114bd63a22b403dcbe98 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Wed, 25 Jun 2014 20:28:41 -0400 Subject: Clean up rollback --- src/rollback.h | 93 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 20 deletions(-) (limited to 'src/rollback.h') diff --git a/src/rollback.h b/src/rollback.h index eea7c59f2..2e6955c8d 100644 --- a/src/rollback.h +++ b/src/rollback.h @@ -24,31 +24,84 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irr_v3d.h" #include "rollback_interface.h" #include +#include +#include "sqlite3.h" class IGameDef; -class IRollbackManager: public IRollbackReportSink +class ActionRow; +class Entity; + +class RollbackManager: public IRollbackManager { public: - // IRollbackReportManager - virtual void reportAction(const RollbackAction &action) = 0; - virtual std::string getActor() = 0; - virtual bool isActorGuess() = 0; - virtual void setActor(const std::string &actor, bool is_guess) = 0; - virtual std::string getSuspect(v3s16 p, float nearness_shortcut, - float min_nearness) = 0; - - virtual ~IRollbackManager() {} - virtual void flush() = 0; - // Get all actors that did something to position p, but not further than - // in history - virtual std::list getNodeActors(v3s16 pos, int range, - time_t seconds, int limit) = 0; - // Get actions to revert of history made by - virtual std::list getRevertActions(const std::string &actor, - time_t seconds) = 0; -}; + RollbackManager(const std::string & world_path, IGameDef * gamedef); + ~RollbackManager(); + + void reportAction(const RollbackAction & action_); + std::string getActor(); + bool isActorGuess(); + void setActor(const std::string & actor, bool is_guess); + std::string getSuspect(v3s16 p, float nearness_shortcut, + float min_nearness); + void flush(); + + void addAction(const RollbackAction & action); + std::list getEntriesSince(time_t first_time); + std::list getNodeActors(v3s16 pos, int range, + time_t seconds, int limit); + std::list getRevertActions( + const std::string & actor_filter, time_t seconds); + +private: + void registerNewActor(const int id, const std::string & name); + void registerNewNode(const int id, const std::string & name); + int getActorId(const std::string & name); + int getNodeId(const std::string & name); + const char * getActorName(const int id); + const char * getNodeName(const int id); + bool createTables(); + void initDatabase(); + bool registerRow(const ActionRow & row); + const std::list actionRowsFromSelect(sqlite3_stmt * stmt); + ActionRow actionRowFromRollbackAction(const RollbackAction & action); + const std::list rollbackActionsFromActionRows( + const std::list & rows); + const std::list getRowsSince(time_t firstTime, + const std::string & actor); + const std::list getRowsSince_range(time_t firstTime, v3s16 p, + int range, int limit); + const std::list getActionsSince_range(time_t firstTime, v3s16 p, + int range, int limit); + const std::list getActionsSince(time_t firstTime, + const std::string & actor = ""); + void migrate(const std::string & filepath); + static float getSuspectNearness(bool is_guess, v3s16 suspect_p, + time_t suspect_t, v3s16 action_p, time_t action_t); + -IRollbackManager *createRollbackManager(const std::string &filepath, IGameDef *gamedef); + IGameDef * gamedef; + + std::string current_actor; + bool current_actor_is_guess; + + std::list action_todisk_buffer; + std::list action_latest_buffer; + + std::string database_path; + sqlite3 * db; + sqlite3_stmt * stmt_insert; + sqlite3_stmt * stmt_replace; + sqlite3_stmt * stmt_select; + sqlite3_stmt * stmt_select_range; + sqlite3_stmt * stmt_select_withActor; + sqlite3_stmt * stmt_knownActor_select; + sqlite3_stmt * stmt_knownActor_insert; + sqlite3_stmt * stmt_knownNode_select; + sqlite3_stmt * stmt_knownNode_insert; + + std::vector knownActors; + std::vector knownNodes; +}; #endif -- cgit v1.2.3