#include "Profiler.hpp"
CommandManager::CommandManager(const ManagerAccessorPtr& manager_accessor) :
-manager_accessor_(manager_accessor)
+ manager_accessor_(manager_accessor),
+ status_(STATUS_STANDBY)
{
}
void CommandManager::set_client(ClientUniqPtr client)
{
client_= std::move(client);
+ status_ = STATUS_CONNECTING;
}
}
}
+Status CommandManager::status() const
+{
+ return status_;
+}
typedef std::unique_ptr<network::Client> ClientUniqPtr;
class CommandManager {
+ public:
+ enum Status {
+ STATUS_STANDBY,
+ STATUS_CONNECTING,
+ STATUS_READY,
+ STATUS_ERROR
+ };
+
public:
CommandManager(const ManagerAccessorPtr& manager_accessor = ManagerAccessorPtr());
void Update();
void set_client(ClientUniqPtr client);
unsigned int user_id();
+ Status status() const;
+
private:
ManagerAccessorPtr manager_accessor_;
ClientUniqPtr client_;
+ Status status_;
};
typedef std::shared_ptr<CommandManager> CommandManagerPtr;
#include "unicode.hpp"
#include <boost/algorithm/string.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/filesystem.hpp>
#ifndef _WIN32
#define OutputDebugString(str) (std::cout << str)
class Logger {
// Singleton
private:
- Logger() : ofs_(GetLogFileName()) {
+ inline Logger() {
+ using namespace boost::filesystem;
+
+ if (!exists("./log")) {
+ create_directory("./log");
+ }
+
+ ofs_.open("./log/" + GetLogFileName());
}
Logger(const Logger& logger) {}
return patch;
}
+void Account::Remove(UserID user_id)
+{
+ boost::unique_lock<boost::recursive_mutex> lock(mutex_);
+ user_map_.erase(user_id);
+}
+
/*
void Account::ApplyRevisionPatch(const std::string& patch)
{
void LogOut(UserID);
void LogOutAll();
+ void Remove(UserID);
+
std::string GetUserName(UserID) const;
void SetUserName(UserID, const std::string&);
std::string GetUserTrip(UserID) const;
//
#include "Config.hpp"
-#include <boost/property_tree/json_parser.hpp>
+#include <boost/program_options.hpp>
#include <stdint.h>
Config::Config(const std::string& filename)
} catch(std::exception& e) {
pt = ptree();
}
-
- server_name_ = pt.get<std::string>("server_name", "MMO Server");
- port_ = pt.get<uint16_t>("port", 39390);
- room_capacity_ = pt.get<int>("room_capacity", 10);
- channel_capacity_ = pt.get<int>("channel_capacity", 30);
- max_total_read_average_ = pt.get<int>("max_total_read_average", 5000);
- max_session_read_average_ = pt.get<int>("max_session_read_average", 500);
- min_session_read_average_ = pt.get<int>("min_session_read_average", 100);
+
+ port_ = pt.get<unsigned short>("port", 39390);
+ server_name_ = pt.get<std::string>("server_name", "MMO Server");
+ stage_ = pt.get<std::string>("stage", "stage:ケロリン町");
+ capacity_ = pt.get<int>("capacity", 20);
}
//
// アクセサ
//
-const std::string& Config::server_name() const
-{
- return server_name_;
-}
-
-int Config::port() const
+unsigned short Config::port() const
{
- return port_;
+ return port_;
}
-int Config::room_capacity() const
-{
- return room_capacity_;
-}
-
-int Config::channel_capacity() const
-{
- return channel_capacity_;
-}
-
-int Config::max_total_read_average() const
-{
- return max_total_read_average_;
-}
-
-int Config::max_session_read_average() const
-{
- return max_session_read_average_;
-}
-
-int Config::min_session_read_average() const
+const std::string& Config::server_name() const
{
- return min_session_read_average_;
+ return server_name_;
}
-std::string Config::download_path() const
+const std::string& Config::stage() const
{
- return download_path_;
+ return stage_;
}
-std::string Config::scan_command() const
+int Config::capacity() const
{
- return scan_command_;
-}
+ return capacity_;
+}
\ No newline at end of file
class Config
{
public:
- Config(const std::string&);
+ Config(const std::string& filename);
private:
+ unsigned short port_;
std::string server_name_;
- int port_;
- int room_capacity_;
- int channel_capacity_;
- int max_total_read_average_;
- int max_session_read_average_;
- int min_session_read_average_;
- std::string download_path_;
- std::string scan_command_;
+ std::string stage_;
+ int capacity_;
public:
+ unsigned short port() const;
const std::string& server_name() const;
- int port() const;
- int room_capacity() const;
- int channel_capacity() const;
- int max_total_read_average() const;
- int max_session_read_average() const;
- int min_session_read_average() const;
- std::string download_path() const;
- std::string scan_command() const;
+ const std::string& stage() const;
+ int capacity() const;
};
namespace network {
- Server::Server(uint16_t port) :
- endpoint_(tcp::v4(), port),
+ Server::Server(const Config& config) :
+ config_(config),
+ endpoint_(tcp::v4(), config.port()),
acceptor_(io_service_, endpoint_),
- socket_udp_(io_service_, udp::endpoint(udp::v4(), port)),
+ socket_udp_(io_service_, udp::endpoint(udp::v4(), config.port())),
udp_packet_count_(0),
max_total_read_average_(5000),
max_session_read_average_(600),
std::string Server::GetStatusJSON() const
{
auto msg = (
- boost::format("{\"ver\":%d.%d.%d,\"cnt\":%d}")
- % MMO_VERSION_MAJOR % MMO_VERSION_MINOR % MMO_VERSION_REVISION %
- GetUserCount()
+ boost::format("{\"nam\":\"%s\",\"ver\":\"%d.%d.%d\",\"cnt\":%d,\"cap\":%d,\"stg\":\"%s\"}")
+ % config_.server_name()
+ % MMO_VERSION_MAJOR % MMO_VERSION_MINOR % MMO_VERSION_REVISION
+ % GetUserCount()
+ % config_.capacity()
+ % config_.stage()
).str();
return msg;
#include <list>
#include <functional>
#include "../common/network/Session.hpp"
+#include "Config.hpp"
#define UDP_MAX_RECEIVE_LENGTH (2048)
#define UDP_TEST_PACKET_TIME (5)
};
public:
- Server(uint16_t port);
+ Server(const Config& config);
void Start(CallbackFuncPtr callback);
void Stop();
void Stop(int interrupt_type);
void FetchUDP(const std::string& buffer, const boost::asio::ip::udp::endpoint endpoint);
private:
+ Config config_;
+
boost::asio::io_service io_service_;
tcp::endpoint endpoint_;
tcp::acceptor acceptor_;
-//
-// MMO Config
-//
-
{
- "server_name": "MMO Server",
- "port": 39390,
-
- "max_total_read_average": 5000,
- "max_session_read_average": 500,
- "min_session_read_average": 100
-}
+ "port": 39390,
+ "server_name": "MMO Server 公式",
+ "stage": "stage:がれき町",
+ "capacity": 20
+}
\ No newline at end of file
int main(int argc, char* argv[])
{
+ // 設定を読み込み
+ Config config("config.json");
+
Logger::Info(_T("%s"), unicode::ToTString(MMO_VERSION_TEXT));
try {
// 署名
network::Signature sign("server_key");
- // 設定を読み込み
- Config config("config.json");
-
// アカウント
Account account("account.db");
-
- int port = config.port();
- network::Server server(port);
-
- // サーバー設定
- server.set_max_total_read_average(config.max_total_read_average());
- server.set_max_session_read_average(config.max_session_read_average());
- server.set_min_session_read_average(config.min_session_read_average());
+ network::Server server(config);
auto callback = std::make_shared<std::function<void(network::Command)>>(
[&server, &account, &sign](network::Command c){
account.GetUserRevision(user_id)));
Logger::Info("Logout User: %d", user_id);
+ // account.Remove(user_id);
}
}
Logger::Info(msg);