Commit 827d0a40 authored by p x's avatar p x
Browse files

集成一部分http

parent aa341738
package com.sd.shupathwebview.utils
package com.sd.cavphmi.utils
import android.content.ContentValues
import android.content.Context
......@@ -49,26 +49,29 @@ object FileIoUtils {
suspend fun getAssetMock(context: Context, fileName: String, dst: MutableList<String>): Int {
val assetManager = context.assets
var bf: BufferedReader? = null
try {
val inputReader = InputStreamReader(assetManager.open(fileName))
bf = BufferedReader(inputReader)
var line = ""
while (!bf.run {
line = readLine()
return@run line
}.isNullOrEmpty()) {
dst.add(line)
return withContext(Dispatchers.IO) {
val assetManager = context.assets
var bf: BufferedReader? = null
try {
val inputReader = InputStreamReader(assetManager.open(fileName))
bf = BufferedReader(inputReader)
var line = ""
while (!bf.run {
line = readLine()
return@run line
}.isNullOrEmpty()) {
dst.add(line)
}
bf?.close()
return@withContext 1
} catch (e: IOException) {
e.printStackTrace()
} finally {
bf?.close()
}
bf?.close()
return 1
} catch (e: IOException) {
e.printStackTrace()
} finally {
bf?.close()
return@withContext 0
}
return 0
}
/**
......
package com.ltzw.adasdriver.utils
package com.sd.cavphmi.utils
import android.os.Build
......
......@@ -3,7 +3,7 @@ package com.sd.cavphmi.utils
object MyContants {
const val IS_DEBUG = true
var HOST = if (IS_DEBUG) "https://sip-avp.isungent.cn:8443" else ""
var HOST = if (IS_DEBUG) "https://faw.cuscavp.cn:8443" else ""
// var PORT = if (IS_DEBUG) "123" else "34534"
//wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100 长春
......@@ -11,5 +11,7 @@ object MyContants {
if (IS_DEBUG) "wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100" else ""
/***已经**/
const val ALREADT_ONCE = -1
}
\ No newline at end of file
......@@ -9,6 +9,9 @@ import android.net.Uri
import android.os.Build
import android.os.PowerManager
import android.provider.Settings
import android.telephony.PhoneStateListener
import android.telephony.SignalStrength
import android.telephony.TelephonyCallback
import android.telephony.TelephonyManager
import android.view.View
import android.view.WindowManager
......@@ -17,7 +20,6 @@ import android.widget.EditText
import androidx.annotation.RequiresPermission
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import com.ltzw.adasdriver.utils.MobileUtils
import java.io.File
......@@ -69,7 +71,8 @@ object SystemUtils {
fun getAppVersionName(context: Context): String {
var version = "0"
try {
version = context.packageManager.getPackageInfo(context.packageName, 0).versionName.toString()
version =
context.packageManager.getPackageInfo(context.packageName, 0).versionName.toString()
} catch (e: PackageManager.NameNotFoundException) {
throw RuntimeException("the application not found")
}
......@@ -208,6 +211,7 @@ object SystemUtils {
"doc" -> type = "application/msword"
"docx" -> type =
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"xls", "xlsx" -> type = "application/vnd.ms-excel"
"txt" -> type = "text/plain"
else -> type = "*/*"
......@@ -242,9 +246,11 @@ object SystemUtils {
"ppt" -> type = "application/vnd.ms-powerpoint"
"pptx" -> type =
"application/vnd.openxmlformats-officedocument.presentationml.presentation"
"doc" -> type = "application/msword"
"docx" -> type =
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"xls" -> type = "application/vnd.ms-excel"
"xlsx" -> type = "application/vnd.ms-excel"
"txt" -> type = "text/plain"
......@@ -293,4 +299,13 @@ object SystemUtils {
}
fun getMobileNetworkSignal(context: Context) :Int{
var telephonyManager =
context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
var signalStrength = telephonyManager.signalStrength
var list =signalStrength?.cellSignalStrengths
return 1
}
}
\ No newline at end of file
package com.sd.cavphmi.viewmodels
import android.content.Context
import android.telephony.PhoneStateListener
import android.telephony.SignalStrength
import android.telephony.TelephonyCallback
import android.telephony.TelephonyManager
import androidx.databinding.ObservableField
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
......@@ -8,36 +12,36 @@ import androidx.lifecycle.viewModelScope
import com.google.gson.Gson
import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.ReqBean
import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.bean.VToXImgBean
import com.sd.cavphmi.bean.VehicleStats
import com.sd.cavphmi.bean.WebSetBean
import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.repositorys.SpaceNoRepo
import com.sd.cavphmi.utils.DateUtils
import com.sd.cavphmi.utils.FileIoUtils
import com.sd.cavphmi.utils.MyContants
import com.sd.cavphmi.utils.SystemUtils
import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.MyWebSocketClient
import com.sd.shupathwebview.utils.FileIoUtils
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.java_websocket.handshake.ServerHandshake
import protocol.Response
import java.net.URI
import java.nio.ByteBuffer
import java.util.Timer
import java.util.TimerTask
import javax.inject.Inject
@HiltViewModel
class MainVm @Inject constructor(
@ApplicationContext var context: Context,
@ApplicationContext private var context: Context,
private var parseSocketRepo: ParseSocketRepo
// var spaceNoRepo: SpaceNoRepo
// var spaceNoRepo: SpaceNoRepo,
) : MyBaseViewModel() {
private var client: MyWebSocketClient? = null
......@@ -54,19 +58,64 @@ class MainVm @Inject constructor(
//感知目标物
var targetPre = MutableLiveData<PerTarget>()
//订单信息
var orderBean = MutableLiveData<OrderBean>()
//驾驶模式
var driveMode = ObservableField("")
//航向角
var heading = ObservableField(550)
//速度
var speed = ObservableField(0f)
fun startWS() {
val httpHeaders = mutableMapOf<String, String>()
httpHeaders.put("Cookie", "username=nemo")
//当前时间
var curTime = ObservableField("")
//网络延时时间差
var timeOutDiff = ObservableField(-1)
// Timer 可用于执行延迟任务或循环任务
private var curTimer = Timer()
// Timer 可用于执行延迟任务或循环任务
private var netSingTimer = Timer()
/***获取当前时间**/
fun getCurrentTime() {
curTimer.schedule(object : TimerTask() {
override fun run() {
var time = DateUtils.getCurrentTime12HourFormat()
curTime.set(time)
}
}, 2000, 1000 * 60)
}
/***获取信号强度**/
fun getMobileNetworkSignal() {
netSingTimer.schedule(object : TimerTask() {
override fun run() {
viewModelScope.launch {
var result = parseSocketRepo.getTimeOut()
when (result) {
is MyResult.Success<Int> -> {
timeOutDiff.set(result.data)
// println("-------时间差---- = ${result.data}")
}
else -> {
// println("-------Error---- = ${result.msg}")
}
}
}
}
}, 5000, 1000 * 60)
}
fun startWS() {
// val httpHeaders = mutableMapOf<String, String>()
// httpHeaders.put("Cookie", "username=nemo")
try {
client = MyWebSocketClient(URI(MyContants.WS_HOST))
client?.onSocketCb = onSocketCb
......@@ -77,7 +126,15 @@ class MainVm @Inject constructor(
}
}
fun closeWS() {
/***清理资源***/
fun cleanRes() {
curTimer.cancel()
netSingTimer.cancel()
closeWS()
}
private fun closeWS() {
if (client?.isOpen ?: false) {
client?.close()
}
......@@ -86,7 +143,6 @@ class MainVm @Inject constructor(
private var onSocketCb = object : MyWebSocketClient.OnSocketCb {
override fun onOpen(handshakedata: ServerHandshake?) {
println("--------Thread.currentThread() = ${Thread.currentThread()}")
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
......@@ -101,17 +157,29 @@ class MainVm @Inject constructor(
override fun onVehicle(res: Response.SocketResponse) {
viewModelScope.launch {
val bean =
parseSocketRepo.genDataBean(res.data, CarVehicle::class.java)
parseSocketRepo.parseDataBean(res.data, CarVehicle::class.java)
println("---车辆位姿数据 = ${bean}")
var result =
parseSocketRepo.getOrderData(bean.vehicleData?.get(0)?.vehiclePlate ?: "")
when (result) {
is MyResult.Success<OrderBean> -> {
println("-------订单信息---- = ${result.data}")
orderBean.value = result.data
}
else -> {
// println("-------Error---- = ${result.msg}")
}
}
carVehicle.value = bean
FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
}
}
override fun onVehicleStats(res: Response.SocketResponse) {
viewModelScope.launch {
val bean =
parseSocketRepo.genDataBean(res.data, VehicleStats::class.java)
parseSocketRepo.parseDataBean(res.data, VehicleStats::class.java)
println("---联网车辆状态数据 = ${bean}")
vehicleStat.value = bean
......@@ -121,10 +189,10 @@ class MainVm @Inject constructor(
override fun onTarget(res: Response.SocketResponse) {
viewModelScope.launch {
var bean = parseSocketRepo.genDataBean(res.data, PerTarget::class.java)
var bean = parseSocketRepo.parseDataBean(res.data, PerTarget::class.java)
println("---感知目标物数据 = ${bean}")
targetPre.value = bean
FileIoUtils.writeToFile(gson.toJson(bean), "target.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "target.txt")
}
}
......
package com.sd.cavphmi.viewmodels
import android.content.Context
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.utils.FileIoUtils
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class MockVM @Inject constructor(
@ApplicationContext var context: Context,
private var parseSocketRepo: ParseSocketRepo
) : MyBaseViewModel() {
//车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>()
//订单信息
var orderBean = MutableLiveData<OrderBean>()
fun onVehicleMock() {
viewModelScope.launch {
var dst = mutableListOf<String>()
FileIoUtils.getAssetMock(context, "mock/carvehicle.txt", dst)
dst.forEach { str ->
delay(3000)
val bean =
parseSocketRepo.parseDataBean(str, CarVehicle::class.java)
println("---模拟车辆位姿数据 = ${bean}")
var result =
parseSocketRepo.getOrderData(bean.vehicleData?.get(0)?.vehiclePlate ?: "")
when (result) {
is MyResult.Success<OrderBean> -> {
println("-------订单信息---- = ${result.data}")
orderBean.value=result.data
}
else -> {
// println("-------Error---- = ${result.msg}")
}
}
carVehicle.value = bean
}
}
}
}
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M22,5.7l-4.6,-3.9 -1.3,1.5 4.6,3.9L22,5.7zM7.9,3.4L6.6,1.9 2,5.7l1.3,1.5 4.6,-3.8zM12.5,8L11,8v6l4.7,2.9 0.8,-1.2 -4,-2.4L12.5,8zM12,4c-5,0 -9,4 -9,9s4,9 9,9 9,-4 9,-9 -4,-9 -9,-9zM12,20c-3.9,0 -7,-3.1 -7,-7s3.1,-7 7,-7 7,3.1 7,7 -3.1,7 -7,7z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"/>
<path android:fillColor="@android:color/white" android:pathData="M12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
<solid android:color="#80E4E4EB" />
<stroke
android:width="2dp"
android:color="#c4cdd6" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
......@@ -9,6 +10,10 @@
name="vm"
type="com.sd.cavphmi.viewmodels.MainVm" />
<variable
name="order"
type="com.sd.cavphmi.bean.OrderBean" />
</data>
<RelativeLayout
......@@ -64,8 +69,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:text="场外行驶"
android:textColor="#3c62e3" />
android:textColor="#3c62e3"
app:showAvpStatus="@{order.avpStatus}"
tools:text="场外行驶" />
</LinearLayout>
......@@ -103,17 +109,17 @@
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/xinhao1" />
app:showXinhao="@{vm.timeOutDiff}" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_below="@+id/ll_head"
android:layout_alignParentRight="true"
android:orientation="vertical"
android:src="#907867">
......@@ -151,19 +157,18 @@
android:id="@+id/bt_chewei"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新停车位" />
android:text="停车位变更" />
</LinearLayout>
<RelativeLayout
android:layout_width="280dp"
android:layout_height="wrap_content"
android:layout_height="70dp"
android:layout_centerHorizontal="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:src="@drawable/speed" />
......@@ -173,16 +178,17 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="2dp"
android:layout_marginTop="5dp"
android:text="@{vm.curTime}"
android:textColor="@color/text_black"
tools:text="9:19" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_time"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:textColor="@color/text_black"
android:textSize="12sp"
app:showSpeed="@{vm.speed}"
......@@ -192,6 +198,15 @@
</RelativeLayout>
<include
layout="@layout/order_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_head"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
bind:order="@{order}" />
</RelativeLayout>
</layout>
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="order"
type="com.sd.cavphmi.bean.OrderBean" />
</data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/order_bg"
android:orientation="vertical"
android:padding="15dp"
android:visibility="gone"
app:showOrderLayout="@{order.avpStatus}">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bookmark_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@{order.orderNo}"
android:textColor="@color/text_black"
tools:text="32423427364862386482368462" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/access_alarms_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@{order.durationString}"
android:textColor="@color/text_black"
tools:text="1小时29分钟" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/access_time_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@{order.enterTime}"
android:textColor="@color/text_black"
tools:text="2025-06-18 09:16:51" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/attach_money_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
app:showOrderCost="@{order.actualCost}"
android:textColor="@color/text_black"
tools:text="2025-06-18 09:16:51" />
</LinearLayout>
</LinearLayout>
</layout>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment