docs: private final void processMainRequest() {
  
          sender = getSender();
          startTimeMillis = System.currentTimeMillis();
          timeoutDuration = Duration.create(
                  request.getActorMaxOperationTimeoutSec(), TimeUnit.SECONDS);
  
          actorMaxOperationTimeoutSec = request.getActorMaxOperationTimeoutSec();
  
          if (request.getProtocol() == RequestProtocol.HTTP 
                  || request.getProtocol() == RequestProtocol.HTTPS) {
              String urlComplete = String.format("%s://%s:%d%s", request
                      .getProtocol().toString(), trueTargetNode, request
                      .getPort(), request.getResourcePath());
  
              // http://stackoverflow.com/questions/1600291/validating-url-in-java
              if (!PcHttpUtils.isUrlValid(urlComplete.trim())) {
                  String errMsg = "INVALID_URL";
                  logger.error("INVALID_URL: " + urlComplete + " return..");
                  replyErrors(errMsg, errMsg, PcConstants.NA, PcConstants.NA_INT);
                  return;
              } else {
                  logger.debug("url pass validation: " + urlComplete);
              }
  
              asyncWorker = getContext().actorOf(
                      Props.create(HttpWorker.class, actorMaxOperationTimeoutSec,
                              client, urlComplete, request.getHttpMethod(),
                              request.getPostData(), request.getHttpHeaderMap(), request.getResponseHeaderMeta()));
  
          } else if (request.getProtocol() == RequestProtocol.SSH ){
              asyncWorker = getContext().actorOf(
                      Props.create(SshWorker.class, actorMaxOperationTimeoutSec,
                              request.getSshMeta(), trueTargetNode));
          } else if (request.getProtocol() == RequestProtocol.TCP ){
              asyncWorker = getContext().actorOf(
                      Props.create(TcpWorker.class, actorMaxOperationTimeoutSec,
                              request.getTcpMeta(), trueTargetNode));            
          } else if (request.getProtocol() == RequestProtocol.UDP ){
              asyncWorker = getContext().actorOf(
                      Props.create(UdpWorker.class, actorMaxOperationTimeoutSec,
                              request.getUdpMeta(), trueTargetNode));                        
          } else if (request.getProtocol() == RequestProtocol.PING ){
              asyncWorker = getContext().actorOf(
                      Props.create(PingWorker.class, actorMaxOperationTimeoutSec, request.getPingMeta(),
                               trueTargetNode));
          }
  
          asyncWorker.tell(RequestWorkerMsgType.PROCESS_REQUEST, getSelf());
  
          cancelExistingIfAnyAndScheduleTimeoutCall();
  
      }