diff options
Diffstat (limited to 'src/org/traccar/sms')
-rw-r--r-- | src/org/traccar/sms/SmsGatewayClient.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/org/traccar/sms/SmsGatewayClient.java b/src/org/traccar/sms/SmsGatewayClient.java new file mode 100644 index 000000000..b1683783d --- /dev/null +++ b/src/org/traccar/sms/SmsGatewayClient.java @@ -0,0 +1,72 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.traccar.sms; + +import javax.json.Json; +import javax.json.JsonArray; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.core.Response; +import org.traccar.Context; +import org.traccar.helper.Log; +import org.traccar.notification.MessageException; + +/** + * + * @author marcos + */ +public class SmsGatewayClient implements SmsManager { + + private static final String URL = "https://smsgateway.me/api/v4/message/send"; + private static final String KEY_PHONE_NUMBER = "phone_number"; + private static final String KEY_MESSAGE = "message"; + private static final String KEY_DEVICE_ID = "device_id"; + private static final String KEY_AUTHORIZATION = "Authorization"; + + private final String token; + private final int deviceId; + + public SmsGatewayClient() { + token = Context.getConfig().getString("sms.smsgateway.token"); + deviceId = Context.getConfig().getInteger("sms.smsgateway.deviceId"); + } + + protected JsonArray preparePayload(String destAddress, String message) { + return Json.createArrayBuilder() + .add(Json.createObjectBuilder() + .add(KEY_PHONE_NUMBER, destAddress) + .add(KEY_MESSAGE, message) + .add(KEY_DEVICE_ID, deviceId)) + .build(); + } + + @Override + public void sendMessageSync(String destAddress, String message, boolean command) + throws InterruptedException, MessageException { + Invocation.Builder requestBuilder = Context.getClient().target(URL).request(); + + requestBuilder = requestBuilder.header(KEY_AUTHORIZATION, token); + + Response response = requestBuilder.post(Entity.json(preparePayload(destAddress, message))); + if (!response.getStatusInfo().equals(Response.Status.OK)) { + String output = response.readEntity(String.class); + Log.error(output); + } + } + + @Override + public void sendMessageAsync(final String destAddress, final String message, final boolean command) { + new Thread(new Runnable() { + public void run() { + try { + sendMessageSync(destAddress, message, command); + } catch (MessageException | InterruptedException error) { + Log.warning(error); + } + } + }).start(); + } +} |