Как отправить AsmResp с CloudHpper асинхронно - PullRequest
0 голосов
/ 05 апреля 2020

надеюсь, что все в порядке с этой пандемией c.

Я получаю смс из SMS C, и я хотел бы отправить ему delivery_sm_resp.

Я пытаюсь реализовать это так:

@Override
public PduResponse firePduRequestReceived(PduRequest pduRequest) {
    logger.warn("***** BIND RECEIVER *****");
    DeliverSm sms = null;

    if ((pduRequest != null) && pduRequest.getName().equals("deliver_sm")) {
        sms = (DeliverSm) pduRequest;
    }   
    if ((pduRequest != null) && pduRequest.getName().equals("enquire_link")) {
        return pduRequest.createResponse();
    }
    if ( sms !=null && (int)sms.getDataCoding() == 0 ) {
        //message content is English
        logger.warn("***** New Message Received *****");
        logger.warn("From: " + sms.getSourceAddress().getAddress());
        logger.warn("To: " + sms.getDestAddress().getAddress());
        logger.warn("Content: " + new String(sms.getShortMessage()));


            DeliverSm deliver = new DeliverSm();
            deliver.setSourceAddress(sms.getSourceAddress());
            deliver.setDestAddress(sms.getDestAddress());
            deliver.setDataCoding(sms.getDataCoding());
            try {
                deliver.setShortMessage(sms.getShortMessage());
            } catch (SmppInvalidArgumentException e) {
                e.printStackTrace();
            }
            deliver.setSequenceNumber(sms.getSequenceNumber());
            //deliver.setCommandLength(sms.getCommandLength());
            deliver.setCommandStatus(sms.getCommandStatus());


            runDeliverSmRespSmppSessionHandler(session, deliver);

    }
    return super.firePduRequestReceived(pduRequest);
}

я вызываю runDeliverSmRespSmppSessionHandler асинхронно, вот так:

    public class RunDeliverSmRespSmppSessionHandler extends DefaultSmppSessionHandler implements Runnable {
        .
        .
        .
        public void run() {        
                logger.info("welcome to deliver TestSmppSessionHandler RUN");

            sendRequestPdu(session, deliver);
        }
    private void sendRequestPdu(SmppSession session, DeliverSm deliver) {
            logger.info("welcome to deliver TestSmppSessionHandler sendRequestPdu");

            try {
                WindowFuture<Integer,PduRequest,PduResponse> future = session.sendRequestPdu(deliver, 10000, false);
                if (!future.await()) {
                    logger.error("Failed to receive deliver_sm_resp within specified time");
                } else if (future.isSuccess()) {
                   DeliverSmResp deliverSmResp = (DeliverSmResp)future.getResponse();
                    logger.info("deliver_sm_resp: commandStatus [" + deliverSmResp.getCommandStatus() + "=" + deliverSmResp.getResultMessage() + "]");
                } else {
                    logger.error("Failed to properly receive deliver_sm_resp: " + future.getCause());
                }
            } catch (Exception e) {
                logger.error("message catched in smDeliver : "+e.getMessage()+" get stackTrace : "+e.getStackTrace());

            }
        }

К сожалению, у меня была эта ошибка в sendRequestPdu ():

04-04-2020 23:15:41 ERROR TestSmppSessionHandler:61 - Failed to receive deliver_sm_resp within specified time
04-04-2020 23:16:06 WARN  EnquireLinkTask:37 - Enquire link failed, executing reconnect: 
com.cloudhopper.smpp.type.SmppTimeoutException: Unable to accept offer within [10000 ms] (window full)
    at com.cloudhopper.smpp.impl.DefaultSmppSession.sendRequestPdu(DefaultSmppSession.java:508)
    at com.cloudhopper.smpp.impl.DefaultSmppSession.sendRequestAndGetResponse(DefaultSmppSession.java:464)

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 03 мая 2020

чтобы отправить ответ, чтобы сообщить SMS C, чем вы получили SMS, вы должны использовать

   private void sendResponsePdu(SmppSession session, DeliverSmResp deliver) {
        logger.info("welcome to deliver TestSmppSessionHandlerV2 sendRequestPdu");

          try {
              session.sendResponsePdu(deliver);
              logger.info("message deliver response sent successfully !!!");

          } catch (Exception e) {
            logger.error("message catched in smDeliver : "+e.getMessage()+" get stackTrace : "+e.getStackTrace());

          }

О DeliverSmResp deliver, вы можете инициализировать так:

            DeliverSmResp deliver_sm_resp = new DeliverSmResp();

            deliver_sm_resp.setCommandLength(17);
            deliver_sm_resp.setCommandStatus(sms.getCommandStatus());
            deliver_sm_resp.setSequenceNumber(sms.getSequenceNumber());
            deliver_sm_resp.setMessageId("");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...