Android Open Source - rcdroid Control Protocol Handler






From Project

Back to project page rcdroid.

License

The source code is released under:

Copyright (c) 2013, Jamie Furness (jamie@jamierf.co.uk) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following...

If you think the Android project rcdroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.jamierf.rcdroid.http.handler;
// ww w  .  j  a v a 2  s. c  om
import com.google.common.collect.Lists;
import com.jamierf.rcdroid.http.Packet;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.webbitserver.BaseWebSocketHandler;
import org.webbitserver.WebSocketConnection;

import java.io.IOException;
import java.util.Collection;

public abstract class ControlProtocolHandler extends BaseWebSocketHandler {

    private static final ObjectMapper JSON = new ObjectMapper();
    private static final Logger LOG = LoggerFactory.getLogger(ControlProtocolHandler.class);

    private final Collection<WebSocketConnection> clients;

    public ControlProtocolHandler() {
        clients = Lists.newLinkedList();
    }

    protected abstract void onConnect(WebSocketConnection client);
    protected abstract void onPacket(WebSocketConnection client, Packet packet) throws Throwable;

    public void send(Packet packet) throws IOException {
        synchronized (clients) {
            if (clients.isEmpty())
                return;

            LOG.trace("Sending {}", packet);

            for (WebSocketConnection client : clients)
                this.send(client, packet);
        }
    }

    private void send(WebSocketConnection client, Packet packet) throws IOException {
        try {
            final String json = JSON.writeValueAsString(packet);
            client.send(json);
        }
        catch (Exception e) {
            LOG.warn("Failed sending packet: " + packet, e);
        }
    }

    @Override
    public final void onOpen(WebSocketConnection client) {
        synchronized (clients) {
            clients.add(client);
        }

        this.onConnect(client);
    }

    @Override
    public final void onClose(WebSocketConnection client) {
        synchronized (clients) {
            clients.remove(client);
        }
    }

    @Override
    public final void onMessage(WebSocketConnection client, String json) throws Throwable {
        try {
            final Packet packet = JSON.readValue(json, Packet.class);
            this.onPacket(client, packet);
        }
        catch (Exception e) {
            LOG.warn("Failed handling message: " + json, e);
        }
    }
}




Java Source Code List

com.jamierf.rcdroid.CarActivity.java
com.jamierf.rcdroid.CarService.java
com.jamierf.rcdroid.config.CarConfig.java
com.jamierf.rcdroid.config.ServoConfig.java
com.jamierf.rcdroid.config.WebUIConfig.java
com.jamierf.rcdroid.http.Packet.java
com.jamierf.rcdroid.http.WebController.java
com.jamierf.rcdroid.http.handler.AssetResourceHandler.java
com.jamierf.rcdroid.http.handler.ControlProtocolHandler.java
com.jamierf.rcdroid.http.handler.JsonPOJOHandler.java
com.jamierf.rcdroid.http.listener.ClientListener.java
com.jamierf.rcdroid.http.listener.PacketListener.java
com.jamierf.rcdroid.input.SensorController.java
com.jamierf.rcdroid.input.api.BatteryStatus.java
com.jamierf.rcdroid.input.api.Coordinate.java
com.jamierf.rcdroid.input.sensor.AbstractSensor.java
com.jamierf.rcdroid.input.sensor.AccelerationSensor.java
com.jamierf.rcdroid.input.sensor.BatterySensor.java
com.jamierf.rcdroid.input.sensor.LocationSensor.java
com.jamierf.rcdroid.input.sensor.RotationSensor.java
com.jamierf.rcdroid.input.sensor.listener.SensorListener.java
com.jamierf.rcdroid.logic.CarEngine.java
com.jamierf.rcdroid.logic.packets.AbstractServoHandler.java
com.jamierf.rcdroid.logic.packets.PlayAlarmRequestHandler.java
com.jamierf.rcdroid.logic.packets.SetRotationRequestHandler.java
com.jamierf.rcdroid.logic.packets.SetSpeedRequestHandler.java
com.jamierf.rcdroid.logic.sensors.AccelerationSensorHandler.java
com.jamierf.rcdroid.logic.sensors.BatterySensorHandler.java
com.jamierf.rcdroid.logic.sensors.LocationSensorHandler.java
com.jamierf.rcdroid.logic.sensors.RotationSensorHandler.java