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

录像socket推数据

parent 86ea637f
......@@ -40,11 +40,6 @@ class CarPanelBean {
//转向灯 1=left 2=right
var lights = ObservableField<Int>(-1)
/*** 枚举类型:[0..9],1:人工接管(人工驾驶);2:单车自控(自动驾
* 驶);3:云端支持下的人工驾驶;4:云端支持下的自动驾驶;5:非
* 主驾位置人工驾驶(不启用);6:脱离(非自动驾驶行程自动结束下
* 的接管);7:远程驾驶(非现场人工驾驶);8:未处于任何驾驶模式;
* 9:其他未定义状态;0xFF 表示缺省*/
var driveMode = ObservableField("")
//航向角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
/**V2x 预警开始***/
class V2xStartBean {
}
\ No newline at end of file
/**V2x 预警开始
* {"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}
* ***/
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>() {
private val avpMapVM: AvpMapVM by viewModels()
private lateinit var dialogFragment: ExitAppDialog
//汽车仪表
private val carPanelFragment by lazy { CarPanelFragment.newInstance() }
......@@ -73,41 +74,47 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
}
private fun mockBt() {
//联网车辆位姿数据
binding.btVehicle.setOnClickListener {
viewModel.subVehicle().observe(this) {
// topicVehicle(it)
}
}
binding.btStatus.setOnClickListener {
viewModel.subVehicleStatus().observe(this) {
// println("time = ${time}")
topicVehicleStatus(it)
}
}
//感知目标物
binding.btTarget.setOnClickListener {
viewModel.subTarget()
}
//v2x 预警
binding.btV2x.setOnClickListener {
viewModel.subStartV2x()
}
binding.btV2xend.setOnClickListener {
viewModel.subEndV2x()
}
binding.btChewei.setOnClickListener {
viewModel.subPoints().observe(this) {
topicvPoints(it)
//网联车辆状态
binding.btStatus.setOnClickListener {
viewModel.subVehicleStatus().observe(this) {
// println("time = ${time}")
// topicVehicleStatus(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
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 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
......
......@@ -2,11 +2,12 @@ package com.sd.cavphmi.viewmodels
import android.content.Context
import androidx.lifecycle.ViewModel
import com.sd.cavphmi.base.MyBaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
@HiltViewModel
class AvpMapVM @Inject constructor(@ApplicationContext private var context: Context) :
ViewModel() {
MyBaseViewModel() {
}
\ No newline at end of file
package com.sd.cavphmi.viewmodels
import android.content.Context
import androidx.databinding.ObservableField
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
......@@ -16,13 +15,14 @@ import com.sd.cavphmi.bean.ParkBean
import com.sd.cavphmi.bean.ParkLinePlan
import com.sd.cavphmi.bean.PartLineBean
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.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.VehicleStats
import com.sd.cavphmi.bean.WebSetBean
import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.utils.FileIoUtils
......@@ -30,13 +30,17 @@ import com.sd.cavphmi.utils.MyContants
import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.FeelTargetWSClient
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.VehStatuWSClient
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.util.Timer
......@@ -51,13 +55,28 @@ class MainVm @Inject constructor(
// var spaceNoRepo: SpaceNoRepo,
) : MyBaseViewModel() {
private var client: MyWebSocketClient? = null
// private var client: MyWebSocketClient? = null
//w网联车辆socket
private var vecLocWSClient: VecLocWSClient? = null
//感知物socket
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()
......@@ -70,20 +89,37 @@ class MainVm @Inject constructor(
//车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>()
//联网车辆状态数据topic
var vehicleStat = MutableLiveData<VehicleStats>()
//感知目标物
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 = ""
......@@ -97,8 +133,6 @@ class MainVm @Inject constructor(
// 是否处理路径规划显示的路径
private var needDealPath = false
/***车辆仪表***/
var carPanelBean = CarPanelBean.instance
//网络延时时间差
// var timeOutDiff = ObservableField(-1)
......@@ -110,7 +144,7 @@ class MainVm @Inject constructor(
private var orderTimer = Timer()
// 车位信息
private var carSpaNoTimer = Timer()
// private var carSpaNoTimer = Timer()
/***获取信号强度**/
......@@ -348,30 +382,8 @@ class MainVm @Inject constructor(
/***清理资源***/
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(
println("-----停车位变更 = ${res.data}")
FileIoUtils.writeToFile(res.data, "change_park.txt")
var bean = parseSocketRepo.parseDataBean(res.data, ParkBean::class.java)
parkBean.value = bean
// parkBean.value = bean
}
}
......@@ -449,7 +461,7 @@ class MainVm @Inject constructor(
println("-----全局路径发生切换 = ${res.data}")
FileIoUtils.writeToFile(res.data, "all_line.txt")
val bean = parseSocketRepo.parseDataBean(res.data, AllLinePlaningBean::class.java)
allLine.value = bean
// allLine.value = bean
}
}
......@@ -458,7 +470,7 @@ class MainVm @Inject constructor(
println("-----局部路径 = ${res.data}")
FileIoUtils.writeToFile(res.data, "part_line.txt")
var bean = parseSocketRepo.parseDataBean(res.data, PartLineBean::class.java)
partLine.value = bean
// partLine.value = bean
}
}
......@@ -486,9 +498,11 @@ class MainVm @Inject constructor(
vecLocWSClient?.onDataCb = object : VecLocWSClient.OnDataCb {
override fun onMsg(str: String) {
// FileIoUtils.writeToFile(str, "CarVehicle.txt")
var bean = gson.fromJson(str, CarVehicle::class.java)
carVehicle.postValue(bean)
viewModelScope.launch {
FileIoUtils.writeToFile(str, "CarVehicle.txt")
var bean = gson.fromJson(str, CarVehicle::class.java)
carVehicle.postValue(bean)
}
}
}
}
......@@ -503,8 +517,24 @@ class MainVm @Inject constructor(
* 联网车辆状态数据
* */
fun subVehicleStatus(): LiveData<VehicleStats> {
val reqStr = getSendData("/topic/vehicleStatus")
client?.send(reqStr)
try {
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
}
......@@ -522,9 +552,11 @@ class MainVm @Inject constructor(
feelTargetWSClient?.onDataCb = object : FeelTargetWSClient.OnDataCb {
override fun onMsg(str: String) {
// FileIoUtils.writeToFile(str, "PerTarget.txt")
var bean = gson.fromJson(str, PerTarget::class.java)
targetPre.postValue(bean)
viewModelScope.launch {
FileIoUtils.writeToFile(str, "PerTarget.txt")
var bean = gson.fromJson(str, PerTarget::class.java)
targetPre.postValue(bean)
}
}
}
}
......@@ -538,63 +570,139 @@ class MainVm @Inject constructor(
/**
* V2X预警开始
* **/
fun subStartV2x() {
val reqStr = getSendData("/topic/v2xStart")
client?.send(reqStr)
}
fun subStartV2x(): LiveData<V2xStartBean> {
if (isMock) {
// mockVM.onSubTargetMock(targetPre)
} else {
try {
if (v2xWSClient == null) {
v2xWSClient = V2xWSClient(URI(MyContants.WS_V2X))
v2xWSClient?.connect()
/*** V2X预警结束topic**/
fun subEndV2x() {
var reqStr = getSendData("/topic/v2xEnd")
client?.send(reqStr)
v2xWSClient?.onDataCb = object : V2xWSClient.OnDataCb {
override fun onMsg(str: String) {
viewModelScope.launch {
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> {
if (isMock) {
mockVM.onPointsMock(parkBean)
} else {
client?.send(getSendData("/topic/points"))
/*** 感知延时**/
fun subPreDelay(): LiveData<PreDelay> {
try {
if (preDelayWSClient == null) {
preDelayWSClient = PreDelayWSClient(URI(MyContants.WS_PRE_DELAY))
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> {
if (isMock) {
mockVM.onSubLinePlaningMock(allLine)
} else {
val reqStr = getSendData("/topic/linePlaning")
client?.send(reqStr)
/*** 交通(感知)事件**/
fun subTrafficPre(): LiveData<TrafficPerBean> {
try {
if (trafficPreWSClient == null) {
trafficPreWSClient = TrafficPreWSClient(URI(MyContants.WS_TRAFFIC_PER))
trafficPreWSClient?.connect()
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) {
mockVM.onSubPartLineMock(partLine)
} else {
val reqStr = getSendData("/topic/partLine")
client?.send(reqStr)
/*** 交通信号灯**/
fun subTrafficLight(): LiveData<TrafficLightBean> {
try {
if (trafficLightWSClient == null) {
trafficLightWSClient = TrafficLightWSClient(URI(MyContants.WS_TRAFFIC_LIGHT))
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事件**/
fun subRsiEvent() {
val reqStr = getSendData("/topic/rsiEvent")
client?.send(reqStr)
}
// fun subRsiEvent() {
// val reqStr = getSendData("/topic/rsiEvent")
// client?.send(reqStr)
// }
/**构建发送体**/
private fun getSendData(key: String): String {
var data = WebSetBean.subDic.get(key)
var req = ReqBean()
req.data = data!!
var str = gson.toJson(req)
return str
}
// private fun getSendData(key: String): String {
// var data = WebSetBean.subDic.get(key)
// var req = ReqBean()
// req.data = data!!
// var str = gson.toJson(req)
// return str
// }
fun showVToTip() {
......
......@@ -26,7 +26,7 @@ class FeelTargetWSClient : WebSocketClient {
}
override fun onMessage(message: String?) {
// System.out.println(TAG + "received message: " + message);
println(TAG + " : " + message)
if (message.isNullOrEmpty())
return
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 {
}
override fun onMessage(message: String?) {
System.out.println(TAG + "received message: " + message);
System.out.println(TAG + " : " + message);
if (message.isNullOrEmpty())
return
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 @@
android:layout_marginLeft="@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
......@@ -50,8 +55,7 @@
android:id="@+id/bt_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="联网车辆状态"
android:visibility="gone"/>
android:text="联网车辆状态" />
<Button
android:id="@+id/bt_target"
......@@ -66,34 +70,39 @@
android:text="V2X预警开始" />
<Button
android:id="@+id/bt_v2xend"
android:id="@+id/bt_predelay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="V2X预警结束" />
android:text="感知延时" />
<Button
android:id="@+id/bt_chewei"
android:id="@+id/bt_tarpre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停车位变更" />
android:text="交通(感知)事件" />
<Button
android:id="@+id/bt_allline"
android:id="@+id/bt_tarlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全局路径发生切换" />
android:text="交通信号灯" />
<Button
android:id="@+id/bt_jubuline"
android:id="@+id/bt_allline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="局部路径" />
android:text="全局路径发生切换"
android:visibility="gone"/>
<Button
android:id="@+id/bt_rsi"
android:id="@+id/bt_jubuline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="rsi事件" />
android:visibility="gone"
android:text="局部路径" />
</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>
<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>
\ 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