package org.commcare.android.tasks;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import org.commcare.android.tasks.templates.CommCareTask;
import org.commcare.dalvik.activities.CommCareWiFiDirectActivity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public abstract class FormTransferTask extends CommCareTask<String, String, Boolean, CommCareWiFiDirectActivity>{
public Context c;
private static final int SOCKET_TIMEOUT = 50000;
public static final int RESULT_SUCCESS = 0;
public static final int BULK_TRANSFER_ID = 9575922;
Long[] results;
String host;
String filepath;
int port;
public FormTransferTask(String host, String filepath, int port){
this.taskId = BULK_TRANSFER_ID;
this.host = host;
this.filepath = filepath;
this.port = port;
}
public InputStream getFormInputStream(String fPath) throws FileNotFoundException{
Log.d(CommCareWiFiDirectActivity.TAG, "Getting form input stream");
InputStream is = null;
String filepath = fPath;
Log.d(CommCareWiFiDirectActivity.TAG, " fileinptutstream with filepath: " + filepath);
is = new FileInputStream(filepath);
return is;
}
/*
* (non-Javadoc)
* @see org.commcare.android.tasks.templates.CommCareTask#doTaskBackground(java.lang.Object[])
*/
@Override
protected Boolean doTaskBackground(String... params) {
Log.d(CommCareWiFiDirectActivity.TAG, " in form transfer onHandle");
Socket socket = new Socket();
InputStream is;
try {
Log.d(CommCareWiFiDirectActivity.TAG, "Opening client socket with host: " + host + " port, " + port);
socket.bind(null);
socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);
Log.d(CommCareWiFiDirectActivity.TAG, "Client socket - " + socket.isConnected());
OutputStream stream = socket.getOutputStream();
is = getFormInputStream(filepath);
CommCareWiFiDirectActivity.copyFile(is, stream);
is.close();
return true;
} catch (IOException ioe) {
Log.e(CommCareWiFiDirectActivity.TAG, ioe.getMessage());
publishProgress("Error opening input stream: " + ioe.getMessage());
return false;
} finally {
try {
socket.close();
} catch (IOException e) {
// Give up
e.printStackTrace();
}
}
}
}