/** Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
*
* @author <a href='mailto:th33musk3t33rs@gmail.com'>3.musket33rs</a>
*
* @since 0.1
*/
package org.threemusketeers.cordova.plugin.browserpush;
import android.util.Log;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import org.threemusketeers.eventsource.EventSource;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.threemusketeers.websocket.WebSocket;
import java.util.HashMap;
/**
* Implementation of the EventSource for Cordova Android as it is missing today
* http://www.w3.org/TR/2012/WD-eventsource-20121023/
* Implementation of web socket RFC 6455 aka HyBi-17
*/
public class BrowserPush extends CordovaPlugin {
public static EventLoopGroup group = new NioEventLoopGroup();
public static HashMap<String, EventSource> sources = new HashMap<String, EventSource>();
public static HashMap<String, WebSocket> webSockets = new HashMap<String, WebSocket>();
@Override
public boolean execute(String action, JSONArray args,
final CallbackContext callbackContext) throws JSONException {
if (action.equals("EventSource.constructor")) {
EventSource es = new EventSource(args.getString(0), group, new CordovaEventSourceNotification(cordova, callbackContext));
sources.put(args.getString(1), es);
return true;
} else if (action.equals("EventSource.close")) {
EventSource es = sources.get(args.getString(0));
if (es != null) {
es.close();
} else {
callbackContext.error("Unable to find EventSource associated");
Log.d("BrowserPush", "Error finding open source ");
}
sources.remove(args.getString(0));
return true;
} else if (action.equals("WebSocket.constructor")) {
WebSocket webSocket = new WebSocket(args.getString(0), group, new CordovaWebSocketNotification(cordova, callbackContext));
webSockets.put(args.getString(1), webSocket);
return true;
} else if (action.equals("WebSocket.close")) {
WebSocket webSocket = webSockets.get(args.getString(0));
if (webSocket != null) {
webSocket.close();
} else {
callbackContext.error("Unable to find WebSocket associated");
Log.d("BrowserPush", "Error finding websocket ");
}
webSockets.remove(args.getString(0));
return true;
} else if (action.equals("WebSocket.send")) {
WebSocket webSocket = webSockets.get(args.getString(1));
if (webSocket != null) {
webSocket.send(args.getString(0));
} else {
callbackContext.error("Unable to find WebSocket associated");
Log.d("BrowserPush", "Error finding websocket ");
}
return true;
}
return false;
}
}