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

proto

parent 816a069a
import org.gradle.internal.declarativedsl.parsing.main
import org.jetbrains.kotlin.gradle.internal.wrapPluginOptions
plugins { plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
id("dagger.hilt.android.plugin") id("dagger.hilt.android.plugin")
id("kotlin-kapt") id("kotlin-kapt")
id("com.google.protobuf")
} }
android { android {
...@@ -42,6 +46,38 @@ android { ...@@ -42,6 +46,38 @@ android {
abortOnError=false abortOnError=false
checkReleaseBuilds=false checkReleaseBuilds=false
} }
sourceSets {
//配置 protoc 编译器
}
}
protobuf {
//配置 protoc 编译器
// protoc {
// artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
// }
plugins {
// The codegen for lite comes as a separate artifact
// artifacts {
// "com.google.protobuf:protoc-gen-javalite:3.0.0"
// }
}
//配置生成目录,编译后会在 build 的目录下生成对应的java文件
generateProtoTasks {
all().forEach { task->
task.builtins {
// remove(com.google.protobuf.gradle.ProtobufPlugin.j)
// remove(java)
}
task.builtins {
java {
}
}
}
}
} }
dependencies { dependencies {
...@@ -55,8 +91,14 @@ dependencies { ...@@ -55,8 +91,14 @@ dependencies {
androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.espresso.core)
implementation("com.google.protobuf:protobuf-java:3.19.2")
// implementation("com.google.protobuf:protobuf-lite:3.0.0")
// implementation("com.google.protobuf:protobuf-lite:3.0.0")
// implementation("com.google.protobuf:protobuf-kotlin-lite:4.31.1")
//java web socket //java web socket
implementation("org.java-websocket:Java-WebSocket:1.6.0") implementation("org.java-websocket:Java-WebSocket:1.6.0")
//proto
// Hilt dependencies // Hilt dependencies
val hilt_version = "2.56.1" val hilt_version = "2.56.1"
implementation("com.google.dagger:hilt-android:$hilt_version") implementation("com.google.dagger:hilt-android:$hilt_version")
......
syntax = "proto3";
package com.cusc.data.clean.module;
option java_multiple_files = true;
option java_outer_classname = "Point";
message PointCloud {
repeated Result results = 1;
}
message Result {
double x = 1;
double y = 2;
double z = 3;
double angle = 4;
}
import protoRoot from "@/utils/ws/base";
/**
* 解码通用的protobuf数据
* 推送格式映射在response.proto里的,使用此方法 !
* SocketResponse对应解码文件base.js里面的SocketResponse
*/
export async function decodeResponseProtoBuf(msg) {
const SocketResponse = protoRoot.lookup("SocketResponse");
let blob = msg.data;
let arrybuff = await blob.arrayBuffer();
let uinit8 = new Uint8Array(arrybuff);
const result = SocketResponse.decode(uinit8);
return result;
}
syntax = "proto3";
option java_package = "com.cusc.imserver.protocol";
message SocketResponse {
int32 code = 1;
string msg = 2;
int32 msgType = 3; //
string data = 4;
}
package com.sd.cavphmi.bean
/***
* 向websocket 订阅数据
* **/
class ReqBean {
val msgType = 2
var data = ""
}
\ No newline at end of file
package com.sd.cavphmi.repositorys package com.sd.cavphmi.repositorys
import com.google.gson.Gson
import com.sd.cavphmi.bean.SpaceNoBean import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.net.MyBaseResource
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.net.RequestBodyUtil import com.sd.cavphmi.net.RequestBodyUtil
import com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod import com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
import com.sd.cavphmi.websockets.MyWebSocketClient
import retrofit2.HttpException import retrofit2.HttpException
import javax.inject.Inject import javax.inject.Inject
class SpaceNoRepo @Inject constructor(var clientRetrofitMethod: ClientRetrofitMethod) { class SpaceNoRepo @Inject constructor(var clientRetrofitMethod: ClientRetrofitMethod) {
var client: MyWebSocketClient? = null
private var gson=Gson()
// 2.2. 联网车辆位姿数据topic
fun subVehicle(){
}
fun getSendData(){
}
suspend fun getSpaceData(): MyResult<SpaceNoBean> { suspend fun getSpaceData(): MyResult<SpaceNoBean> {
var map = mutableMapOf("pageNo" to 20, "pageSize" to 1000) var map = mutableMapOf("pageNo" to 20, "pageSize" to 1000)
var body = RequestBodyUtil.toRequestBody(map) var body = RequestBodyUtil.toRequestBody(map)
......
...@@ -40,7 +40,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() { ...@@ -40,7 +40,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
} }
override fun getToData() { override fun getToData() {
// viewModel.getSpaceData()
} }
override fun dispatchKeyEvent(event: KeyEvent): Boolean { override fun dispatchKeyEvent(event: KeyEvent): Boolean {
......
...@@ -2,11 +2,13 @@ package com.sd.cavphmi.utils ...@@ -2,11 +2,13 @@ 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://sip-avp.isungent.cn:8443" else "" var HOST = if (IS_DEBUG) "https://sip-avp.isungent.cn:8443" else ""
// var PORT = if (IS_DEBUG) "123" else "34534" // var PORT = if (IS_DEBUG) "123" else "34534"
//wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100 长春
var WS_HOST = var WS_HOST =
if (IS_DEBUG) "wss://sip-avp.isungent.cn:8443/socket/ws?clientSource=100" else "" if (IS_DEBUG) "wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100" else ""
......
...@@ -2,9 +2,12 @@ package com.sd.cavphmi.viewmodels ...@@ -2,9 +2,12 @@ package com.sd.cavphmi.viewmodels
import android.content.Context import android.content.Context
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.gson.Gson
import com.sd.cavphmi.base.MyBaseViewModel import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.ReqBean
import com.sd.cavphmi.bean.SpaceNoBean import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.bean.VToXImgBean import com.sd.cavphmi.bean.VToXImgBean
import com.sd.cavphmi.bean.WebSetBean
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.SpaceNoRepo import com.sd.cavphmi.repositorys.SpaceNoRepo
import com.sd.cavphmi.utils.MyContants import com.sd.cavphmi.utils.MyContants
...@@ -12,10 +15,10 @@ import com.sd.cavphmi.utils.ToastHelper ...@@ -12,10 +15,10 @@ import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.MyWebSocketClient import com.sd.cavphmi.websockets.MyWebSocketClient
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.launch import kotlinx.coroutines.launch
import org.java_websocket.client.WebSocketClient import org.java_websocket.handshake.ServerHandshake
import java.net.URI import java.net.URI
import java.nio.ByteBuffer
import javax.inject.Inject import javax.inject.Inject
...@@ -25,15 +28,21 @@ class MainVm @Inject constructor( ...@@ -25,15 +28,21 @@ class MainVm @Inject constructor(
var spaceNoRepo: SpaceNoRepo var spaceNoRepo: SpaceNoRepo
) : MyBaseViewModel() { ) : MyBaseViewModel() {
private var client: MyWebSocketClient? = null private var client: MyWebSocketClient? = null
private var gson = Gson()
fun startWS() { fun startWS() {
val httpHeaders = mutableMapOf<String, String>() val httpHeaders = mutableMapOf<String, String>()
httpHeaders.put("Cookie", "username=nemo") httpHeaders.put("Cookie", "username=nemo")
client = MyWebSocketClient(URI(MyContants.WS_HOST)) try {
client?.connect() client = MyWebSocketClient(URI(MyContants.WS_HOST))
client?.onSocketCb = onSocketCb
client?.connect()
} catch (e: Exception) {
}
} }
fun closeWS() { fun closeWS() {
...@@ -42,6 +51,42 @@ class MainVm @Inject constructor( ...@@ -42,6 +51,42 @@ class MainVm @Inject constructor(
} }
} }
var onSocketCb = object : MyWebSocketClient.OnSocketCb {
override fun onOpen(handshakedata: ServerHandshake?) {
println("--------Thread.currentThread() = ${Thread.currentThread()}")
subVehicle()
}
override fun onMessage(message: String?) {
}
override fun onMessage(bytes: ByteBuffer?) {
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
}
override fun onError(ex: Exception?) {
}
}
/*** 2.2. 联网车辆位姿数据topic**/
fun subVehicle() {
var reqStr = getSendData("/topic/vehicle")
client?.send(reqStr)
}
fun getSendData(key: String): String {
var data = WebSetBean.dic.get(key)
var req = ReqBean()
req.data = data!!
var str = gson.toJson(req)
return str
}
fun showVToTip() { fun showVToTip() {
var imgs = VToXImgBean.imgs var imgs = VToXImgBean.imgs
ToastHelper.showCustViewShort(context, imgs.get("2")!!) ToastHelper.showCustViewShort(context, imgs.get("2")!!)
...@@ -54,6 +99,7 @@ class MainVm @Inject constructor( ...@@ -54,6 +99,7 @@ class MainVm @Inject constructor(
is MyResult.Success<SpaceNoBean> -> { is MyResult.Success<SpaceNoBean> -> {
var a = 0 var a = 0
} }
else -> { else -> {
var b = 0 var b = 0
} }
......
...@@ -3,7 +3,6 @@ package com.sd.cavphmi.websockets ...@@ -3,7 +3,6 @@ package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake import org.java_websocket.handshake.ServerHandshake
import java.lang.Exception
import java.net.URI import java.net.URI
import java.nio.ByteBuffer import java.nio.ByteBuffer
...@@ -22,12 +21,15 @@ class MyWebSocketClient : WebSocketClient { ...@@ -22,12 +21,15 @@ class MyWebSocketClient : WebSocketClient {
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
send("Hello, it is me. Mario :)") // send("Hello, it is me. Mario :)")
System.out.println(TAG + "new connection opened") System.out.println(TAG + "new connection opened")
onSocketCb?.onOpen(handshakedata)
} }
override fun onMessage(message: String?) { override fun onMessage(message: String?) {
System.out.println(TAG + "received message: " + message); System.out.println(TAG + "received message: " + message);
onSocketCb?.onMessage(message)
//处理各种推送消息 //处理各种推送消息
// let data = {}; // let data = {};
// let result = await decodeResponseProtoBuf(msg); // let result = await decodeResponseProtoBuf(msg);
...@@ -46,15 +48,28 @@ class MyWebSocketClient : WebSocketClient { ...@@ -46,15 +48,28 @@ class MyWebSocketClient : WebSocketClient {
} }
override fun onMessage(bytes: ByteBuffer?) { override fun onMessage(bytes: ByteBuffer?) {
System.out.println(TAG + "received ByteBuffer") System.out.println(TAG + " received ByteBuffer")
onSocketCb?.onMessage(bytes)
} }
override fun onClose(code: Int, reason: String?, remote: Boolean) { override fun onClose(code: Int, reason: String?, remote: Boolean) {
System.out.println(TAG + "closed with exit code " + code + " additional info: " + reason); System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
onSocketCb?.onClose(code,reason,remote)
} }
override fun onError(ex: Exception?) { override fun onError(ex: Exception?) {
System.err.println(TAG + "an error occurred:" + ex); System.err.println(TAG + "an error occurred:" + ex);
onSocketCb?.onError(ex)
}
var onSocketCb: OnSocketCb? = null
interface OnSocketCb {
fun onOpen(handshakedata: ServerHandshake?)
fun onMessage(message: String?)
fun onMessage(bytes: ByteBuffer?)
fun onClose(code: Int, reason: String?, remote: Boolean)
fun onError(ex: Exception?)
} }
......
syntax = "proto3";
package com.sd.cavphmi;
message SocketResponse {
int32 code = 1;
string msg = 2;
int32 msgType = 3; //
string data = 4;
}
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
buildscript { buildscript {
dependencies { dependencies {
classpath(libs.hilt.android.gradle.plugin) classpath(libs.hilt.android.gradle.plugin)
classpath("com.google.protobuf:protobuf-gradle-plugin:0.8.19")
} }
} }
plugins { plugins {
......
...@@ -11,6 +11,7 @@ material = "1.12.0" ...@@ -11,6 +11,7 @@ material = "1.12.0"
activity = "1.10.1" activity = "1.10.1"
constraintlayout = "2.2.1" constraintlayout = "2.2.1"
[libraries] [libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
hilt-android-gradle-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hiltAndroidGradlePlugin" } hilt-android-gradle-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hiltAndroidGradlePlugin" }
......
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