/*
AWSIotWebLocalServerManager.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.local;
import android.content.Context;
import android.util.Log;
import org.deviceconnect.android.deviceplugin.awsiot.cores.p2p.WebServer;
import org.deviceconnect.android.deviceplugin.awsiot.cores.util.AWSIotUtil;
import org.deviceconnect.android.deviceplugin.awsiot.remote.BuildConfig;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AWSIotWebLocalServerManager {
private static final boolean DEBUG = BuildConfig.DEBUG;
private static final String TAG = "AWS-Local";
private final List<WebServer> mWebServerList = Collections.synchronizedList(new ArrayList<WebServer>());
private AWSIotLocalManager mIot;
private Context mContext;
public AWSIotWebLocalServerManager(final Context context, final AWSIotLocalManager ctl) {
mContext = context;
mIot = ctl;
}
public void destroy() {
synchronized (mWebServerList) {
for (WebServer server : mWebServerList) {
server.stop();
}
}
mWebServerList.clear();
}
public String createWebServer(final String address, final String path) {
if (DEBUG) {
Log.i(TAG, "createWebServer: address=" + address + " path=" + path);
}
// TODO WebServerをどのタイミングで止めるか検討
WebServer webServer = new WebServer(mContext, address) {
@Override
public void onNotifySignaling(final String signaling) {
mIot.publish(AWSIotUtil.createLocalP2P(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(this);
}
};
webServer.setPath(path);
String url = webServer.start();
if (url != null) {
mWebServerList.add(webServer);
}
if (DEBUG) {
Log.i(TAG, "url=" + url);
}
return url;
}
public void onReceivedSignaling(final String message) {
synchronized (mWebServerList) {
for (WebServer server : mWebServerList) {
if (server.hasConnectionId(message)) {
server.onReceivedSignaling(message);
}
}
}
}
}