2013-01-15 3 views
1

libspotify에 익숙해 지려고합니다. libspotify에 관한 문서가 심각하게 부족하다고 말해야합니다. 예제와 함께 작은 응용 프로그램을 해킹했지만 제대로 작동하지 않습니다.libspotify가 연결되지 않습니다.

Visual Studio 2012에 C 콘솔 응용 프로그램을 구축 중입니다. appkey가 정확합니다.

sp_session_config config; 
sp_error error; 
sp_session *session; 
char *blob = NULL; 

memset(&config, 0, sizeof(config)); 

config.api_version = SPOTIFY_API_VERSION; 
config.cache_location = "tmp"; 
config.settings_location = "tmp"; 
config.application_key = g_appkey; 
config.application_key_size = g_appkey_size; 

config.user_agent = "SpotiTest"; 

error = sp_session_create(&config, &session); 
if (SP_ERROR_OK != error) { 
    fprintf(stderr, "failed to create session: %s\n", 
        sp_error_message(error)); 
    return; 
} 

error = sp_session_login(session, "USERNAME", "PASSWORD", 1, blob); 
if (SP_ERROR_OK != error) { 
    fprintf(stderr, "failed to log in to Spotify: %s\n", 
        sp_error_message(error)); 
    sp_session_release(session); 
    exit(4); 
} 

sp_connectionstate cs = sp_session_connectionstate (session); 

는 상관없이 사용자 이름과 암호 (허위 또는 올바른) sp_session_login 항상 SP_ERROR_OK을 반환하지 않습니다. sp_session_connectionstate로 연결 상태를 확인할 때 항상 SP_CONNECTION_STATE_LOGGED_OUT을 반환합니다.

내가 여기서 잘못하고있는 것을 보지 못하고 있으며 일반 채널을 통해 관련 답변을 찾지 못하는 것 같습니다.

답변

1

API가 비동기입니다. sp_session_login이 즉시 반환되고 로그인 프로세스가 백그라운드에서 계속됩니다. API와 함께 제공되는 예제를 살펴보십시오. sp_session_process_events을 호출하기 위해 이벤트 루프가 필요합니다. 그렇지 않으면 libspotify가 아무런 작업도 수행하지 않으며 logged_in 콜백을받을 때까지 기다리는 것이 좋습니다.

+0

항상 idle 루프의 sp_session_process_events를 다음과 같이 호출해야합니까? while (1) { sp_session_process_events(); } [code] notify_main_thread [/ code] 콜백을 호출 할 때만 호출해야합니까? – Demigod

+0

그보다 약간 더 복잡합니다. libspotify와 함께 제공되는 spshell과 같은 예제를 살펴보십시오. 'sp_session_process_events'를 호출 할 때마다 다시 호출하기 전에 대기 할 시간 (밀리 초)이 반환됩니다. 그 시간이 경과하거나'notify_main_thread'가 호출 될 때까지 기다려야합니다. 'sp_session_process_events'를 계속해서 돌리면 많은 CPU 시간이 낭비되고 다른 것들은 작동하지 않을 수도 있습니다. – Weeble

관련 문제