| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- package com.usai.util;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.util.Log;
- import com.usai.redant.raimage.RedAntApplication;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.ObjectOutputStream;
- import java.util.ArrayList;
- import java.util.List;
- import static com.usai.util.Network.URL_UPLOAD;
- /**
- * Created by ray on 13/06/2017.
- */
- public class RAUploadManager {
- public int maxThread=3;
- public int activeThread;
- public int maxRetry=2;
- public Boolean autoStart=true;
- public Boolean removeFinish=true;
- public Boolean removeError=false;
- public QueueStatus queue_status;
- public static final int RESULT_BARCODE_ERROR=-50;
- public TaskStatus newtaskStatus= TaskStatus.TaskStatusWait;
- public ArrayList<Bundle> arr_queue;
- // private List<Bundle> operation_queue;
- // private ExecutorService es = Executors.newFixedThreadPool(3);//
- // .newFixedThreadPool();
- // private CountDownLatch latch = new CountDownLatch(maxThread);
- private RAOperationQueue operation_queue;
- public enum QueueStatus {
- QueueStatusDefault,
- QueueStatusAdd,
- QueueStatusError,
- QueueStatusFinishWithError,
- QueueStatusFinish
- }
- public enum TaskStatus {
- TaskStatusStop,
- TaskStatusStart,
- TaskStatusError,
- TaskStatusWait,
- TaskStatusFinish,
- TaskStatusCancel,
- }
- public UIUpdateListener uiUpdateListener;
- public interface UIUpdateListener {
- void onProgress(long index, double percentage);
- void updateCell(long index, Bundle taskinfo);
- void updateList();
- // void onFinish(int code, String res/*, HashMap<String, List<String>> headers*/);
- }
- // class Poll implements Runnable {
- // public void run() {
- // // while (queue.size()>0) {
- // while (!operation_queue.isEmpty()) {
- // System.out.println(operation_queue.poll());
- // }
- // latch.countDown();
- // }
- // }
- public RAUploadManager()
- {
- queue_status = QueueStatus.QueueStatusDefault;
- SharedPreferences UMSetting = RedAntApplication.getInstance()
- .getSharedPreferences("UploadManager", 0);
- if(UMSetting!=null)
- {
- autoStart = UMSetting.getBoolean("auto_upload",true);
- removeFinish = UMSetting.getBoolean("auto_rm_finish",true);
- removeError = UMSetting.getBoolean("auto_rm_error",false);
- maxRetry = UMSetting.getInt("retry_count",2);
- newtaskStatus = TaskStatus.values()[UMSetting.getInt("newtask_status",TaskStatus.TaskStatusWait.ordinal())];
- maxThread = UMSetting.getInt("max_thread",3);
- }
- operation_queue = new RAOperationQueue();
- operation_queue.setCallback(new RAOperationQueue.OperationCallback() {
- @Override
- public Boolean operate(final Bundle taskinfo) {
- boolean ret=false;
- String path=taskinfo.getString("path");
- String url=taskinfo.getString("url")+""+URL_UPLOAD;
- JSONObject result=Network.UploadImage(path, taskinfo.getBundle("params"), url, new Network.FileUploadListener() {
- @Override
- public boolean interupt() {
- // if(taskinfo.getBoolean("iscancel",false))
- // return false;
- return taskinfo.getBoolean("iscancel",false);
- }
- @Override
- public void onProgress(long pro, double percentage) {
- synchronized(this){
- Log.d("", "onProgress: " + percentage);
- taskinfo.putDouble("progress",percentage);
- if (uiUpdateListener!=null) {
- int index = arr_queue.indexOf(taskinfo);
- // uiUpdateListener.onProgress(index,percentage);
- uiUpdateListener.updateCell(index,taskinfo);
- }
- }
- }
- @Override
- public void onFinish(int code, String res) {
- Log.d("", "onFinish: ");
- }
- });
- int r = 0;
- try {
- r = result.getInt("result");
- String rmsg=result.getString("msg");
- if(r==2|| r==RESULT_BARCODE_ERROR)
- {
- taskinfo.putInt("status",TaskStatus.TaskStatusFinish.ordinal());
- if(r==2)
- taskinfo.putString("msg","upload successful");
- else
- taskinfo.putString("msg","warring: "+rmsg );
- }
- else
- {
- if(taskinfo.getInt("retry",0)>=maxRetry)
- {
- taskinfo.putInt("status",TaskStatus.TaskStatusError.ordinal());
- taskinfo.putDouble("progress",0.0);
- taskinfo.putString("msg",rmsg);
- }
- else
- {
- taskinfo.putInt("retry",taskinfo.getInt("retry",0)+1);
- taskinfo.putInt("status",TaskStatus.TaskStatusWait.ordinal());
- taskinfo.putDouble("progress",0.0);
- taskinfo.putString("msg","connection lost, retry...");
- ret=true;
- }
- }
- synchronized (this)
- {
- if (uiUpdateListener!=null) {
- int index = arr_queue.indexOf(taskinfo);
- uiUpdateListener.updateCell(index,taskinfo);
- }
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- return ret;
- // int a=0;
- // System.out.println(a+"running tid="+Thread.currentThread().getId());
- // int min=1000;
- // int max=5000;
- // int sleep=new Random().nextInt(max)%(max-min+1) + min;
- // try{
- // Thread.currentThread().sleep(sleep);
- // }catch(InterruptedException ie){
- // ie.printStackTrace();
- // }
- // System.out.println(a+" "+sleep+" finish tid="+Thread.currentThread().getId());
- }
- @Override
- public void operateFinish(Bundle taskinfo) {
- TaskStatus status= TaskStatus.values()[taskinfo.getInt("status",0)];
- boolean removefromlist=false;
- if (status==TaskStatus.TaskStatusFinish&&removeFinish)
- removefromlist=true;
- else if (status==TaskStatus.TaskStatusError&&removeError)
- removefromlist=true;
- if(removefromlist)
- {
- synchronized (this)
- {
- arr_queue.remove(taskinfo);
- uiUpdateListener.updateList();
- }
- }
- }
- });
- // operation_queue = new List<Bundle>() {};
- loadTask();
- }
- private void loadTask()
- {
- stopAllTasks();
- arr_queue = new ArrayList<Bundle>();
- // 此处缺少读取持久话保存任务队列的实现。
- };
- public void addTask(Bundle task)
- {
- arr_queue.add(task);
- if(newtaskStatus== TaskStatus.TaskStatusWait)
- {
- startTask(task);
- }
- };
- public void addTasks(ArrayList<Bundle> tasks)
- {
- arr_queue.addAll(tasks);
- if(newtaskStatus== TaskStatus.TaskStatusWait)
- {
- for (Bundle task:tasks)
- {
- startTask(task);
- }
- }
- };
- public void startTask(Bundle task)
- {
- operation_queue.addOperation(task);
- };
- public void removeTask(Bundle task)
- {
- arr_queue.remove(task);
- String path = filePath(task);
- File file = new File(path);
- if(file.exists())
- {
- file.delete();
- }
- };
- public void removeTasks(List<Bundle> tasks)
- {
- arr_queue.removeAll(tasks);
- for(Bundle task:tasks)
- {
- String path = filePath(task);
- File file = new File(path);
- if(file.exists())
- {
- file.delete();
- }
- }
- };
- public void stopAllTasks()
- {
- };
- public void stopTask(Bundle task)
- {
- if(task.getInt("status")!= TaskStatus.TaskStatusStart.ordinal()&&task.getInt("status")!= TaskStatus.TaskStatusWait.ordinal())
- return;
- task.putBoolean("iscancel",true);
- // long tid=task.getLong("tid",-1);
- // if(tid>0)
- // {
- //
- //
- // }
- // task.tet("tid",Thread.currentThread().getId());
- // RAUploadOperation
- }
- public void saveTasks()
- {
- SharedPreferences pref = RedAntApplication.getInstance()
- .getSharedPreferences("RA Image", 0);
- SharedPreferences.Editor editor = pref.edit();
- try {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ObjectOutputStream oos = new ObjectOutputStream(baos);
- oos.writeObject(arr_queue);
- String personBase64 = android.util.Base64.encodeToString(baos.toByteArray(), android.util.Base64.DEFAULT);//new String(Base64.encodeBase64(baos.toByteArray()));
- }
- catch (Exception e)
- {
- }
- // if (m_swSave.isChecked()&&!TextUtils.isEmpty(encryptPass)&&!TextUtils.isEmpty(encryptUser))
- // {
- // editor.putString("user", encryptUser);
- // editor.putString("password", encryptPass);
- // editor.putBoolean("kepppass", true);
- // }
- // else
- // {
- // editor.putString("user", null);
- // editor.putString("password", null);
- // editor.putBoolean("kepppass", false);
- // }
- //
- // editor.puts
- //
- // editor.commit();
- };
- private String filePath(Bundle task)
- {
- // String path = Environment.getExternalStorageDirectory().getPath();
- // path+="/"+task.getString("path");
- // path+="/"+task.getString("file");
- return task.getString("path","");
- }
- }
|