package cc.blynk.server.notifications.sms; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.asynchttpclient.AsyncCompletionHandler; import org.asynchttpclient.AsyncHttpClient; import org.asynchttpclient.Param; import org.asynchttpclient.Response; import java.util.ArrayList; import java.util.Properties; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 19.03.16. */ public class SMSWrapper { public static final String SMS_PROPERTIES_FILENAME = "sms.properties"; private static final Logger log = LogManager.getLogger(SMSWrapper.class); private final String key; private final String secret; private final AsyncHttpClient httpclient; private final ObjectReader smsResponseReader = new ObjectMapper() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .readerFor(SmsResponse.class); public SMSWrapper(Properties props, AsyncHttpClient httpclient) { this(props.getProperty("nexmo.api.key"), props.getProperty("nexmo.api.secret"), httpclient); } private SMSWrapper(String key, String secret, AsyncHttpClient httpclient) { this.key = key; this.secret = secret; this.httpclient = httpclient; } public void send(String to, String text) { ArrayList<Param> params = new ArrayList<>(); params.add(new Param("api_key", key)); params.add(new Param("api_secret", secret)); params.add(new Param("from", "Blynk")); params.add(new Param("to", to)); params.add(new Param("text", text)); httpclient.preparePost("https://rest.nexmo.com/sms/json") .setQueryParams(params) .execute(new AsyncCompletionHandler<Response>() { @Override public Response onCompleted(org.asynchttpclient.Response response) throws Exception { if (response.getStatusCode() == 200) { SmsResponse smsResponse = smsResponseReader.readValue(response.getResponseBody()); if (!smsResponse.messages[0].status.equals("0")) { log.error(smsResponse.messages[0].error); } } return response; } }); } }