void mpd_poll(struct mg_server *s) { switch (mpd.conn_state) { case MPD_DISCONNECTED: /* Try to connect */ fprintf(stdout, "MPD Connecting to %s:%d\n", mpd.host, mpd.port); mpd.conn = mpd_connection_new(mpd.host, mpd.port, 3000); if (mpd.conn == NULL) { fprintf(stderr, "Out of memory."); mpd.conn_state = MPD_FAILURE; return; } if (mpd_connection_get_error(mpd.conn) != MPD_ERROR_SUCCESS) { fprintf(stderr, "MPD connection: %s\n", mpd_connection_get_error_message(mpd.conn)); mg_iterate_over_connections(s, mpd_notify_callback, (void *)mpd_connection_get_error_message(mpd.conn)); mpd.conn_state = MPD_FAILURE; return; } if(mpd.password && !mpd_run_password(mpd.conn, mpd.password)) { fprintf(stderr, "MPD connection: %s\n", mpd_connection_get_error_message(mpd.conn)); mg_iterate_over_connections(s, mpd_notify_callback, (void *)mpd_connection_get_error_message(mpd.conn)); mpd.conn_state = MPD_FAILURE; return; } fprintf(stderr, "MPD connected.\n"); mpd_connection_set_timeout(mpd.conn, 10000); mpd.conn_state = MPD_CONNECTED; break; case MPD_FAILURE: fprintf(stderr, "MPD connection failed.\n"); case MPD_DISCONNECT: case MPD_RECONNECT: if(mpd.conn != NULL) mpd_connection_free(mpd.conn); mpd.conn = NULL; mpd.conn_state = MPD_DISCONNECTED; break; case MPD_CONNECTED: mpd.buf_size = mpd_put_state(mpd.buf, &mpd.song_id, &mpd.queue_version); mg_iterate_over_connections(s, mpd_notify_callback, NULL); break; } }
void mpd_poll() { // printf("%d\n", mpd.conn_state); switch (mpd.conn_state) { case MPD_DISCONNECTED: syslog(LOG_INFO, "%s - MPD Connecting...\n", __func__); mpd.conn = mpd_connection_new(NULL, NULL, 3000); if (mpd.conn == NULL) { syslog(LOG_ERR, "%s - Out of memory.", __func__); mpd.conn_state = MPD_FAILURE; return; } if (mpd_connection_get_error(mpd.conn) != MPD_ERROR_SUCCESS) { syslog(LOG_ERR, "%s - MPD connection: %s\n", __func__, mpd_connection_get_error_message(mpd.conn)); mpd.conn_state = MPD_FAILURE; return; } syslog(LOG_INFO, "%s - MPD connected.\n", __func__); mpd_connection_set_timeout(mpd.conn, 10000); mpd.conn_state = MPD_CONNECTED; break; case MPD_FAILURE: case MPD_DISCONNECT: case MPD_RECONNECT: syslog(LOG_ERR, "%s - MPD (dis)reconnect or failure\n", __func__); if(mpd.conn != NULL) mpd_connection_free(mpd.conn); mpd.conn = NULL; mpd.conn_state = MPD_DISCONNECTED; break; case MPD_CONNECTED: mpd_put_state(); //TODO: display status /* if (queue_is_empty) { queue_is_empty = 0; get_random_song(mpd.conn, str, rcm.file_path); if (strcmp(str, "") != 0) { syslog(LOG_DEBUG, "%s: add random song %s\n", __func__, str); mpd_run_add(mpd.conn, str); } }*/ break; default: syslog(LOG_INFO, "%s - mpd.conn_state %i\n", __func__, mpd.conn_state); } }