Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
	}
}