|
@@ -0,0 +1,120 @@
|
|
|
+package com.cr.network
|
|
|
+
|
|
|
+import com.cr.data.*
|
|
|
+import com.cr.models.iNetDataModel
|
|
|
+import okhttp3.*
|
|
|
+import okhttp3.MediaType.Companion.toMediaType
|
|
|
+import okhttp3.RequestBody.Companion.toRequestBody
|
|
|
+import org.json.JSONArray
|
|
|
+import org.json.JSONException
|
|
|
+import org.json.JSONObject
|
|
|
+import java.io.IOException
|
|
|
+import java.util.concurrent.TimeUnit
|
|
|
+
|
|
|
+/**
|
|
|
+ * 操作系统:MAC系统
|
|
|
+ * 创建者:王成
|
|
|
+ * 创建日期:2023/4/8 14:39
|
|
|
+ * 描述:网络通信
|
|
|
+ */
|
|
|
+class TCPDataTask {
|
|
|
+ /**
|
|
|
+ * 对外接口
|
|
|
+ */
|
|
|
+ interface OnChangeListener{
|
|
|
+ fun onSuccess(jsonArray:JSONArray)
|
|
|
+ fun onFailed(message:String)
|
|
|
+ }
|
|
|
+ // todo: 2023/4/8 网络连接
|
|
|
+ var okHttp: OkHttpClient? = null
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 单例方法
|
|
|
+ */
|
|
|
+ companion object{
|
|
|
+ fun getInstance() = InstanceHelper.self
|
|
|
+ }
|
|
|
+
|
|
|
+ object InstanceHelper{
|
|
|
+ var self = TCPDataTask()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化
|
|
|
+ * @constructor
|
|
|
+ */
|
|
|
+ constructor(){
|
|
|
+ /**
|
|
|
+ * 初始化连接
|
|
|
+ */
|
|
|
+ okHttp = OkHttpClient.Builder()
|
|
|
+ .connectTimeout(6000,TimeUnit.MINUTES)
|
|
|
+ .readTimeout(6000,TimeUnit.MINUTES)
|
|
|
+ .writeTimeout(6000,TimeUnit.MINUTES)
|
|
|
+ .build()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送JSON数据
|
|
|
+ * @param url String 服务地址
|
|
|
+ * @param iModel iNetDataModel<T> 发送数据
|
|
|
+ * @param callback OnChangeListener 监听
|
|
|
+ */
|
|
|
+ fun<T> sendJSON(url:String,iModel:iNetDataModel<T>,callback:OnChangeListener){
|
|
|
+ // todo: 2023/4/8 确定传输类型
|
|
|
+ var mediaType:MediaType = "application/json;charset=utf-8".toMediaType()
|
|
|
+ // todo: 2023/4/8 创建数据传输内容
|
|
|
+ var requestBody:RequestBody = iModel.toJSON().toRequestBody(mediaType)
|
|
|
+ var request:Request = Request.Builder().url(url).post(requestBody).build()
|
|
|
+ // todo: 2023/4/8 连接发送
|
|
|
+ okHttp?.newCall(request)?.enqueue(object :Callback{
|
|
|
+ // todo: 2023/4/8 失败
|
|
|
+ override fun onFailure(call: Call, e: IOException) {
|
|
|
+ var errMessage: String? = e.message
|
|
|
+ if(callback != null) callback.onFailed(errMessage!!)
|
|
|
+ }
|
|
|
+ // todo: 2023/4/8 成功
|
|
|
+ override fun onResponse(call: Call, response: Response) {
|
|
|
+ if(response.code == 200){
|
|
|
+ try{
|
|
|
+ var successMessage:String = response.body!!.string()
|
|
|
+ checkJSON(successMessage,callback)
|
|
|
+ }catch (e:java.lang.Exception){
|
|
|
+ if(callback != null) callback.onFailed(e.message!!)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析JSON数据
|
|
|
+ * @param JSON String JSON字符串
|
|
|
+ * @param callback OnChangeListener
|
|
|
+ */
|
|
|
+ private fun checkJSON(JSON: String,callback:OnChangeListener) {
|
|
|
+ val jsonObject: JSONObject
|
|
|
+ try {
|
|
|
+ jsonObject = JSONObject(JSON)
|
|
|
+ val res = jsonObject.optString("res")
|
|
|
+ if (res == RES_ERR_FLAG) {
|
|
|
+ val resObj = jsonObject.getJSONArray(RES_CONTENT)
|
|
|
+ if (callback != null) callback.onFailed(
|
|
|
+ resObj.getJSONObject(0).optString(RES_ERR_DES)
|
|
|
+ )
|
|
|
+ } else if (res == RES_NULL_FLAG) {
|
|
|
+ val resObj = jsonObject.getJSONArray(RES_CONTENT)
|
|
|
+ if (callback != null) callback.onFailed(
|
|
|
+ resObj.getJSONObject(0).optString(RES_ERR_DES)
|
|
|
+ )
|
|
|
+ } else if (res == RES_SUCCESS_FLAG) {
|
|
|
+ val resObj = jsonObject.getJSONArray(RES_CONTENT)
|
|
|
+ if (callback != null) callback.onSuccess(resObj)
|
|
|
+ } else {
|
|
|
+ if (callback != null) callback.onFailed("未知错误!")
|
|
|
+ }
|
|
|
+ } catch (ex: JSONException) {
|
|
|
+ if (callback != null) callback.onFailed("数据解析错误!")
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|