private String processQueueMsg(MsgObject msgObject, Keyword keyword) {
    ContentAbstract delegate = null;
    try {
      String classname = "";
      if (keyword.getClassname().startsWith("~")) {
        classname = "MyProcess.InvalidProcess";

        // Cau hinh tra loi luon
        // $msgtype$info
        String sInfo = keyword.getClassname();
        String[] arrInfo = sInfo.split("~");
        String mtreply = "";
        int msgtype = 2;
        if (arrInfo.length > 2) {
          mtreply = arrInfo[2];
          if (LocalConfig.MT_CHARGING.equals(arrInfo[1])) {
            msgtype = 1;
          } else if (LocalConfig.MT_PUSH.equals(arrInfo[1])) {
            msgtype = 3;
          } else if (LocalConfig.MT_REFUND_SYNTAX.equals(arrInfo[1])) {
            msgtype = 21;
          } else if (LocalConfig.MT_REFUND_CONTENT.equals(arrInfo[1])) {
            msgtype = 22;
          } else {
            msgtype = 2;
          }

        } else {
          mtreply = arrInfo[1];
          msgtype = 2;
        }
        msgObject.setUsertext(mtreply);
        msgObject.setMsgtype(msgtype);
      } else {
        classname = keyword.getClassname();
      }

      // Ghi log xem class nào xử lý MO này
      mLog.log.info(
          Common.GetStringLog("Call Class Process Keyword", "ClassName:" + classname, msgObject));

      // Khởi tạo đối tượng process xử lý keyword
      Class<?> delegateClass = Class.forName(classname);
      Object delegateObject = delegateClass.newInstance();
      delegate = (ContentAbstract) delegateObject;

      delegate.start(msgObject, keyword);
      return "OK";

    } catch (Exception e) {
      mLog.log.error(Common.GetStringLog(msgObject), e);

      return msgObject.getUserid() + ":" + e.toString();
    }
  }
  public void run() {

    MsgObject msgObject = null;
    String serviceId = "";
    String info = "";
    Keyword keyword = null;
    String process_result = "";

    try {
      sleep(1500);
    } catch (InterruptedException ex1) {
    }

    while (ConsoleSRV.processData) {
      process_result = "";
      try {
        // Lấy 1 item trong MO Queue và xóa nó đi
        msgObject = (MsgObject) queue.remove();
        serviceId = msgObject.getServiceid();
        info = msgObject.getUsertext();

        keyword = ConsoleSRV.mLoadKeyword.getKeyword(info, serviceId);

        if (LocalConfig.INV_KEYWORD.equalsIgnoreCase(keyword.getKeyword())) {
          // Nếu keyword không nằm trong list keyword cho phép

          keyword = ConsoleSRV.mLoadKeyword.getKeywordInvalid(info, serviceId);

          if (!LocalConfig.INV_KEYWORD.equalsIgnoreCase(keyword.getKeyword())) {
            String newinfo = MyText.replaceWhiteLetter(info);
            msgObject.setUsertext(newinfo);
          } else {
            keyword = ConsoleSRV.mLoadKeyword.getKeywordInvalidLast(info, serviceId);

            if (!LocalConfig.INV_KEYWORD.equalsIgnoreCase(keyword.getKeyword())) {
              String newinfo = MyText.replaceWhiteLetter(info);
              newinfo = newinfo.replace(".", "");
              newinfo = newinfo.replace(" ", "");

              msgObject.setUsertext(newinfo);
            }
          }
        }

        mLog.log.info(
            Common.GetStringLog(
                "Check Exist Keyword", "Keyword:" + keyword.getKeyword(), msgObject));

        msgObject.setKeyword(keyword.getKeyword());
        msgObject.setCpid(keyword.getCpid());
        process_result = processQueueMsg(msgObject, keyword);

        msgObject.setMsgNotes(process_result);

        ConsoleSRV.incrementAndGet_process(msgObject.getMobileoperator());

        queueLog.add(
            new MsgObject(
                msgObject.getId(),
                serviceId,
                msgObject.getUserid(),
                keyword.getKeyword(),
                info,
                msgObject.getRequestid(),
                msgObject.getTTimes(),
                msgObject.getMobileoperator(),
                0,
                0,
                msgObject.getCpid(),
                msgObject.getMsgnotes()));

      } catch (Exception ex) {
        mLog.log.error(Common.GetStringLog(msgObject), ex);
        queue.add(msgObject);
      }
    }
  }