Browse Source

完成测试mqtt

Caner 1 year ago
parent
commit
eecc348e53
6 changed files with 44 additions and 46 deletions
  1. 1 0
      src-tauri/Cargo.lock
  2. 1 0
      src-tauri/Cargo.toml
  3. 28 28
      src-tauri/src/lib.rs
  4. 2 1
      src-tauri/tauri.conf.json
  5. 1 0
      src/App.vue
  6. 11 17
      src/pages/login/index.vue

+ 1 - 0
src-tauri/Cargo.lock

@@ -3668,6 +3668,7 @@ dependencies = [
  "tauri",
  "tauri-build",
  "tauri-plugin-mqtt",
+ "url",
 ]
 
 [[package]]

+ 1 - 0
src-tauri/Cargo.toml

@@ -22,3 +22,4 @@ tauri = { version = "2", features = ["macos-private-api"] }
 serde = { version = "1", features = ["derive"] }
 serde_json = "1"
 tauri-plugin-mqtt = "0.1.0"
+url = "2.5.2"

+ 28 - 28
src-tauri/src/lib.rs

@@ -1,38 +1,38 @@
-// use tauri::Emitter
-// use tauri_plugin_mqtt::{Client as MqttClient, Event as MqttEvent};
+use url::Url;
+use std::collections::HashMap;
 
-// #[tauri::command]
-// pub async fn connect(host: String, port: u16) -> Result<(), String> {
-//     let client = MqttClient::new(host, port);
-//     client.connect().await.map_err(|e| e.to_string())
-// }
+// 添加url参数
+#[tauri::command]
+fn add_query_params(base_url: &str, params: HashMap<String, String>) -> Result<String, String> {
+    let mut url = Url::parse(base_url).map_err(|e| e.to_string())?;
+    {
+        let mut query_pairs = url.query_pairs_mut();
+        for (key, value) in params {
+            query_pairs.append_pair(&key, &value);
+        }
+    }
+    Ok(url.to_string())
+}
 
-// #[tauri::command]
-// pub async fn subscribe(topic: String) -> Result<(), String> {
-//     let client = MqttClient::default();
-//     client.subscribe(topic).await.map_err(|e| e.to_string())
-// }
+// 获取url参数
+#[tauri::command]
+fn get_query_params(url: &str) -> Result<HashMap<String, String>, String> {
+    let parsed_url = Url::parse(url).map_err(|e| e.to_string())?;
+    println!("{:?}", parsed_url.username());
+    println!("{:?}", parsed_url.password());
+    println!("{:?}", parsed_url.port());
 
-// #[tauri::command]
-// pub async fn publish(topic: String, message: String) -> Result<(), String> {
-//     let client = MqttClient::default();
-//     client.publish(topic, message).await.map_err(|e| e.to_string())
-// }
+    let mut params = HashMap::new();
+    for (key, value) in parsed_url.query_pairs() {
+        params.insert(key.to_string(), value.to_string());
+    }
+    Ok(params)
+}
 
-// pub fn listen_messages(app: tauri::AppHandle) {
-//     let client = MqttClient::default();
-//     client.on_message(move |msg: MqttMessage| {
-//         let _ = app.emit("mqtt-message", msg);
-//     });
-// }
 pub fn run() {
     tauri::Builder::default()
         .plugin(tauri_plugin_mqtt::init())
-        .invoke_handler(tauri::generate_handler![connect, subscribe, publish])
-        // .setup(|app| {
-        //     listen_messages(app.handle().clone());
-        //     Ok(())
-        // })
+        .invoke_handler(tauri::generate_handler![add_query_params,get_query_params])
         .run(tauri::generate_context!())
         .expect("error while running tauri application");
 }

+ 2 - 1
src-tauri/tauri.conf.json

@@ -17,7 +17,8 @@
         "transparent": true,
         "decorations": false,
         "minWidth": 1300,
-        "minHeight": 800
+        "minHeight": 800,
+        "shadow": false
       }
     ],
     "security": {

+ 1 - 0
src/App.vue

@@ -46,6 +46,7 @@ body {
   border-radius: 13px;
   background: transparent;
   position: relative;
+  border: none;
 
   &>div {
     width: 100%;

+ 11 - 17
src/pages/login/index.vue

@@ -57,36 +57,30 @@
   </div>
 </template>
 <script setup lang="ts">
-import { computed, ref } from 'vue'
-import {
-  connect, disconnect, publish, listen, Payload
-} from '@kuyoonjo/tauri-plugin-mqtt'
+import { computed, onUnmounted, ref } from 'vue'
+import { connect, disconnect, listen } from '@kuyoonjo/tauri-plugin-mqtt'
 import topBar from '@/components/topBar.vue'
 import useStore from '@/store/index'
-import NetService from '@/services/net.service'
 
 const err = ref('')
 const name = ref('test123')
 const room = ref('test')
 const url = ref('mqtts://caner.top:49659')
-const disabled = computed(() => !name.value || !room.value || !url.value || !url.value.includes('mqtts://'))
+const disabled = computed(() => !name.value || !room.value || !url.value || !url.value.startsWith('mqtts:'))
 const store = useStore()
-const netService = new NetService()
 
 async function login() {
   if (disabled.value) return
-  const parsedUrl = url.value.split(':')
-  const newUrl = `${parsedUrl[0]}:${parsedUrl[1]}?username=${room.value}&password=${name.value}&port=${parsedUrl[2] || ''}&client_id=test33`
-  console.log('登陆', newUrl)
-
-  // const a = await netService.get('https://restapi.amap.com/v3/ip?key=76f9007ba8c4c44bb9ad757fe27acb44')
-  // console.log(123, a)
-
-  connect(store.mqtt_client_id, newUrl, { skipVerification: true })
+  const mqttUrl = url.value.replace(/(\/\/)/, `$1${room.value}:${name.value}@`)
+  console.log(123, mqttUrl)
+  await connect(store.mqtt_client_id, mqttUrl, { skipVerification: true })
 }
-listen((payload) => {
-  console.log(6666, payload)
+
+listen((client) => {
+  console.log(6666, client.payload, client.payload.event)
 })
+
+onUnmounted(() => disconnect(store.mqtt_client_id))
 </script>
 <style scoped lang="scss">
 .login {