 package ibgroup.services;
 
 import ibgroup.Config;
 import ibgroup.core.CookieManager;
 import ibgroup.http.HttpProxy;
 import io.vertx.core.Handler;
 import io.vertx.core.Vertx;
 import io.vertx.core.buffer.Buffer;
 import io.vertx.core.http.HttpClient;
 import io.vertx.core.http.HttpClientRequest;
 import io.vertx.core.http.HttpClientResponse;
 import io.vertx.core.http.HttpMethod;
 import io.vertx.core.http.HttpServerRequest;
 import io.vertx.core.logging.Logger;
 import io.vertx.core.logging.LoggerFactory;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
 
 public abstract class BaseServiceProxy
 {
   private static final Logger logger = LoggerFactory.getLogger(BaseServiceProxy.class);
   private static final Logger msgLogger = LoggerFactory.getLogger("HttpMessageLogger");
   private static Map<String, BaseServiceProxy> svcMap = new HashMap<>();
   
   protected final CookieManager cm;
   protected final HttpProxy proxy;
   protected long timer = 0L;
   private final String host;
   private List<Handler<ServiceEvent>> listeners = new ArrayList<>();
   private final Vertx vertx;
   Config config;
   
   public BaseServiceProxy(Vertx vertx, HttpClient client, Config config) {
     this.proxy = new HttpProxy(config, client);
     this.config = config;
     this.vertx = Objects.<Vertx>requireNonNull(vertx);
     this.host = config.getProxyRemoteHost();
     this.cm = CookieManager.getInstance();
     ServiceEndPoints.setEnv(config);
     svcMap.put(baseUrl(), this);
   }
   
   public void listener(Handler<ServiceEvent> listener) {
     this.listeners.add(listener);
   }
 
   
   public void onTimerEvent(Long time) {
     logger.info("onTimer {}", new Object[] { time });
   }
   
   protected String host() {
     return this.host;
   }
   
   protected void on(ServiceEvent.EventType event) {
     on(event, null);
   }
   
   protected void on(ServiceEvent.EventType event, Object payload) {
     this.vertx.runOnContext(run -> {
           logger.debug("forward event {}, payload {}", new Object[] { event, (payload == null) ? "none" : payload });
           this.listeners.forEach(());
         });
   }
   
   protected void startTimer(long period) {
     if (this.timer == 0L) {
       logger.debug("start timer {} {}", new Object[] { Long.valueOf(period), getClass().getSimpleName() });
       this.timer = vertx().setPeriodic(period, this::onTimerEvent);
     } 
   }
   
   protected void stopTimer() {
     logger.debug("cancel timer {} {}", new Object[] { getClass().getSimpleName(), Long.valueOf(this.timer) });
     vertx().cancelTimer(this.timer);
     this.timer = 0L;
   }
   
   protected Vertx vertx() {
     return this.vertx;
   }
 
 
 
 
   
   public static void fwdToSvc(HttpServerRequest clientReq, String svc, Handler<HttpClientResponse> onEnd) {
     BaseServiceProxy service = svcMap.get(svc);
     if (service == null) {
       clientReq.response().setChunked(true);
       clientReq.response().write("Unknown service ").write(svc).end();
       return;
     } 
     service.onProxyRequest(clientReq, onEnd);
   }
   
   public static void traceClientRequest(String svc, String url, HttpClientRequest clientReq) {
     msgLogger.info("-> {} {} {}", new Object[] { svc, clientReq.method(), url });
     msgLogger.debug(" headers: {}", new Object[] { clientReq.headers().entries() });
   }
   
   public static void traceServerResponse(String url, HttpClientResponse res) {
     res.bodyHandler(body -> msgLogger.info("<- {} {} {} {}", new Object[] { Integer.valueOf(res.statusCode()), HttpMethod.GET, url, Integer.valueOf(body.length()) }));
   }
   
   abstract String baseUrl();
   
   abstract void onProxyRequest(HttpServerRequest paramHttpServerRequest, Handler<HttpClientResponse> paramHandler);
 }


/* Location:              C:\Users\iuzeri\AppData\Local\Temp\ibrk_cpwa_gateway\dist\ibgroup.web.core.iblink.router.clientportal.gw.jar!\ibgroup\web\core\clientportal\gw\services\BaseServiceProxy.class
 * Java compiler version: 8 (52.0)
 * JD-Core Version:       1.1.3
 */