From 5cf7a669530b9f328fa79c401575cdd0e14a523e Mon Sep 17 00:00:00 2001 From: Mateusz Kaduk Date: Mon, 23 May 2005 06:34:22 +0000 Subject: Remove main.h, added storage class, moved some code to it --- src/Makefile.am | 4 +-- src/main.cpp | 75 +++++++++++++++++++++++---------------------------- src/main.h | 31 --------------------- src/storage.cpp | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/storage.h | 56 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 175 insertions(+), 75 deletions(-) delete mode 100644 src/main.h create mode 100644 src/storage.cpp create mode 100644 src/storage.h diff --git a/src/Makefile.am b/src/Makefile.am index f821495f..7d4a512b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,5 @@ bin_PROGRAMS = tmwserv tmwserv_SOURCES = main.cpp \ - main.h \ accounthandler.h \ accounthandler.cpp \ connectionhandler.h \ @@ -29,7 +28,8 @@ tmwserv_SOURCES = main.cpp \ script.h \ script.cpp \ script-squirrel.h \ - script-squirrel.cpp + script-squirrel.cpp \ + storage.cpp storage.h # set the include path found by configure INCLUDES= $(all_includes) $(SQLITE_CFLAGS) diff --git a/src/main.cpp b/src/main.cpp index 87f7d6d8..38b1f29f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,7 +24,7 @@ #define TMWSERV_VERSION "0.0.1" #include -#include "main.h" +#include "storage.h" #include "netsession.h" #include "connectionhandler.h" #include "accounthandler.h" @@ -64,31 +64,8 @@ int worldTime = 0; /**< Current world time in 100ms ticks */ bool running = true; /**< Determines if server keeps running */ Skill skillTree("base"); /**< Skill tree */ -SQLiteWrapper sqlite; /**< Database */ -/** - * Create tables if necessary - */ -void create_tables_if_necessary() -{ - SQLiteWrapper::ResultTable r; - - if (!sqlite.SelectStmt("select count(*) from sqlite_master where tbl_name='topics' and type='table'", r)) { - std::cout << "Error with select count(*) [create_tables_if_necessary]" << sqlite.LastError().c_str() << std::endl; - } - - if (r.records_[0].fields_[0] != "0") - return; - - sqlite.Begin(); - if (sqlite.DirectStatement("create table tmw_accounts(user TEXT, password TEXT, email TEXT)")) { - std::cout << "Database: table tmw_accounts created" << std::endl; - } - else { - std::cout << "Database: table exist" << std::endl; - } - sqlite.Commit(); -} +Storage *store; /** * SDL timer callback, sends a TMW_WORLD_TICK event. @@ -138,16 +115,7 @@ void initialize() script = new ScriptSquirrel("main.nut"); #endif - // Open database - if (sqlite.Open("tmw.db")) { - std::cout << "Database: tmw.db created or opened" << std::endl; - } - else { - std::cout << "Database: couldn't open tmw.db" << std::endl; - } - - //Create tables - create_tables_if_necessary(); + store = new Storage(); } /** @@ -163,17 +131,40 @@ void deinitialize() // Destroy scripting subsystem #ifdef SCRIPT_SUPPORT +#ifdef SCRIPT_SUPPORT + script->update(); +#endif +} + +/** + * Main function, initializes and runs server. + */ +int main(int argc, char *argv[]) +{ + initialize(); + + // Ready for server work... + ConnectionHandler *connectionHandler = new ConnectionHandler(); + NetSession *session = new NetSession(); + + // Note: This is just an idea, we could also pass the connection handler + // to the constructor of the account handler, upon which is would register + // itself for the messages it handles. + // + //AccountHandler *accountHandler = new AccountHandler(); + //connectionHandler->registerHandler(C2S_LOGIN, accountHandler); + + logger->log("The Mana World Server v%s", TMWSERV_VERSION); + session->startListen(connectionHandler, SERVER_PORT); + logger->log("Listening on port %d...", SERVER_PORT); + + SDL_Event event; + delete script; #endif delete logger; - // Close database - if (sqlite.Close()) { - std::cout << "Database: tmw.db closed" << std::endl; - } - else { - std::cout << "Database: couldn't close tmw.db" << std::endl; - } + delete store; } /** diff --git a/src/main.h b/src/main.h deleted file mode 100644 index 6a61476c..00000000 --- a/src/main.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * The Mana World - * Copyright 2004 The Mana World Development Team - * - * This file is part of The Mana World. - * - * The Mana World 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 2 of the License, or - * any later version. - * - * The Mana World 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 The Mana World; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - */ - -#ifndef _TMW_MAIN_H -#define _TMW_MAIN_H - -#include "sqlite/SQLiteWrapper.h" - -extern SQLiteWrapper sqlite; - -#endif diff --git a/src/storage.cpp b/src/storage.cpp new file mode 100644 index 00000000..af863d47 --- /dev/null +++ b/src/storage.cpp @@ -0,0 +1,84 @@ +/* + * The Mana World Server + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World 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 2 of the License, or + * any later version. + * + * The Mana World 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 The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ +#include "storage.h" +#include + +Storage::Storage() +{ +#ifdef SQLITE_SUPPORT + // Open database + if (sqlite.Open("tmw.db")) { + std::cout << "Database: tmw.db created or opened" << std::endl; + } + else { + std::cout << "Database: couldn't open tmw.db" << std::endl; + } +#endif +#ifdef PGSQL_SUPPORT + std::cout << "Datbase: Postgresql currently not supported" << std::endl; + exit(1); +#endif + + //Create tables + create_tables_if_necessary(); +} + +Storage::~Storage() +{ +#ifdef SQLITE_SUPPORT + // Close database + if (sqlite.Close()) { + std::cout << "Database: tmw.db closed" << std::endl; + } + else { + std::cout << "Database: couldn't close tmw.db" << std::endl; + } +#endif +} + +/** + * Create tables if necessary + */ +void Storage::create_tables_if_necessary() +{ +#ifdef SQLITE_SUPPORT + SQLiteWrapper::ResultTable r; + + if (!sqlite.SelectStmt("select count(*) from sqlite_master where tbl_name='topics' and type='table'", r)) { + std::cout << "Error with select count(*) [create_tables_if_necessary]" << sqlite.LastError().c_str() << std::endl; + } + + if (r.records_[0].fields_[0] != "0") + return; + + sqlite.Begin(); + if (sqlite.DirectStatement("create table tmw_accounts(user TEXT, password TEXT, email TEXT)")) { + std::cout << "Database: table tmw_accounts created" << std::endl; + } + else { + std::cout << "Database: table exist" << std::endl; + } + sqlite.Commit(); +#endif +} + diff --git a/src/storage.h b/src/storage.h new file mode 100644 index 00000000..da30c083 --- /dev/null +++ b/src/storage.h @@ -0,0 +1,56 @@ +/* + * The Mana World Server + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World 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 2 of the License, or + * any later version. + * + * The Mana World 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 The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ +#ifndef STORAGE_H +#define STORAGE_H + +#define SQLITE_SUPPORT // For now + +#ifdef SQLITE_SUPPORT +#include "sqlite/SQLiteWrapper.h" +#endif + +class Storage { + public: + /** + * Constructor. + */ + Storage(); + + /** + * Destructor. + */ + ~Storage(); + + /** + * Create tables if master is empty + */ + void create_tables_if_necessary(); + + private: +#ifdef SQLITE_SUPPORT + SQLiteWrapper sqlite; /**< Database */ +#endif +}; + +#endif /* STORAGE_H */ + -- cgit v1.2.3-70-g09d2