#include <memory>
#include <csignal>
#include "server.h"
#include "xsched/utils/log.h"
#include "xsched/utils/xassert.h"
#include "xsched/protocol/def.h"
#include "xsched/protocol/names.h"
using namespace xsched::service;
using namespace xsched::protocol;
static std::unique_ptr<Server> server = nullptr;
void ExitSignal(int)
{
if (server) server->Stop();
}
int main(int argc, char *argv[])
{
std::string policy_name = GetPolicyTypeName(kPolicyHighestPriorityFirst);
std::string port = std::to_string(XSCHED_SERVER_DEFAULT_PORT);
if (argc == 1) {
XINFO("using default: %s %s %s", argv[0], policy_name.c_str(), port.c_str());
} else if (argc == 3) {
policy_name = argv[1];
port = argv[2];
} else {
XINFO("Usage: %s <policy name> <server port>", argv[0]);
XINFO("default: %s %s %s", argv[0], policy_name.c_str(), port.c_str());
XERRO("invalid arguments, abort...");
}
XASSERT(signal(SIGINT, ExitSignal) != SIG_ERR, "failed to set SIGINT handler");
#if defined(__linux__)
XASSERT(signal(SIGQUIT, ExitSignal) != SIG_ERR, "failed to set SIGQUIT handler");
#endif
server = std::make_unique<Server>(policy_name, port);
server->Run();
return 0;
}