static gboolean game_server_start(Game * game, gboolean register_server, const gchar * meta_server_name) { gchar *error_message; game->accept_fd = net_open_listening_socket(game->server_port, &error_message); if (game->accept_fd == -1) { log_message(MSG_ERROR, "%s\n", error_message); g_free(error_message); return FALSE; } game->is_running = TRUE; start_timeout(game); game->accept_tag = driver->input_add_read(game->accept_fd, (InputFunc) player_connect, game); if (register_server) { g_assert(meta_server_name != NULL); meta_register(meta_server_name, PIONEERS_DEFAULT_META_PORT, game); } return TRUE; }
const MetaInfo * mpeg_video_meta_get_info (void) { static const MetaInfo *mpeg_video_meta_info = NULL; if (g_once_init_enter (&mpeg_video_meta_info)) { const MetaInfo *meta = meta_register (MPEG_VIDEO_META_API_TYPE, "MpegVideoMeta", sizeof (MpegVideoMeta), (MetaInitFunction) mpeg_video_meta_init, (MetaFreeFunction) mpeg_video_meta_free, (MetaTransformFunction) NULL); g_once_init_leave (&mpeg_video_meta_info, meta); } return mpeg_video_meta_info; }
static void meta_event(NetEvent event, Game * game, char *line) { switch (event) { case NET_READ: switch (meta_mode) { case MODE_SIGNON: case MODE_REDIRECT: if (strncmp(line, "goto ", 5) == 0) { gchar **split_result; const gchar *port; meta_mode = MODE_REDIRECT; net_free(&ses); if (num_redirects++ == 10) { log_message(MSG_INFO, _("" "Too many meta-server redirects\n")); return; } split_result = g_strsplit(line, " ", 0); g_assert(split_result[0] != NULL); g_assert(!strcmp(split_result[0], "goto")); if (split_result[1]) { port = PIONEERS_DEFAULT_META_PORT; if (split_result[2]) port = split_result[2]; meta_register(split_result[1], port, game); } else { log_message(MSG_ERROR, _("" "Bad redirect line: %s\n"), line); }; g_strfreev(split_result); } meta_server_version_major = meta_server_version_minor = 0; if (strncmp(line, "welcome ", 8) == 0) { char *p = strstr(line, "version "); if (p) { p += 8; meta_server_version_major = atoi(p); p += strspn(p, "0123456789"); if (*p == '.') meta_server_version_minor = atoi(p + 1); } } net_printf(ses, "version %s\n", META_PROTOCOL_VERSION); meta_mode = MODE_SERVER_LIST; meta_send_details(game); break; default: log_message(MSG_ERROR, _("" "Unknown message from the metaserver: %s\n"), line); break; } break; case NET_CLOSE: log_message(MSG_ERROR, _("Meta-server kicked us off\n")); net_free(&ses); break; case NET_CONNECT: case NET_CONNECT_FAIL: break; } }