server.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. extern crate warp;
  2. use super::resolve;
  3. use crate::data::Verge;
  4. use port_scanner::local_port_available;
  5. use tauri::AppHandle;
  6. use warp::Filter;
  7. #[cfg(not(feature = "verge-dev"))]
  8. const SERVER_PORT: u16 = 33331;
  9. #[cfg(feature = "verge-dev")]
  10. const SERVER_PORT: u16 = 11233;
  11. /// check whether there is already exists
  12. pub fn check_singleton() -> Result<(), ()> {
  13. let verge = Verge::new();
  14. let port = verge.app_singleton_port.unwrap_or(SERVER_PORT);
  15. if !local_port_available(port) {
  16. tauri::async_runtime::block_on(async {
  17. let url = format!("http://127.0.0.1:{}/commands/visible", port);
  18. reqwest::get(url).await.unwrap();
  19. Err(())
  20. })
  21. } else {
  22. Ok(())
  23. }
  24. }
  25. /// The embed server only be used to implement singleton process
  26. /// maybe it can be used as pac server later
  27. pub fn embed_server(app_handle: &AppHandle, port: Option<u16>) {
  28. let app_handle = app_handle.clone();
  29. let port = port.unwrap_or(SERVER_PORT);
  30. tauri::async_runtime::spawn(async move {
  31. let commands = warp::path!("commands" / "visible").map(move || {
  32. resolve::create_window(&app_handle);
  33. return format!("ok");
  34. });
  35. warp::serve(commands).bind(([127, 0, 0, 1], port)).await;
  36. });
  37. }