コード例 #1
0
BOOL CaNodeConnectData::Matched (CaNodeConnectData* pObj, MatchObjectFlag nFlag)
{
    if (nFlag == MATCHED_NAME)
    {
        return (pObj->GetName().CompareNoCase (GetName()) == 0);
    }
    else
    {
        BOOL bOk = FALSE;
        if (pObj->GetNodeName().CompareNoCase (GetNodeName()) != 0)
            return FALSE;
        if (pObj->GetName().CompareNoCase (GetName()) != 0) // IP
            return FALSE;
        if (pObj->GetProtocol().CompareNoCase (GetProtocol()) != 0)
            return FALSE;
        if (pObj->GetListenAddress().CompareNoCase (GetListenAddress()) != 0)
            return FALSE;
        if (pObj->IsConnectionPrivate() != IsConnectionPrivate())
            return FALSE;

        return TRUE;
    }
    //
    // Need the implementation ?
    ASSERT (FALSE);
    return FALSE;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: Ahmar/hostile-takeover
int main(int argc, char **argv)
{
    // Log arguments
    std::string args;
    if (argc != 0) {
        for (int i = 0; i < argc; i++) {
            if (i != 0) {
                args += " ";
            }
            args += argv[i];
        }
    } else {
        args = "<none>";
    }
    RLOG() << "Arguments: " << args.c_str();

    // Seed random number generator
    srand((int)base::GetTickCount());

    // Root of the pack cache
    std::string rootdir = ParseString(argc, argv, "--missionpack_dir");
    std::string packdir = rootdir + "/pack";
    std::string indexfile = rootdir + "/index";
    std::string modfile = rootdir + "/modlist";
    std::string badwordsfile = rootdir + "/badwords";

    // Initialize the level info cache from the index so the server knows
    // the latest and greatest mission packs.
    wi::PackManager packm(packdir.c_str());
    packm.WatchIndex(indexfile.c_str());
    wi::LevelInfoCache cache(packm);

    // Submit main pack and packs from the index
    wi::NoCachePackFileReader pakr;
    if (pakr.Push(NULL, ParseString(argc, argv, "--htdata").c_str())) {
        wi::PackId packid;
        memset(&packid, 0, sizeof(packid));
        packid.id = PACKID_MAIN;
        cache.Submit(pakr, packid);
        pakr.Pop();
    }
    cache.SubmitIndex(indexfile);
    if (cache.empty()) {
        RLOG() << "cache is empty!";
        exit(1);
    }

    // Set up StatsPoster
    base::SocketAddress stats_address(ParseString(argc, argv,
            "--stats_address").c_str());
    std::string stats_path(ParseString(argc, argv, "--stats_path"));
    wi::StatsPoster stats(stats_address, stats_path);

    // Set up the server
    dword server_id = ParseDword(argc, argv, "--server_id");
    bool checksync = FindArg(argc, argv, "--checksync");
    RLOG() << "Sync checking turned " << (checksync ?  "ON." : "OFF.");

    std::string log_file = ParseString(argc, argv, "--log_file");
    wi::XMsgLog *xmsglog = NULL;
    if (log_file.size() != 0) {
        xmsglog = new wi::XMsgLog(log_file);
    }

    int max_players = ParseInteger(argc, argv, "--max_players",
            kcConnectedPlayersMax);
    int max_rooms = ParseInteger(argc, argv, "--max_rooms", kcRoomsMax);
    int max_games_per_room = ParseInteger(argc, argv, "--max_games_per_room",
            kcGamesPerRoomMax);
    int max_players_per_room = ParseInteger(argc, argv,
            "--max_players_per_room", kcPlayersPerRoomMax);

    wi::Server server(stats, xmsglog, cache, server_id, checksync,
            max_rooms, max_games_per_room, max_players_per_room,
            max_players, modfile, badwordsfile);

    base::SocketAddress listen_address = GetListenAddress(argc, argv);
    if (!server.Listen(listen_address)) {
        printf("Server failed to start.\n");
        return 1;
    }
    listen_address = server.listen_address();

    // Create default rooms
    dword result;
    server.lobby().NewRoom(NULL, "Main", "", wi::kroomidMain,
            wi::kfRmPermanent | wi::kfRmLocked, &result);
    server.lobby().NewRoom(NULL, "Main / Registered", "", wi::kroomidRegistered,
            wi::kfRmPermanent | wi::kfRmRegisteredOnly | wi::kfRmLocked,
            &result);
    server.lobby().NewRoom(NULL, "Main / Unmoderated", "",
            wi::kroomidUnmoderated,
            wi::kfRmPermanent | wi::kfRmLocked | wi::kfRmUnmoderated,
            &result);

    // Get the public_address. This is the address that gets sent in
    // ServerInfo. For example in AWS, the internal "private" ip
    // is not the same as the public one. If this is not present,
    // use the listen_address.
    base::SocketAddress public_address;
    std::string public_address_str = ParseString(argc, argv, "--public_address");
    if (public_address_str.size() != 0) {
        public_address = base::SocketAddress(public_address_str.c_str());
    } else {
        public_address = listen_address;
    }

    // Start up ServerInfoUpdater
    std::string server_info_path(ParseString(argc, argv, "--server_info_path"));
    std::string server_name(ParseString(argc, argv, "--server_name"));
    std::string server_location(ParseString(argc, argv, "--server_location"));
    std::string server_type(ParseString(argc, argv, "--server_type"));
    std::string server_info_extra(ParseString(argc, argv, "--server_info_extra"));
    dword expires = ParseDword(argc, argv, "--server_info_expires", 60 * 5);
    wi::ServerInfoUpdater updater(server, stats_address, server_info_path,
            server_id, server_name, server_location, server_type,
            public_address, server_info_extra, expires);
    server.SetUpdater(&updater);

    // Pump messages and wait for network i/o
    base::Thread::RunLoop();
    return 0;
}