package com.lfk.justweengine.utils.webServer;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import com.lfk.justweengine.utils.logger.Logger;
import com.lfk.justweengine.utils.webServer.Interface.OnLogResult;
import com.lfk.justweengine.utils.webServer.Interface.OnPermissionFile;
import com.lfk.justweengine.utils.webServer.Interface.OnWebResult;
import java.io.File;
import java.util.HashMap;
/**
* WebServer
*
* @author liufengkai
* Created by liufengkai on 16/1/6.
*/
public class WebServer {
private Activity engine;
private static HashMap<String, OnWebResult> webServerRule;
private OnLogResult logResult;
private WebServerService webServerService;
private Integer webPort = null;
private ServiceConnection serviceConnection;
private final int ERROR = -1;
private final int LOG = 1;
public WebServer(Activity engine) {
this.engine = engine;
init();
}
public WebServer(Activity engine, OnLogResult logResult) {
this.engine = engine;
this.logResult = logResult;
init();
}
public WebServer(Activity engine, OnLogResult logResult, int webPort) {
this.engine = engine;
this.logResult = logResult;
this.webPort = webPort;
init();
}
private void init() {
webServerRule = new HashMap<>();
WebServerService.init(engine);
serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
webServerService = ((WebServerService.LocalBinder) service).getService();
if (logResult != null)
logResult.OnResult(WebServerDefault.WebServerServiceConnected);
}
@Override
public void onServiceDisconnected(ComponentName name) {
webServerService = null;
if (logResult != null)
logResult.OnResult(WebServerDefault.WebServerServiceDisconnected);
}
};
}
public void startWebService() {
if (webServerService != null) {
webServerService.startServer(new MessageHandler(),
(webPort == null) ? WebServerDefault.WebDefaultPort : webPort);
}
}
public void stopWebService() {
if (webServerService != null) {
webServerService.stopServer();
}
}
public void initWebService() {
WebServerDefault.init(engine.getApplicationContext());
// 绑定Service
engine.bindService(new Intent(engine, WebServerService.class),
serviceConnection,
Context.BIND_AUTO_CREATE
);
}
public void callOffWebService() {
engine.unbindService(serviceConnection);
}
public void apply(String rule, OnWebResult result) {
webServerRule.put(rule, result);
}
public void apply(final String rule) {
webServerRule.put(rule, new OnPermissionFile() {
@Override
public File OnPermissionFile(String name) {
Logger.e(WebServerDefault.WebServerFiles + rule + name);
return new File(WebServerDefault.WebServerFiles + rule + name);
}
});
}
public static OnWebResult getRule(String rule) {
return webServerRule.get(rule);
}
public void setLogResult(OnLogResult logResult) {
this.logResult = logResult;
}
public class MessageHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case LOG:
logResult.OnResult(msg.obj.toString());
break;
case ERROR:
logResult.OnError(msg.obj.toString());
break;
}
}
public void OnError(String str) {
Message message = this.obtainMessage();
message.what = ERROR;
message.obj = str;
sendMessage(message);
}
public void OnResult(String str) {
Message message = this.obtainMessage();
message.what = LOG;
message.obj = str;
sendMessage(message);
}
}
}