Package net.reversehttp.pubsub

Source Code of net.reversehttp.pubsub.EndpointService

package net.reversehttp.pubsub;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

import net.reversehttp.HttpQuery;
import net.reversehttp.HttpRequest;
import net.reversehttp.HttpServer;
import net.reversehttp.NormalHttpServer;
import net.reversehttp.RequestHandler;

public class EndpointService implements RequestHandler {
    public static void main(String[] args) {
        configureLogging();
        try {
            int port = (args.length > 0) ? Integer.parseInt(args[0]) : 8888;
            final Logger logger = Logger.getLogger(EndpointService.class.getName());
            logger.log(Level.FINE, "Starting on port " + port);
            HttpServer httpd = new NormalHttpServer(port,
                    new EndpointService(new Endpoint() {
                        public boolean acceptSubscriptionChange(String mode, String topic, String token, int leaseSeconds) {
                            System.out.println("Subscription change: "+mode+", "+topic+", "+token+", "+leaseSeconds);
                            return true;
                        }
                        public void handleDelivery(String topic, byte[] body) {
                            System.out.println("Received message:\n\"" + new String(body) + "\"");
                        }
                    }));
            httpd.serve();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void configureLogging() {
        ConsoleHandler handler = new ConsoleHandler();
        Logger root = Logger.getLogger("");
        root.addHandler(handler);
        handler.setLevel(Level.FINER);
        root.setLevel(Level.FINER);
    }

    private Endpoint handler;

    public EndpointService(Endpoint handler) {
        this.handler = handler;
    }

    public void handleRequest(HttpRequest req) {
        URI u;
        try {
            u = new URI(req.getRawPath());
        } catch (URISyntaxException ue) {
            req.setResponse(400, "Invalid path");
            return;
        }
        Map<String, String> params = HttpQuery.parse(u.getQuery());

        if ("GET".equals(req.getMethod())) {
            String challenge = params.get("hub.challenge");
            if (challenge == null) challenge = "";
            int leaseSeconds;
            try {
                leaseSeconds = Integer.parseInt(params.get("hub.lease_seconds"));
            } catch (NumberFormatException nfe) {
                leaseSeconds = -1;
            }
            if (handler.acceptSubscriptionChange(params.get("hub.mode"),
                                                 params.get("hub.topic"),
                                                 params.get("hub.verify_token"),
                                                 leaseSeconds)) {
                req.setResponse(200, "OK");
                req.getResponse().setHeader("Content-type", "text/plain; charset=utf-8");
                req.getResponse().setBody(challenge);
            } else {
                req.setResponse(403, "Forbidden");
            }
        } else if ("POST".equals(req.getMethod())) {
            String topic = params.get("hub.topic");
            this.handler.handleDelivery(topic, req.getBody());
            req.setResponse(204, "OK");
        } else {
            req.setResponse(405, "Invalid HTTP method");
        }
    }
}
TOP

Related Classes of net.reversehttp.pubsub.EndpointService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.