package com.ifpdos.udi.sdk.binderhttpd;

import android.os.RemoteException;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.ifpdos.sdk.httpd.binder.aidl.IServer;
import com.ifpdos.sdk.httpd.binder.aidl.Request;
import com.ifpdos.sdk.httpd.binder.aidl.Response;
import com.ifpdos.udi.sdk.IEventHandler;
import com.ifpdos.udi.sdk.UdiSdk;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/* JADX INFO: loaded from: classes.dex */
public class ServiceWaiter implements IEventHandler {
    private static final ServiceWaiter sInstance = new ServiceWaiter();
    private final Map<String, RealWaiter> mServiceMap = new ConcurrentHashMap();
    private final Gson mGson = new Gson();

    public static class ServiceReadyData {

        @SerializedName(NotificationCompat.CATEGORY_SERVICE)
        String service;
    }

    private ServiceWaiter() {
        Log.d("UdiSdk", "create ServiceWaiter");
        UdiSdk.registerEvents((List<String>) Collections.singletonList("v1/udi/service/ready"), this);
    }

    public static ServiceWaiter getInstance() {
        return sInstance;
    }

    Response sendRequest(IServer iServer, Request request, String str) throws RemoteException {
        Response responseSendRequest = iServer.sendRequest(request);
        RealWaiter requestWaiter = getRequestWaiter(str);
        if (responseSendRequest.getCode() == 404 && !requestWaiter.mIsReady && !requestWaiter.mTimeOut) {
            int serviceReadyTimeout = UdiSdk.getServiceReadyTimeout();
            Log.d("UdiSdk", "wait for service ready : " + str + ", " + serviceReadyTimeout);
            requestWaiter.waitServiceReady(serviceReadyTimeout);
            return iServer.sendRequest(request);
        }
        Log.d("UdiSdk", str + " is ready or timeout before, ready=" + requestWaiter.mIsReady + ", timeout=" + requestWaiter.mTimeOut);
        return responseSendRequest;
    }

    private synchronized RealWaiter getRequestWaiter(String str) {
        RealWaiter realWaiter;
        realWaiter = this.mServiceMap.get(str);
        if (realWaiter == null) {
            realWaiter = new RealWaiter(str);
            this.mServiceMap.put(str, realWaiter);
        }
        return realWaiter;
    }

    @Override // com.ifpdos.udi.sdk.IEventHandler
    public void onEvent(String str, String str2) {
        try {
            onServiceReady(((ServiceReadyData) this.mGson.fromJson(str2, ServiceReadyData.class)).service);
        } catch (Throwable th) {
            Log.e("UdiSdk", "get ready service failed", th);
        }
    }

    private synchronized void onServiceReady(String str) {
        Log.d("UdiSdk", "onServiceReady " + str);
        getRequestWaiter(str).onReady();
    }

    private static class RealWaiter {
        private final String mServiceName;
        private boolean mIsReady = false;
        private boolean mTimeOut = false;

        RealWaiter(String str) {
            this.mServiceName = str;
        }

        synchronized void onReady() {
            this.mIsReady = true;
            notifyAll();
        }

        synchronized void waitServiceReady(int i) {
            if (this.mIsReady || this.mTimeOut) {
                return;
            }
            try {
                wait(i);
            } catch (InterruptedException e) {
                Log.e("UdiSdk", "waitServiceReady interrupted: " + this.mServiceName, e);
            }
            if (!this.mIsReady) {
                Log.d("UdiSdk", "waitServiceReady timeout: " + this.mServiceName);
                this.mTimeOut = true;
            }
        }
    }
}
