package com.example.smshook; import java.util.List; import java.util.Map; import fi.iki.elonen.NanoHTTPD; public class HttpServer extends NanoHTTPD { public interface OnRequestListener { void onSmsRequest(String sender, String message); } private OnRequestListener listener; public void setOnRequestListener(OnRequestListener listener) { this.listener = listener; } private HttpServer(int port) { super(port); } private HttpServer(String hostname, int port) { super(hostname, port); } private static volatile HttpServer instance; //double check locking public static HttpServer getInstance(int port) { if (instance == null) { synchronized (HttpServer.class) { if (instance == null) { instance = new HttpServer("0.0.0.0", port); } } } return instance; } @Override public Response serve(IHTTPSession session) { Map> params = session.getParameters(); List senders = params.get("sender"); if (senders == null || senders.isEmpty()) { return newFixedLengthResponse("sender is required"); } List messages = params.get("message"); if (messages == null || messages.isEmpty()) { return newFixedLengthResponse("message is required"); } String sender = senders.get(0); String message = messages.get(0); if (listener != null) { listener.onSmsRequest(sender, message); } return newFixedLengthResponse("ok"); } }