2016-12-27 1 views
1

Я пытаюсь с этим, но несколько раз не работает правильно. Я использовал цикл while для цикла кода. Могу ли я добавить для этого списка? любой может дать мне правильный ответ для этого? в необходимости получения Быстродействие реального времениSMS не получен с помощью библиотеки java smslib

while (true) { 
      msgList = new ArrayList<InboundMessage>(); 
      Service.getInstance().readMessages(msgList, InboundMessage.MessageClasses.ALL); 
      for (InboundMessage im : msgList) { 

       if (last < im.getMemIndex()) { 
        ResultSet rs = DB.getConnection().createStatement().executeQuery("Select * From codes where code='" + im.getText() + "'"); 
        if (rs.next()) { 
         ResultSet rs2 = DB.getConnection().createStatement().executeQuery("Select * From sms_log where code='" + im.getText() + "' AND tel_no='" + im.getOriginator() + "'"); 
         if (rs2.next()) { 
           if (m == null) { 
            m = new SMSClient(1); 
           } 
           m.sendMessage(im.getOriginator(), "The Code is Already Sent... Thank You!."); 

          System.out.println("The Code is Already Sent... Thank You!."); 
         } else { 
          System.out.println("The Code Verified... Thank You!."); 
          if (m == null) { 
           m = new SMSClient(1); 
          } 

          m.sendMessage(im.getOriginator(), "The Code Verified... Thank You!."); 
          DB.getConnection().createStatement().execute("INSERT INTO sms_log (tel_no,code,status) values('" + im.getOriginator() + "','" + im.getText() + "',1)"); 

         } 
        } else { 
         if (m == null) { 
          m = new SMSClient(1); 
         } 
         m.sendMessage(im.getOriginator(), "Invalid Code... Thank You!."); 
         System.out.println("Invalid Code... Thank You!."); 
        } 

       } 
      } 
      Thread.sleep(10000); 
      System.out.println("start"); 

     } 

ответ

0

Я думаю IInboundMessageNotification это интерфейс вы ищете

public class InboundNotification implements IInboundMessageNotification { 

    @Override 
    public void process(AGateway aGateway, Message.MessageTypes messageTypes, InboundMessage inboundMessage) { 
    //add you logic for received messages here 
    } 
}

Добавить класс уведомления в службу smsLib

Service.getInstance().setInboundMessageNotification(new InboundNotification())

Отныне process() будет вызываться каждый раз, когда ваш модем получает сообщение ,

Насколько я помню, smslib (версия 3.5.x) не приводит к удалению полученных сообщений, так что должно быть сделано вручную

@Override 
public void process(AGateway aGateway, Message.MessageTypes messageTypes, InboundMessage inboundMessage) { 
    try { 
     aGateway.deleteMessage(inboundMessage); 
     } catch (TimeoutException | GatewayException | InterruptedException | IOException e) { 
      e.printStackTrace(); 
     } 
    // your logic here 
}

иначе вы будете держать получать не удаленные сообщения каждый раз, когда вы получаете новый один.

Надеюсь, вы найдете это полезным.