interface
Observervable<T> {
fun registerObserver(observer: T)
fun unregisterObserver(observer: T)
}
abstract
class
Observervable<T>: Observervable<T> {
protected
val observers = hashSetOf<T>()
override fun registerObserver(observer: T) {
observers.add(observer)
}
override fun unregisterObserver(observer: T) {
observers.remove(observer)
}
}
class
TokenExpirationObserver {
fun onTokenExpired()
}
class
LogInterceptor : Interceptor, BaseObservable<TokenExpirationObserver> {
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
var response = chain.proceed(request)
Log.e(
"tag"
,
"request? "
+ request.method)
Log.e(
"tag"
,
"response code? "
+ response.code)
Log.e(
"tag"
,
"response url? "
+ response.request.url)
Log.e(
"tag"
,
"response header? "
+ response.request.headers)
if
(tokenExpired) notifyTokenExpired()
return
response
}
private
fun notifyTokenExpired() {
for
(observer in observers) {
observer.onTokenExpired()
}
}
}