Commit dcb7c2a6 authored by p x's avatar p x
Browse files

录像socket推数据

parent 86ea637f
...@@ -40,11 +40,6 @@ class CarPanelBean { ...@@ -40,11 +40,6 @@ class CarPanelBean {
//转向灯 1=left 2=right //转向灯 1=left 2=right
var lights = ObservableField<Int>(-1) var lights = ObservableField<Int>(-1)
/*** 枚举类型:[0..9],1:人工接管(人工驾驶);2:单车自控(自动驾
* 驶);3:云端支持下的人工驾驶;4:云端支持下的自动驾驶;5:非
* 主驾位置人工驾驶(不启用);6:脱离(非自动驾驶行程自动结束下
* 的接管);7:远程驾驶(非现场人工驾驶);8:未处于任何驾驶模式;
* 9:其他未定义状态;0xFF 表示缺省*/
var driveMode = ObservableField("") var driveMode = ObservableField("")
//航向角0.。360 //航向角0.。360
......
package com.sd.cavphmi.bean
/***感知延时**/
data class PreDelay(
val id: String,
val level: Int,
val objects: List<PObject>,
val reportTime: Long,
val startTime: Long,
val type: Int,
val typeName: String
)
data class PObject(
val elevation: Double,
val id: String,
val latitude: Double,
val longitude: Double,
val name: String
)
\ No newline at end of file
package com.sd.cavphmi.bean
/****交通信号灯****/
class TrafficLightBean {
}
\ No newline at end of file
package com.sd.cavphmi.bean
/****交通感知****/
class TrafficPerBean {
}
\ No newline at end of file
package com.sd.cavphmi.bean package com.sd.cavphmi.bean
/**V2x 预警开始***/ /**V2x 预警开始
class V2xStartBean { * {"id":"39709073452974080","objects":[{"id":"269","name":"Vehicle","longitude":117.3470947,"latitude":38.9947742,"elevation":500.0},{"id":"100228","name":"Participants","longitude":117.347007,"latitude":38.994787,"elevation":500.0}],"type":1,"typeName":"前向碰撞预警","level":1,"startTime":1754533787716,"reportTime":1754533797778}
} * ***/
\ No newline at end of file data class V2xStartBean(
val id: String,
val level: Int,
val objects: List<VObject>,////记录具体是哪两个对象发生了预警
val reportTime: Long,
val startTime: Long,
val type: Int,
val typeName: String
)
data class VObject(
val elevation: Double,
val id: String,
val latitude: Double,
val longitude: Double,
val name: String
)
\ No newline at end of file
...@@ -41,6 +41,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() { ...@@ -41,6 +41,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
private val avpMapVM: AvpMapVM by viewModels() private val avpMapVM: AvpMapVM by viewModels()
private lateinit var dialogFragment: ExitAppDialog private lateinit var dialogFragment: ExitAppDialog
//汽车仪表 //汽车仪表
private val carPanelFragment by lazy { CarPanelFragment.newInstance() } private val carPanelFragment by lazy { CarPanelFragment.newInstance() }
...@@ -73,41 +74,47 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() { ...@@ -73,41 +74,47 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
} }
private fun mockBt() { private fun mockBt() {
//联网车辆位姿数据
binding.btVehicle.setOnClickListener { binding.btVehicle.setOnClickListener {
viewModel.subVehicle().observe(this) { viewModel.subVehicle().observe(this) {
// topicVehicle(it) // topicVehicle(it)
} }
} }
binding.btStatus.setOnClickListener {
viewModel.subVehicleStatus().observe(this) {
// println("time = ${time}")
topicVehicleStatus(it)
}
}
//感知目标物 //感知目标物
binding.btTarget.setOnClickListener { binding.btTarget.setOnClickListener {
viewModel.subTarget() viewModel.subTarget()
} }
//v2x 预警
binding.btV2x.setOnClickListener { binding.btV2x.setOnClickListener {
viewModel.subStartV2x() viewModel.subStartV2x()
} }
binding.btV2xend.setOnClickListener { //网联车辆状态
viewModel.subEndV2x() binding.btStatus.setOnClickListener {
} viewModel.subVehicleStatus().observe(this) {
binding.btChewei.setOnClickListener { // println("time = ${time}")
viewModel.subPoints().observe(this) { // topicVehicleStatus(it)
topicvPoints(it)
} }
} }
binding.btAllline.setOnClickListener { //感知延时
viewModel.subLinePlaning() binding.btPredelay.setOnClickListener {
viewModel.subPreDelay()
} }
binding.btJubuline.setOnClickListener { //交通感知事件
viewModel.subPartLine() binding.btTarpre.setOnClickListener {
viewModel.subTrafficPre().observe(this) {
}
} }
binding.btRsi.setOnClickListener { //交通信号灯
viewModel.subRsiEvent() binding.btTarlight.setOnClickListener {
viewModel.subTrafficLight()
} }
// binding.btJubuline.setOnClickListener {
// viewModel.subPartLine()
// }
// binding.btRsi.setOnClickListener {
// viewModel.subRsiEvent()
// }
} }
/**车辆姿态**/ /**车辆姿态**/
......
package com.sd.cavphmi.ui.fragment
import androidx.lifecycle.ViewModelProvider
import com.sd.cavphmi.BR
import com.sd.cavphmi.R
import com.sd.cavphmi.base.BaseFragment
import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.databinding.FragmentMapMainBinding
import com.sd.cavphmi.viewmodels.AvpMapVM
import dagger.hilt.android.AndroidEntryPoint
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
//private const val ARG_PARAM1 = "param1"
//private const val ARG_PARAM2 = "param2"
@AndroidEntryPoint
class MapMainFragment : BaseFragment<FragmentMapMainBinding, AvpMapVM>() {
// private var param1: String? = null
// private var param2: String? = null
//
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// arguments?.let {
// param1 = it.getString(ARG_PARAM1)
// param2 = it.getString(ARG_PARAM2)
// }
// }// // T
override fun getStatuBarColor(): Int {
return -1
}
override fun isAutoStatusBarDarkModeEnable(): Boolean {
return false
}
override fun initContentView(): Int {
return R.layout.fragment_map_main
}
override fun initViewModel(): AvpMapVM {
return ViewModelProvider(this).get(AvpMapVM::class.java)
}
override fun initVariableId(): Int {
return BR.vm
}
override fun initView() {
}
override fun initListener() {
}
override fun getToData() {
}
companion object {
@JvmStatic
fun newInstance() = MapMainFragment()
// @JvmStatic
// fun newInstance(param1: String, param2: String) =
// MapMainFragment().apply {
// arguments = Bundle().apply {
// putString(ARG_PARAM1, param1)
// putString(ARG_PARAM2, param2)
// }
// }
}
}
\ No newline at end of file
package com.sd.cavphmi.utils package com.sd.cavphmi.utils
object MyContants { object MyContants {
const val IS_DEBUG = true // const val IS_DEBUG = true
var HOST = if (IS_DEBUG) "https://faw.cuscavp.cn:8443" else "" var HOST = "https://faw.cuscavp.cn:8443"
var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?"
// var PORT = if (IS_DEBUG) "123" else "34534" // var PORT = if (IS_DEBUG) "123" else "34534"
/***感知目标物***/
var WS_FEEL_TARGET = "${WSHOST}token=111&msgType=1&reType=51world"
/***网联车辆位姿***/ /***网联车辆位姿***/
var WS_VEH_LOC = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=111&msgType=2&reType=51world" var WS_VEH_LOC = "${WSHOST}token=111&msgType=2&reType=51world&vehicleId="
/***V2X预警 vehicleId 传了就是获取某一辆车的预警 ***/
var WS_V2X = "${WSHOST}token=111&msgType=4&reType=51world&vehicleId="
/***网联车辆状态***/
var WS_VEH_STATU = "${WSHOST}token=111&msgType=6&reType=51world&vehicleId="
/***感知延时***/
var WS_PRE_DELAY = "${WSHOST}token=111&msgType=7&intersectionCode="
/***交通(感知)事件***/
var WS_TRAFFIC_PER = "${WSHOST}token=111&msgType=5&intersectionCode=="
/***交通信号灯***/
var WS_TRAFFIC_LIGHT = "${WSHOST}token=111&msgType=3&intersectionCode=="
/***感知目标物***/
var WS_FEEL_TARGET = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=111&msgType=1&reType=51world"
/***已经**/ /***已经**/
const val ALREADT_ONCE = -1 const val ALREADT_ONCE = -1
......
...@@ -2,11 +2,12 @@ package com.sd.cavphmi.viewmodels ...@@ -2,11 +2,12 @@ package com.sd.cavphmi.viewmodels
import android.content.Context import android.content.Context
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.sd.cavphmi.base.MyBaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class AvpMapVM @Inject constructor(@ApplicationContext private var context: Context) : class AvpMapVM @Inject constructor(@ApplicationContext private var context: Context) :
ViewModel() { MyBaseViewModel() {
} }
\ No newline at end of file
package com.sd.cavphmi.viewmodels package com.sd.cavphmi.viewmodels
import android.content.Context import android.content.Context
import androidx.databinding.ObservableField
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
...@@ -16,13 +15,14 @@ import com.sd.cavphmi.bean.ParkBean ...@@ -16,13 +15,14 @@ import com.sd.cavphmi.bean.ParkBean
import com.sd.cavphmi.bean.ParkLinePlan import com.sd.cavphmi.bean.ParkLinePlan
import com.sd.cavphmi.bean.PartLineBean import com.sd.cavphmi.bean.PartLineBean
import com.sd.cavphmi.bean.PerTarget import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.ReqBean import com.sd.cavphmi.bean.PreDelay
import com.sd.cavphmi.bean.RsiEventBean import com.sd.cavphmi.bean.RsiEventBean
import com.sd.cavphmi.bean.SpaceDataLocBeanItem import com.sd.cavphmi.bean.SpaceDataLocBeanItem
import com.sd.cavphmi.bean.SpaceNoBean import com.sd.cavphmi.bean.TrafficLightBean
import com.sd.cavphmi.bean.TrafficPerBean
import com.sd.cavphmi.bean.V2xStartBean
import com.sd.cavphmi.bean.VToXImgBean import com.sd.cavphmi.bean.VToXImgBean
import com.sd.cavphmi.bean.VehicleStats import com.sd.cavphmi.bean.VehicleStats
import com.sd.cavphmi.bean.WebSetBean
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.ParseSocketRepo import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.utils.FileIoUtils import com.sd.cavphmi.utils.FileIoUtils
...@@ -30,13 +30,17 @@ import com.sd.cavphmi.utils.MyContants ...@@ -30,13 +30,17 @@ import com.sd.cavphmi.utils.MyContants
import com.sd.cavphmi.utils.ToastHelper import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.FeelTargetWSClient import com.sd.cavphmi.websockets.FeelTargetWSClient
import com.sd.cavphmi.websockets.MyWebSocketClient import com.sd.cavphmi.websockets.MyWebSocketClient
import com.sd.cavphmi.websockets.PreDelayWSClient
import com.sd.cavphmi.websockets.TrafficLightWSClient
import com.sd.cavphmi.websockets.TrafficPreWSClient
import com.sd.cavphmi.websockets.V2xWSClient
import com.sd.cavphmi.websockets.VecLocWSClient import com.sd.cavphmi.websockets.VecLocWSClient
import com.sd.cavphmi.websockets.VehStatuWSClient
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.java_websocket.handshake.ServerHandshake
import protocol.Response import protocol.Response
import java.net.URI import java.net.URI
import java.util.Timer import java.util.Timer
...@@ -51,13 +55,28 @@ class MainVm @Inject constructor( ...@@ -51,13 +55,28 @@ class MainVm @Inject constructor(
// var spaceNoRepo: SpaceNoRepo, // var spaceNoRepo: SpaceNoRepo,
) : MyBaseViewModel() { ) : MyBaseViewModel() {
private var client: MyWebSocketClient? = null // private var client: MyWebSocketClient? = null
//w网联车辆socket //w网联车辆socket
private var vecLocWSClient: VecLocWSClient? = null private var vecLocWSClient: VecLocWSClient? = null
//感知物socket //感知物socket
private var feelTargetWSClient: FeelTargetWSClient? = null private var feelTargetWSClient: FeelTargetWSClient? = null
//感知物socket
private var v2xWSClient: V2xWSClient? = null
//网联车辆状态
private var vehStatuWSClient: VehStatuWSClient? = null
//感知延时
private var preDelayWSClient: PreDelayWSClient? = null
//交通感知事件
private var trafficPreWSClient: TrafficPreWSClient? = null
//交通信号灯
private var trafficLightWSClient: TrafficLightWSClient? = null
private var gson = Gson() private var gson = Gson()
...@@ -70,20 +89,37 @@ class MainVm @Inject constructor( ...@@ -70,20 +89,37 @@ class MainVm @Inject constructor(
//车辆位姿数据 //车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>() var carVehicle = MutableLiveData<CarVehicle>()
//联网车辆状态数据topic
var vehicleStat = MutableLiveData<VehicleStats>()
//感知目标物 //感知目标物
var targetPre = MutableLiveData<PerTarget>() var targetPre = MutableLiveData<PerTarget>()
//v2x 预警
var v2xStartBean = MutableLiveData<V2xStartBean>()
//联网车辆状态数据
var vehicleStat = MutableLiveData<VehicleStats>()
//感知时延
var preDelay = MutableLiveData<PreDelay>()
//交通感知
var trafficPerBean = MutableLiveData<TrafficPerBean>()
//交通信号灯
var trafficLightBean = MutableLiveData<TrafficLightBean>()
/***车辆仪表***/
var carPanelBean = CarPanelBean.instance
// 、、-----------------
//全局路径 //全局路径
var allLine = MutableLiveData<AllLinePlaningBean>() // var allLine = MutableLiveData<AllLinePlaningBean>()
//局部路径 //局部路径
var partLine = MutableLiveData<PartLineBean>() // var partLine = MutableLiveData<PartLineBean>()
//停车位变更 //停车位变更
var parkBean = MutableLiveData<ParkBean>() // var parkBean = MutableLiveData<ParkBean>()
//停车位编码 //停车位编码
var spaceCode = "" var spaceCode = ""
...@@ -97,8 +133,6 @@ class MainVm @Inject constructor( ...@@ -97,8 +133,6 @@ class MainVm @Inject constructor(
// 是否处理路径规划显示的路径 // 是否处理路径规划显示的路径
private var needDealPath = false private var needDealPath = false
/***车辆仪表***/
var carPanelBean = CarPanelBean.instance
//网络延时时间差 //网络延时时间差
// var timeOutDiff = ObservableField(-1) // var timeOutDiff = ObservableField(-1)
...@@ -110,7 +144,7 @@ class MainVm @Inject constructor( ...@@ -110,7 +144,7 @@ class MainVm @Inject constructor(
private var orderTimer = Timer() private var orderTimer = Timer()
// 车位信息 // 车位信息
private var carSpaNoTimer = Timer() // private var carSpaNoTimer = Timer()
/***获取信号强度**/ /***获取信号强度**/
...@@ -348,30 +382,8 @@ class MainVm @Inject constructor( ...@@ -348,30 +382,8 @@ class MainVm @Inject constructor(
/***清理资源***/ /***清理资源***/
fun cleanRes() { fun cleanRes() {
// curTimer.cancel()
// netSingTimer.cancel()
orderTimer.cancel()
carSpaNoTimer.cancel()
closeWS()
}
private fun closeWS() {
if (client?.isOpen ?: false) {
client?.close()
}
}
private var onSocketCb = object : MyWebSocketClient.OnSocketCb {
override fun onOpen(handshakedata: ServerHandshake?) {
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
}
override fun onError(ex: Exception?) {
}
} }
...@@ -440,7 +452,7 @@ class MainVm @Inject constructor( ...@@ -440,7 +452,7 @@ class MainVm @Inject constructor(
println("-----停车位变更 = ${res.data}") println("-----停车位变更 = ${res.data}")
FileIoUtils.writeToFile(res.data, "change_park.txt") FileIoUtils.writeToFile(res.data, "change_park.txt")
var bean = parseSocketRepo.parseDataBean(res.data, ParkBean::class.java) var bean = parseSocketRepo.parseDataBean(res.data, ParkBean::class.java)
parkBean.value = bean // parkBean.value = bean
} }
} }
...@@ -449,7 +461,7 @@ class MainVm @Inject constructor( ...@@ -449,7 +461,7 @@ class MainVm @Inject constructor(
println("-----全局路径发生切换 = ${res.data}") println("-----全局路径发生切换 = ${res.data}")
FileIoUtils.writeToFile(res.data, "all_line.txt") FileIoUtils.writeToFile(res.data, "all_line.txt")
val bean = parseSocketRepo.parseDataBean(res.data, AllLinePlaningBean::class.java) val bean = parseSocketRepo.parseDataBean(res.data, AllLinePlaningBean::class.java)
allLine.value = bean // allLine.value = bean
} }
} }
...@@ -458,7 +470,7 @@ class MainVm @Inject constructor( ...@@ -458,7 +470,7 @@ class MainVm @Inject constructor(
println("-----局部路径 = ${res.data}") println("-----局部路径 = ${res.data}")
FileIoUtils.writeToFile(res.data, "part_line.txt") FileIoUtils.writeToFile(res.data, "part_line.txt")
var bean = parseSocketRepo.parseDataBean(res.data, PartLineBean::class.java) var bean = parseSocketRepo.parseDataBean(res.data, PartLineBean::class.java)
partLine.value = bean // partLine.value = bean
} }
} }
...@@ -486,9 +498,11 @@ class MainVm @Inject constructor( ...@@ -486,9 +498,11 @@ class MainVm @Inject constructor(
vecLocWSClient?.onDataCb = object : VecLocWSClient.OnDataCb { vecLocWSClient?.onDataCb = object : VecLocWSClient.OnDataCb {
override fun onMsg(str: String) { override fun onMsg(str: String) {
// FileIoUtils.writeToFile(str, "CarVehicle.txt") viewModelScope.launch {
var bean = gson.fromJson(str, CarVehicle::class.java) FileIoUtils.writeToFile(str, "CarVehicle.txt")
carVehicle.postValue(bean) var bean = gson.fromJson(str, CarVehicle::class.java)
carVehicle.postValue(bean)
}
} }
} }
} }
...@@ -503,8 +517,24 @@ class MainVm @Inject constructor( ...@@ -503,8 +517,24 @@ class MainVm @Inject constructor(
* 联网车辆状态数据 * 联网车辆状态数据
* */ * */
fun subVehicleStatus(): LiveData<VehicleStats> { fun subVehicleStatus(): LiveData<VehicleStats> {
val reqStr = getSendData("/topic/vehicleStatus") try {
client?.send(reqStr) if (vehStatuWSClient == null) {
vehStatuWSClient = VehStatuWSClient(URI(MyContants.WS_VEH_STATU))
vehStatuWSClient?.connect()
vehStatuWSClient?.onDataCb = object : VehStatuWSClient.OnDataCb {
override fun onMsg(str: String) {
viewModelScope.launch {
FileIoUtils.writeToFile(str, "vehicleS.txt")
// var bean = gson.fromJson(str, VehicleStats::class.java)
// vehicleStat.postValue(bean)
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
return vehicleStat return vehicleStat
} }
...@@ -522,9 +552,11 @@ class MainVm @Inject constructor( ...@@ -522,9 +552,11 @@ class MainVm @Inject constructor(
feelTargetWSClient?.onDataCb = object : FeelTargetWSClient.OnDataCb { feelTargetWSClient?.onDataCb = object : FeelTargetWSClient.OnDataCb {
override fun onMsg(str: String) { override fun onMsg(str: String) {
// FileIoUtils.writeToFile(str, "PerTarget.txt") viewModelScope.launch {
var bean = gson.fromJson(str, PerTarget::class.java) FileIoUtils.writeToFile(str, "PerTarget.txt")
targetPre.postValue(bean) var bean = gson.fromJson(str, PerTarget::class.java)
targetPre.postValue(bean)
}
} }
} }
} }
...@@ -538,63 +570,139 @@ class MainVm @Inject constructor( ...@@ -538,63 +570,139 @@ class MainVm @Inject constructor(
/** /**
* V2X预警开始 * V2X预警开始
* **/ * **/
fun subStartV2x() { fun subStartV2x(): LiveData<V2xStartBean> {
val reqStr = getSendData("/topic/v2xStart") if (isMock) {
client?.send(reqStr) // mockVM.onSubTargetMock(targetPre)
} } else {
try {
if (v2xWSClient == null) {
v2xWSClient = V2xWSClient(URI(MyContants.WS_V2X))
v2xWSClient?.connect()
/*** V2X预警结束topic**/ v2xWSClient?.onDataCb = object : V2xWSClient.OnDataCb {
fun subEndV2x() { override fun onMsg(str: String) {
var reqStr = getSendData("/topic/v2xEnd") viewModelScope.launch {
client?.send(reqStr) FileIoUtils.writeToFile(str, "onStartV2x.txt")
var bean = gson.fromJson(str, V2xStartBean::class.java)
v2xStartBean.postValue(bean)
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
return v2xStartBean
} }
/*** 更新停车位**/ /*** 感知延时**/
fun subPoints(): LiveData<ParkBean> { fun subPreDelay(): LiveData<PreDelay> {
if (isMock) { try {
mockVM.onPointsMock(parkBean) if (preDelayWSClient == null) {
} else { preDelayWSClient = PreDelayWSClient(URI(MyContants.WS_PRE_DELAY))
client?.send(getSendData("/topic/points")) preDelayWSClient?.connect()
preDelayWSClient?.onDataCb = object : PreDelayWSClient.OnDataCb {
override fun onMsg(str: String) {
viewModelScope.launch {
FileIoUtils.writeToFile(str, "pre_delay.txt")
var bean = gson.fromJson(str, PreDelay::class.java)
preDelay.postValue(bean)
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
} }
return parkBean return preDelay
} }
/*** 全局路径发生切换**/ /*** 交通(感知)事件**/
fun subLinePlaning(): LiveData<AllLinePlaningBean> { fun subTrafficPre(): LiveData<TrafficPerBean> {
if (isMock) { try {
mockVM.onSubLinePlaningMock(allLine) if (trafficPreWSClient == null) {
} else { trafficPreWSClient = TrafficPreWSClient(URI(MyContants.WS_TRAFFIC_PER))
val reqStr = getSendData("/topic/linePlaning") trafficPreWSClient?.connect()
client?.send(reqStr)
trafficPreWSClient?.onDataCb = object : TrafficPreWSClient.OnDataCb {
override fun onMsg(str: String) {
viewModelScope.launch {
FileIoUtils.writeToFile(str, "pre_traff.txt")
var bean = gson.fromJson(str, TrafficPerBean::class.java)
trafficPerBean.postValue(bean)
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
} }
return allLine return trafficPerBean
} }
/*** 局部路径**/
fun subPartLine(): LiveData<PartLineBean> { /*** 交通信号灯**/
if (isMock) { fun subTrafficLight(): LiveData<TrafficLightBean> {
mockVM.onSubPartLineMock(partLine) try {
} else { if (trafficLightWSClient == null) {
val reqStr = getSendData("/topic/partLine") trafficLightWSClient = TrafficLightWSClient(URI(MyContants.WS_TRAFFIC_LIGHT))
client?.send(reqStr) trafficLightWSClient?.connect()
trafficLightWSClient?.onDataCb = object : TrafficLightWSClient.OnDataCb {
override fun onMsg(str: String) {
viewModelScope.launch {
FileIoUtils.writeToFile(str, "traff_light.txt")
// var bean = gson.fromJson(str, TrafficPerBean::class.java)
// trafficPerBean.postValue(bean)
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
} }
return partLine return trafficLightBean
} }
/*** 全局路径发生切换**/
// fun subLinePlaning(): LiveData<AllLinePlaningBean> {
// if (isMock) {
// mockVM.onSubLinePlaningMock(allLine)
// } else {
// val reqStr = getSendData("/topic/linePlaning")
// client?.send(reqStr)
// }
// return allLine
// }
/*** 局部路径**/
// fun subPartLine(): LiveData<PartLineBean> {
// if (isMock) {
// mockVM.onSubPartLineMock(partLine)
// } else {
// val reqStr = getSendData("/topic/partLine")
// client?.send(reqStr)
// }
// return partLine
// }
/*** rsi事件**/ /*** rsi事件**/
fun subRsiEvent() { // fun subRsiEvent() {
val reqStr = getSendData("/topic/rsiEvent") // val reqStr = getSendData("/topic/rsiEvent")
client?.send(reqStr) // client?.send(reqStr)
} // }
/**构建发送体**/ /**构建发送体**/
private fun getSendData(key: String): String { // private fun getSendData(key: String): String {
var data = WebSetBean.subDic.get(key) // var data = WebSetBean.subDic.get(key)
var req = ReqBean() // var req = ReqBean()
req.data = data!! // req.data = data!!
var str = gson.toJson(req) // var str = gson.toJson(req)
return str // return str
} // }
fun showVToTip() { fun showVToTip() {
......
...@@ -26,7 +26,7 @@ class FeelTargetWSClient : WebSocketClient { ...@@ -26,7 +26,7 @@ class FeelTargetWSClient : WebSocketClient {
} }
override fun onMessage(message: String?) { override fun onMessage(message: String?) {
// System.out.println(TAG + "received message: " + message); println(TAG + " : " + message)
if (message.isNullOrEmpty()) if (message.isNullOrEmpty())
return return
onDataCb?.onMsg(message) onDataCb?.onMsg(message)
......
package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake
import java.net.URI
import java.nio.ByteBuffer
/*****感知延时**/
class PreDelayWSClient : WebSocketClient {
private val TAG = "-----PreDelayWSClient"
constructor(serverUri: URI) : super(serverUri)
constructor(serverUri: URI?, protocolDraft: Draft?) : super(serverUri, protocolDraft)
constructor(serverUri: URI?, httpHeaders: MutableMap<String, String>?) : super(
serverUri,
httpHeaders
)
override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)")
// System.out.println(TAG + "new connection opened")
}
override fun onMessage(message: String?) {
println(TAG + " : " + message)
if (message.isNullOrEmpty())
return
onDataCb?.onMsg(message)
// onSocketCb?.onMessage(message)
}
override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer")
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
}
override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex)
}
var onDataCb: OnDataCb? = null
interface OnDataCb {
fun onMsg(str: String)
}
}
\ No newline at end of file
package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake
import java.net.URI
import java.nio.ByteBuffer
/**
*交通信号灯
* **/
class TrafficLightWSClient : WebSocketClient {
private val TAG = "-----TrafficLightWSClient"
constructor(serverUri: URI) : super(serverUri)
constructor(serverUri: URI?, protocolDraft: Draft?) : super(serverUri, protocolDraft)
constructor(serverUri: URI?, httpHeaders: MutableMap<String, String>?) : super(
serverUri,
httpHeaders
)
override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)")
System.out.println(TAG + " new connection opened")
}
override fun onMessage(message: String?) {
println(TAG + " : " + message)
if (message.isNullOrEmpty())
return
onDataCb?.onMsg(message)
// onSocketCb?.onMessage(message)
}
override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer")
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
}
override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex)
}
var onDataCb: OnDataCb? = null
interface OnDataCb {
fun onMsg(str: String)
}
}
\ No newline at end of file
package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake
import java.net.URI
import java.nio.ByteBuffer
/**
*交通(感知)事件
* **/
class TrafficPreWSClient : WebSocketClient {
private val TAG = "-----TrafficPreWSClient"
constructor(serverUri: URI) : super(serverUri)
constructor(serverUri: URI?, protocolDraft: Draft?) : super(serverUri, protocolDraft)
constructor(serverUri: URI?, httpHeaders: MutableMap<String, String>?) : super(
serverUri,
httpHeaders
)
override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)")
System.out.println(TAG + " new connection opened")
}
override fun onMessage(message: String?) {
println(TAG + " : " + message)
if (message.isNullOrEmpty())
return
onDataCb?.onMsg(message)
// onSocketCb?.onMessage(message)
}
override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer")
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
}
override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex)
}
var onDataCb: OnDataCb? = null
interface OnDataCb {
fun onMsg(str: String)
}
}
\ No newline at end of file
package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake
import java.net.URI
import java.nio.ByteBuffer
/*****v2x预警**/
class V2xWSClient : WebSocketClient {
private val TAG = "-----V2xWSClient"
constructor(serverUri: URI) : super(serverUri)
constructor(serverUri: URI?, protocolDraft: Draft?) : super(serverUri, protocolDraft)
constructor(serverUri: URI?, httpHeaders: MutableMap<String, String>?) : super(
serverUri,
httpHeaders
)
override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)")
// System.out.println(TAG + "new connection opened")
}
override fun onMessage(message: String?) {
println(TAG + " : " + message)
if (message.isNullOrEmpty())
return
onDataCb?.onMsg(message)
// onSocketCb?.onMessage(message)
}
override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer")
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
}
override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex)
}
var onDataCb: OnDataCb? = null
interface OnDataCb {
fun onMsg(str: String)
}
}
\ No newline at end of file
...@@ -29,7 +29,7 @@ class VecLocWSClient : WebSocketClient { ...@@ -29,7 +29,7 @@ class VecLocWSClient : WebSocketClient {
} }
override fun onMessage(message: String?) { override fun onMessage(message: String?) {
System.out.println(TAG + "received message: " + message); System.out.println(TAG + " : " + message);
if (message.isNullOrEmpty()) if (message.isNullOrEmpty())
return return
onDataCb?.onMsg(message) onDataCb?.onMsg(message)
......
package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake
import java.net.URI
import java.nio.ByteBuffer
/*****网联车辆状态
* 只有发生变化的数据才推送
* **/
class VehStatuWSClient : WebSocketClient {
private val TAG = "-----VehStatuWSClient"
constructor(serverUri: URI) : super(serverUri)
constructor(serverUri: URI?, protocolDraft: Draft?) : super(serverUri, protocolDraft)
constructor(serverUri: URI?, httpHeaders: MutableMap<String, String>?) : super(
serverUri,
httpHeaders
)
override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)")
System.out.println(TAG + " new connection opened")
}
override fun onMessage(message: String?) {
println(TAG + " : " + message)
if (message.isNullOrEmpty())
return
onDataCb?.onMsg(message)
// onSocketCb?.onMessage(message)
}
override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer")
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
}
override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex)
}
var onDataCb: OnDataCb? = null
interface OnDataCb {
fun onMsg(str: String)
}
}
\ No newline at end of file
...@@ -29,7 +29,12 @@ ...@@ -29,7 +29,12 @@
android:layout_marginLeft="@dimen/dp_10" android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10" /> android:layout_marginTop="@dimen/dp_10" />
<!-- 高精地图放这里--> <!-- 高精地图放这里-->
<fragment
android:id="@+id/map_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.sd.cavphmi.ui.fragment.MapMainFragment"/>
<LinearLayout <LinearLayout
...@@ -50,8 +55,7 @@ ...@@ -50,8 +55,7 @@
android:id="@+id/bt_status" android:id="@+id/bt_status"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="联网车辆状态" android:text="联网车辆状态" />
android:visibility="gone"/>
<Button <Button
android:id="@+id/bt_target" android:id="@+id/bt_target"
...@@ -66,34 +70,39 @@ ...@@ -66,34 +70,39 @@
android:text="V2X预警开始" /> android:text="V2X预警开始" />
<Button <Button
android:id="@+id/bt_v2xend" android:id="@+id/bt_predelay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="V2X预警结束" /> android:text="感知延时" />
<Button <Button
android:id="@+id/bt_chewei" android:id="@+id/bt_tarpre"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="停车位变更" /> android:text="交通(感知)事件" />
<Button <Button
android:id="@+id/bt_allline" android:id="@+id/bt_tarlight"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="全局路径发生切换" /> android:text="交通信号灯" />
<Button <Button
android:id="@+id/bt_jubuline" android:id="@+id/bt_allline"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="局部路径" /> android:text="全局路径发生切换"
android:visibility="gone"/>
<Button <Button
android:id="@+id/bt_rsi" android:id="@+id/bt_jubuline"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="rsi事件" /> android:visibility="gone"
android:text="局部路径" />
</LinearLayout> </LinearLayout>
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fragment.MapMainFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
</layout>
\ No newline at end of file
<resources> <resources>
<string name="app_name">C-adas AVP</string> <string name="app_name">C-adas AVP</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
</resources> </resources>
\ 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