HttpQueue.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.hotent.im.network;
  2. import org.springframework.web.multipart.MultipartFile;
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. /**
  9. * Created by yanhongliang on 16/4/25.
  10. */
  11. public class HttpQueue {
  12. public interface OnComplete {
  13. void onComplete(Response response);
  14. }
  15. /**
  16. * 获取队列中,当前网络请求数量
  17. * @return 返回当前网络请求数量
  18. */
  19. public static int getCount() {
  20. return datas.size();
  21. }
  22. /**
  23. * 清空队列
  24. */
  25. public static void clean() {
  26. if (request != null) {
  27. request.cancel();
  28. datas.clear();
  29. request = null;
  30. }
  31. }
  32. private static ArrayList<Data> datas;
  33. private static AbstractHttpPost request;
  34. static {
  35. datas = new ArrayList<>();
  36. }
  37. public static void addRequest(
  38. String actionUrl,
  39. Map<String, Object> params,
  40. HashMap<String, MultipartFile> files,
  41. OnComplete onComplete) {
  42. datas.add(new Data(actionUrl, params,files, onComplete));
  43. send();
  44. }
  45. private static void send() {
  46. if (datas.size() == 0) {
  47. return;
  48. }
  49. if (request != null) {
  50. return;
  51. }
  52. final Data data = datas.remove(0);
  53. request = new AbstractHttpPost() {
  54. @Override
  55. public void complete(Response response) {
  56. data.onComplete.onComplete(response);
  57. request = null;
  58. send();
  59. }
  60. };
  61. request.post(data.actionUrl, data.params, data.files);
  62. }
  63. private static class Data {
  64. String actionUrl;
  65. Map<String, Object> params;
  66. HashMap<String, MultipartFile> files;
  67. OnComplete onComplete;
  68. Data(String url, Map<String, Object> params, HashMap<String, MultipartFile> files, OnComplete onComplete) {
  69. this.actionUrl = url;
  70. this.params = params;
  71. this.files = files;
  72. this.onComplete = onComplete;
  73. }
  74. }
  75. }