package com.antfortune.freeline.router.schema;
import android.util.Log;
import com.antfortune.freeline.FreelineCore;
import com.antfortune.freeline.router.ISchemaAction;
import com.antfortune.freeline.server.EmbedHttpServer;
import com.antfortune.freeline.server.LongLinkServer;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* Created by huangyong on 16/7/28.
*/
public class PushNativeSchema implements ISchemaAction {
private static final String TAG = "Freeline.pushNative";
@Override
public String getDescription() {
return "pushNative";
}
@Override
public void handle(String method, String path, HashMap<String, String> headers, Map<String, String> queries, InputStream input, EmbedHttpServer.ResponseOutputStream response) throws Exception {
Log.i(TAG, "method " + method + ", " + path + headers + queries);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(input));
try {
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = zis.read(buffer)) != -1) {
baos.write(buffer, 0, count);
}
String filename = ze.getName().substring(ze.getName().lastIndexOf(File.separator) + 1);
byte[] bytes = baos.toByteArray();
File dir = new File(FreelineCore.getDynamicNativeDir());
File file = new File(dir, filename);
if (file.exists()) file.delete();
file.createNewFile();
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(bytes);
fileOutputStream.close();
Log.d(TAG, new StringBuilder().append("native file ").append(filename).append("received (").append(file.length()).append(" bytes)").toString());
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
zis.close();
}
LongLinkServer.markNativeChanged();
response.setStatusCode(201);
}
}