ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
TMBOY
Date:
Tue Jul 18 16:34:48 2017 +0800
Revision:
45:2aa9f933c8d2
?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TMBOY 45:2aa9f933c8d2 1 /*
TMBOY 45:2aa9f933c8d2 2 * Copyright (c) 2017 Baidu, Inc. All Rights Reserved.
TMBOY 45:2aa9f933c8d2 3 *
TMBOY 45:2aa9f933c8d2 4 * Licensed under the Apache License, Version 2.0 (the "License");
TMBOY 45:2aa9f933c8d2 5 * you may not use this file except in compliance with the License.
TMBOY 45:2aa9f933c8d2 6 * You may obtain a copy of the License at
TMBOY 45:2aa9f933c8d2 7 *
TMBOY 45:2aa9f933c8d2 8 * http://www.apache.org/licenses/LICENSE-2.0
TMBOY 45:2aa9f933c8d2 9 *
TMBOY 45:2aa9f933c8d2 10 * Unless required by applicable law or agreed to in writing, software
TMBOY 45:2aa9f933c8d2 11 * distributed under the License is distributed on an "AS IS" BASIS,
TMBOY 45:2aa9f933c8d2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
TMBOY 45:2aa9f933c8d2 13 * See the License for the specific language governing permissions and
TMBOY 45:2aa9f933c8d2 14 * limitations under the License.
TMBOY 45:2aa9f933c8d2 15 */
TMBOY 45:2aa9f933c8d2 16 package com.baidu.duer.dcs.http;
TMBOY 45:2aa9f933c8d2 17
TMBOY 45:2aa9f933c8d2 18 import com.baidu.duer.dcs.http.builder.GetBuilder;
TMBOY 45:2aa9f933c8d2 19 import com.baidu.duer.dcs.http.builder.PostMultipartBuilder;
TMBOY 45:2aa9f933c8d2 20 import com.baidu.duer.dcs.http.callback.DcsCallback;
TMBOY 45:2aa9f933c8d2 21 import com.baidu.duer.dcs.http.intercepter.LoggingInterceptor;
TMBOY 45:2aa9f933c8d2 22 import com.baidu.duer.dcs.http.request.RequestCall;
TMBOY 45:2aa9f933c8d2 23 import com.baidu.duer.dcs.http.utils.Platform;
TMBOY 45:2aa9f933c8d2 24
TMBOY 45:2aa9f933c8d2 25 import java.io.IOException;
TMBOY 45:2aa9f933c8d2 26 import java.util.concurrent.TimeUnit;
TMBOY 45:2aa9f933c8d2 27
TMBOY 45:2aa9f933c8d2 28 import okhttp3.Call;
TMBOY 45:2aa9f933c8d2 29 import okhttp3.OkHttpClient;
TMBOY 45:2aa9f933c8d2 30 import okhttp3.Response;
TMBOY 45:2aa9f933c8d2 31
TMBOY 45:2aa9f933c8d2 32 /**
TMBOY 45:2aa9f933c8d2 33 * 网络请求-单例
TMBOY 45:2aa9f933c8d2 34 * <p>
TMBOY 45:2aa9f933c8d2 35 * Created by zhangyan@baidu.com on 2017/5/15.
TMBOY 45:2aa9f933c8d2 36 */
TMBOY 45:2aa9f933c8d2 37 public class DcsHttpManager {
TMBOY 45:2aa9f933c8d2 38 // 默认时间,比如超时时间
TMBOY 45:2aa9f933c8d2 39 public static final long DEFAULT_MILLISECONDS = 60 * 1000L;
TMBOY 45:2aa9f933c8d2 40 private OkHttpClient mOkHttpClient;
TMBOY 45:2aa9f933c8d2 41 private Platform mPlatform;
TMBOY 45:2aa9f933c8d2 42
TMBOY 45:2aa9f933c8d2 43 private static class DcsHttpManagerHolder {
TMBOY 45:2aa9f933c8d2 44 private static final DcsHttpManager INSTANCE = new DcsHttpManager();
TMBOY 45:2aa9f933c8d2 45 }
TMBOY 45:2aa9f933c8d2 46
TMBOY 45:2aa9f933c8d2 47 public static DcsHttpManager getInstance() {
TMBOY 45:2aa9f933c8d2 48 return DcsHttpManagerHolder.INSTANCE;
TMBOY 45:2aa9f933c8d2 49 }
TMBOY 45:2aa9f933c8d2 50
TMBOY 45:2aa9f933c8d2 51 private DcsHttpManager() {
TMBOY 45:2aa9f933c8d2 52 if (mOkHttpClient == null) {
TMBOY 45:2aa9f933c8d2 53 // http数据log,日志中打印出HTTP请求&响应数据
TMBOY 45:2aa9f933c8d2 54 // HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
TMBOY 45:2aa9f933c8d2 55 // 包含header、body数据
TMBOY 45:2aa9f933c8d2 56 mOkHttpClient = new OkHttpClient.Builder()
TMBOY 45:2aa9f933c8d2 57 .retryOnConnectionFailure(false)
TMBOY 45:2aa9f933c8d2 58 .readTimeout(DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
TMBOY 45:2aa9f933c8d2 59 .writeTimeout(DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
TMBOY 45:2aa9f933c8d2 60 .connectTimeout(DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
TMBOY 45:2aa9f933c8d2 61 // .addInterceptor(new RetryInterceptor(3))
TMBOY 45:2aa9f933c8d2 62 .addInterceptor(new LoggingInterceptor())
TMBOY 45:2aa9f933c8d2 63 // .connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
TMBOY 45:2aa9f933c8d2 64 .build();
TMBOY 45:2aa9f933c8d2 65 }
TMBOY 45:2aa9f933c8d2 66 mPlatform = Platform.get();
TMBOY 45:2aa9f933c8d2 67 }
TMBOY 45:2aa9f933c8d2 68
TMBOY 45:2aa9f933c8d2 69 public OkHttpClient getOkHttpClient() {
TMBOY 45:2aa9f933c8d2 70 return mOkHttpClient;
TMBOY 45:2aa9f933c8d2 71 }
TMBOY 45:2aa9f933c8d2 72
TMBOY 45:2aa9f933c8d2 73 public static GetBuilder get() {
TMBOY 45:2aa9f933c8d2 74 return new GetBuilder();
TMBOY 45:2aa9f933c8d2 75 }
TMBOY 45:2aa9f933c8d2 76
TMBOY 45:2aa9f933c8d2 77 public static PostMultipartBuilder post() {
TMBOY 45:2aa9f933c8d2 78 return new PostMultipartBuilder();
TMBOY 45:2aa9f933c8d2 79 }
TMBOY 45:2aa9f933c8d2 80
TMBOY 45:2aa9f933c8d2 81 public void execute(final RequestCall requestCall, DcsCallback dcsCallback) {
TMBOY 45:2aa9f933c8d2 82
TMBOY 45:2aa9f933c8d2 83 if (dcsCallback == null) {
TMBOY 45:2aa9f933c8d2 84 dcsCallback = DcsCallback.backDefaultCallBack;
TMBOY 45:2aa9f933c8d2 85 }
TMBOY 45:2aa9f933c8d2 86 final DcsCallback finalDCSCallback = dcsCallback;
TMBOY 45:2aa9f933c8d2 87 final int id = requestCall.getOkHttpRequest().getId();
TMBOY 45:2aa9f933c8d2 88
TMBOY 45:2aa9f933c8d2 89 requestCall.getCall().enqueue(new okhttp3.Callback() {
TMBOY 45:2aa9f933c8d2 90 @Override
TMBOY 45:2aa9f933c8d2 91 public void onFailure(Call call, final IOException e) {
TMBOY 45:2aa9f933c8d2 92 sendFailResultCallback(call, e, finalDCSCallback, id);
TMBOY 45:2aa9f933c8d2 93 }
TMBOY 45:2aa9f933c8d2 94
TMBOY 45:2aa9f933c8d2 95 @Override
TMBOY 45:2aa9f933c8d2 96 public void onResponse(final Call call, final Response response) {
TMBOY 45:2aa9f933c8d2 97 try {
TMBOY 45:2aa9f933c8d2 98 if (call.isCanceled()) {
TMBOY 45:2aa9f933c8d2 99 sendFailResultCallback(call, new IOException("Canceled!"), finalDCSCallback, id);
TMBOY 45:2aa9f933c8d2 100 return;
TMBOY 45:2aa9f933c8d2 101 }
TMBOY 45:2aa9f933c8d2 102 if (!finalDCSCallback.validateResponse(response, id)) {
TMBOY 45:2aa9f933c8d2 103 IOException exception = new IOException("request failed , response's code is : "
TMBOY 45:2aa9f933c8d2 104 + response.code());
TMBOY 45:2aa9f933c8d2 105 sendFailResultCallback(call, exception, finalDCSCallback, id);
TMBOY 45:2aa9f933c8d2 106 return;
TMBOY 45:2aa9f933c8d2 107 }
TMBOY 45:2aa9f933c8d2 108 sendSuccessResultCallback(response, finalDCSCallback, id);
TMBOY 45:2aa9f933c8d2 109 Object o = finalDCSCallback.parseNetworkResponse(response, id);
TMBOY 45:2aa9f933c8d2 110 } catch (Exception e) {
TMBOY 45:2aa9f933c8d2 111 sendFailResultCallback(call, e, finalDCSCallback, id);
TMBOY 45:2aa9f933c8d2 112 } finally {
TMBOY 45:2aa9f933c8d2 113 if (response.body() != null) {
TMBOY 45:2aa9f933c8d2 114 response.body().close();
TMBOY 45:2aa9f933c8d2 115 }
TMBOY 45:2aa9f933c8d2 116 }
TMBOY 45:2aa9f933c8d2 117 }
TMBOY 45:2aa9f933c8d2 118 });
TMBOY 45:2aa9f933c8d2 119 }
TMBOY 45:2aa9f933c8d2 120
TMBOY 45:2aa9f933c8d2 121 /**
TMBOY 45:2aa9f933c8d2 122 * 网络请求失败处理
TMBOY 45:2aa9f933c8d2 123 *
TMBOY 45:2aa9f933c8d2 124 * @param call okhttp的请求call
TMBOY 45:2aa9f933c8d2 125 * @param e 异常信息
TMBOY 45:2aa9f933c8d2 126 * @param dcsCallback 回调
TMBOY 45:2aa9f933c8d2 127 * @param id 请求标识
TMBOY 45:2aa9f933c8d2 128 */
TMBOY 45:2aa9f933c8d2 129 private void sendFailResultCallback(final Call call,
TMBOY 45:2aa9f933c8d2 130 final Exception e,
TMBOY 45:2aa9f933c8d2 131 final DcsCallback dcsCallback,
TMBOY 45:2aa9f933c8d2 132 final int id) {
TMBOY 45:2aa9f933c8d2 133 if (dcsCallback == null) {
TMBOY 45:2aa9f933c8d2 134 return;
TMBOY 45:2aa9f933c8d2 135 }
TMBOY 45:2aa9f933c8d2 136 mPlatform.execute(new Runnable() {
TMBOY 45:2aa9f933c8d2 137 @Override
TMBOY 45:2aa9f933c8d2 138 public void run() {
TMBOY 45:2aa9f933c8d2 139 dcsCallback.onError(call, e, id);
TMBOY 45:2aa9f933c8d2 140 dcsCallback.onAfter(id);
TMBOY 45:2aa9f933c8d2 141 }
TMBOY 45:2aa9f933c8d2 142 });
TMBOY 45:2aa9f933c8d2 143 }
TMBOY 45:2aa9f933c8d2 144
TMBOY 45:2aa9f933c8d2 145 /**
TMBOY 45:2aa9f933c8d2 146 * 网络请求成功处理
TMBOY 45:2aa9f933c8d2 147 *
TMBOY 45:2aa9f933c8d2 148 * @param object object 返回的对象
TMBOY 45:2aa9f933c8d2 149 * @param dcsCallback dcsCallback 回调
TMBOY 45:2aa9f933c8d2 150 * @param id id 请求标识
TMBOY 45:2aa9f933c8d2 151 */
TMBOY 45:2aa9f933c8d2 152 private void sendSuccessResultCallback(final Object object,
TMBOY 45:2aa9f933c8d2 153 final DcsCallback dcsCallback,
TMBOY 45:2aa9f933c8d2 154 final int id) {
TMBOY 45:2aa9f933c8d2 155 if (dcsCallback == null) {
TMBOY 45:2aa9f933c8d2 156 return;
TMBOY 45:2aa9f933c8d2 157 }
TMBOY 45:2aa9f933c8d2 158 mPlatform.execute(new Runnable() {
TMBOY 45:2aa9f933c8d2 159 @Override
TMBOY 45:2aa9f933c8d2 160 public void run() {
TMBOY 45:2aa9f933c8d2 161 dcsCallback.onResponse(object, id);
TMBOY 45:2aa9f933c8d2 162 dcsCallback.onAfter(id);
TMBOY 45:2aa9f933c8d2 163 }
TMBOY 45:2aa9f933c8d2 164 });
TMBOY 45:2aa9f933c8d2 165 }
TMBOY 45:2aa9f933c8d2 166
TMBOY 45:2aa9f933c8d2 167 /**
TMBOY 45:2aa9f933c8d2 168 * 取消请求
TMBOY 45:2aa9f933c8d2 169 *
TMBOY 45:2aa9f933c8d2 170 * @param tag 请求的时候设置的tag
TMBOY 45:2aa9f933c8d2 171 */
TMBOY 45:2aa9f933c8d2 172 public void cancelTag(Object tag) {
TMBOY 45:2aa9f933c8d2 173 for (Call call : mOkHttpClient.dispatcher().queuedCalls()) {
TMBOY 45:2aa9f933c8d2 174 if (tag.equals(call.request().tag())) {
TMBOY 45:2aa9f933c8d2 175 call.cancel();
TMBOY 45:2aa9f933c8d2 176 }
TMBOY 45:2aa9f933c8d2 177 }
TMBOY 45:2aa9f933c8d2 178 for (Call call : mOkHttpClient.dispatcher().runningCalls()) {
TMBOY 45:2aa9f933c8d2 179 if (tag.equals(call.request().tag())) {
TMBOY 45:2aa9f933c8d2 180 call.cancel();
TMBOY 45:2aa9f933c8d2 181 }
TMBOY 45:2aa9f933c8d2 182 }
TMBOY 45:2aa9f933c8d2 183 }
TMBOY 45:2aa9f933c8d2 184 }