ストリーミング受信状態表示をもっと正確にする

This commit is contained in:
tateisu 2018-04-20 22:59:06 +09:00
parent 731780c775
commit 26888a79f4
1 changed files with 14 additions and 4 deletions

View File

@ -66,6 +66,7 @@ internal class StreamReader(
internal fun dispose() { internal fun dispose() {
bDisposed.set(true) bDisposed.set(true)
socket.get()?.cancel() socket.get()?.cancel()
socket.set(null)
} }
internal val proc_reconnect : Runnable = Runnable { internal val proc_reconnect : Runnable = Runnable {
@ -240,12 +241,14 @@ internal class StreamReader(
return return
} }
socket.set(null)
bListening.set(true) bListening.set(true)
fireListeningChanged() fireListeningChanged()
TootTaskRunner(context).run(access_info, object : TootTask { TootTaskRunner(context).run(access_info, object : TootTask {
override fun background(client : TootApiClient) : TootApiResult? { override fun background(client : TootApiClient) : TootApiResult? {
val result = client.webSocket(end_point, this@Reader) val result = client.webSocket(end_point, this@Reader)
if(result == null) { if(result == null) {
log.d("startRead: cancelled.") log.d("startRead: cancelled.")
bListening.set(false) bListening.set(false)
@ -254,9 +257,15 @@ internal class StreamReader(
val ws = result.data as? WebSocket val ws = result.data as? WebSocket
if(ws != null) { if(ws != null) {
socket.set(ws) socket.set(ws)
fireListeningChanged()
} else { } else {
val error = result.error val error = result.error
log.d("startRead: error. $error") log.d("startRead: error. $error")
bListening.set(false)
fireListeningChanged()
// this may network error.
handler.removeCallbacks(proc_reconnect)
handler.postDelayed(proc_reconnect, 5000L)
} }
} }
return result return result
@ -350,9 +359,10 @@ internal class StreamReader(
&& reader.end_point == endPoint && reader.end_point == endPoint
&& reader.containsCallback( streamCallback ) && reader.containsCallback( streamCallback )
) { ) {
return when( reader.bListening.get() ){ return if(reader.bListening.get() && reader.socket.get() != null ) {
true -> StreamingIndicatorState.LISTENING StreamingIndicatorState.LISTENING
else -> StreamingIndicatorState.REGISTERED }else {
StreamingIndicatorState.REGISTERED
} }
} }
} }