Show Stream States nicely on Android

This commit is contained in:
Florian Märkl 2019-09-29 22:24:36 +02:00
commit 88db8c8840
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
12 changed files with 185 additions and 12 deletions

View file

@ -111,6 +111,7 @@ typedef struct chiaki_audio_stream_info_event_t
typedef enum {
CHIAKI_EVENT_CONNECTED,
CHIAKI_EVENT_LOGIN_PIN_REQUEST,
CHIAKI_EVENT_QUIT
} ChiakiEventType;

View file

@ -276,7 +276,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_session_set_login_pin(ChiakiSession *sessio
return CHIAKI_ERR_SUCCESS;
}
static void session_send_event(ChiakiSession *session, ChiakiEvent *event)
void chiaki_session_send_event(ChiakiSession *session, ChiakiEvent *event)
{
if(!session->event_cb)
return;
@ -376,7 +376,7 @@ static void *session_thread_func(void *arg)
ChiakiEvent event = { 0 };
event.type = CHIAKI_EVENT_LOGIN_PIN_REQUEST;
event.login_pin_request.pin_incorrect = pin_incorrect;
session_send_event(session, &event);
chiaki_session_send_event(session, &event);
pin_incorrect = true;
chiaki_cond_timedwait_pred(&session->state_cond, &session->state_mutex, UINT64_MAX, session_check_state_pred_pin, session);
@ -502,7 +502,7 @@ quit:
quit_event.type = CHIAKI_EVENT_QUIT;
quit_event.quit.reason = session->quit_reason;
quit_event.quit.reason_str = session->quit_reason_str;
session_send_event(session, &quit_event);
chiaki_session_send_event(session, &quit_event);
return NULL;
#undef CHECK_STOP

View file

@ -55,6 +55,7 @@ typedef enum {
STATE_EXPECT_STREAMINFO
} StreamConnectionState;
void chiaki_session_send_event(ChiakiSession *session, ChiakiEvent *event);
static void stream_connection_takion_cb(ChiakiTakionEvent *event, void *user);
static void stream_connection_takion_data(ChiakiStreamConnection *stream_connection, ChiakiTakionMessageDataType data_type, uint8_t *buf, size_t buf_size);
@ -243,6 +244,14 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_stream_connection_run(ChiakiStreamConnectio
stream_connection->state = STATE_IDLE;
stream_connection->state_finished = false;
stream_connection->state_failed = false;
ChiakiEvent event = { 0 };
event.type = CHIAKI_EVENT_CONNECTED;
chiaki_mutex_unlock(&stream_connection->state_mutex);
chiaki_session_send_event(session, &event);
err = chiaki_mutex_lock(&stream_connection->state_mutex);
assert(err == CHIAKI_ERR_SUCCESS);
while(true)
{
err = chiaki_cond_timedwait_pred(&stream_connection->state_cond, &stream_connection->state_mutex, HEARTBEAT_INTERVAL_MS, state_finished_cond_check, stream_connection);