/*
AWSIotWebServerManager.java
Copyright (c) 2016 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.awsiot.remote;
import android.content.Context;
import android.util.Log;
import org.deviceconnect.android.deviceplugin.awsiot.cores.core.RemoteDeviceConnectManager;
import org.deviceconnect.android.deviceplugin.awsiot.cores.p2p.WebServer;
import org.deviceconnect.android.deviceplugin.awsiot.cores.util.AWSIotUtil;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class AWSIotWebServerManager {
private static final boolean DEBUG = BuildConfig.DEBUG;
private static final String TAG = "AWS-Remote";
private final Map<RemoteDeviceConnectManager, WebServer> mWebServerList = new ConcurrentHashMap<>();
private AWSIotRemoteManager mIot;
private Context mContext;
public AWSIotWebServerManager(final Context context, final AWSIotRemoteManager ctl) {
mContext = context;
mIot = ctl;
}
public void destroy() {
synchronized (mWebServerList) {
for (Map.Entry<RemoteDeviceConnectManager, WebServer> e : mWebServerList.entrySet()) {
e.getValue().stop();
}
}
mWebServerList.clear();
}
public String createWebServer(final RemoteDeviceConnectManager remote, final String address, final String path) {
if (DEBUG) {
Log.i(TAG, "createWebServer: " + remote);
}
// TODO WebServerをどのタイミングで止めるか検討
WebServer webServer = new WebServer(mContext, address) {
@Override
public void onNotifySignaling(final String signaling) {
mIot.publish(remote, AWSIotUtil.createRemoteP2P(signaling));
}
@Override
protected void onConnected() {
if (DEBUG) {
Log.i(TAG, "WebServer#onConnected");
}
}
@Override
protected void onDisconnected() {
if (DEBUG) {
Log.i(TAG, "WebServer#onDisconnected");
}
mWebServerList.remove(remote);
}
};
webServer.setPath(path);
String url = webServer.start();
if (url != null) {
mWebServerList.put(remote, webServer);
}
if (DEBUG) {
Log.i(TAG, "url=" + url);
}
return url;
}
public void onReceivedSignaling(final RemoteDeviceConnectManager remote, final String message) {
WebServer webServer = mWebServerList.get(remote);
if (webServer != null) {
webServer.onReceivedSignaling(message);
}
}
}