1

私はこれを試してみましたが、正しく動作しない場合があります..コードをループするためにwhileループを使用しました。これにリスナーを追加できますか?誰も私にこれに対する正しい答えを与えることができますか? リアルタイムで応答を得る必要がある

 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");

        }
4

1 に答える 1

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
}

そうしないと、新しいメッセージを受信するたびに、削除されていないメッセージを受信し続けることになります。

これが役に立つことを願っています。

于 2016-12-29T17:24:24.703 に答える