|
1 | 1 | use crate::{ |
2 | | - core::{reqwest, servers::*, Url}, |
| 2 | + core::{ctx::ClientContext, servers::*}, |
3 | 3 | ui::show_error, |
4 | 4 | }; |
5 | 5 | use log::error; |
6 | | -use std::sync::Arc; |
| 6 | +use std::{future::Future, sync::Arc}; |
7 | 7 |
|
8 | 8 | /// Starts all the servers in their own tasks |
9 | 9 | /// |
10 | 10 | /// ## Arguments |
11 | | -/// * `http_client` - The HTTP client to use on the servers |
12 | | -/// * `base_url` - The base URL of the connected server |
13 | | -pub fn start_all_servers(http_client: reqwest::Client, base_url: Arc<Url>) { |
| 11 | +/// * `ctx` - The client context |
| 12 | +pub fn start_all_servers(ctx: Arc<ClientContext>) { |
14 | 13 | // Stop existing servers and tasks if they are running |
15 | 14 | stop_server_tasks(); |
16 | 15 |
|
17 | | - // Spawn the Redirector server |
18 | | - spawn_server_task(async move { |
19 | | - if let Err(err) = redirector::start_redirector_server().await { |
20 | | - show_error("Failed to start redirector server", &err.to_string()); |
21 | | - error!("Failed to start redirector server: {}", err); |
22 | | - } |
23 | | - }); |
24 | | - |
25 | | - // Need to copy the client and base_url so it can be moved into the task |
26 | | - let (a, b) = (http_client.clone(), base_url.clone()); |
27 | | - |
28 | | - // Spawn the Blaze server |
29 | | - spawn_server_task(async move { |
30 | | - if let Err(err) = blaze::start_blaze_server(a, b).await { |
31 | | - show_error("Failed to start blaze server", &err.to_string()); |
32 | | - error!("Failed to start blaze server: {}", err); |
33 | | - } |
34 | | - }); |
35 | | - |
36 | | - // Need to copy the client and base_url so it can be moved into the task |
37 | | - let (a, b) = (http_client.clone(), base_url.clone()); |
38 | | - |
39 | | - // Spawn the HTTP server |
40 | | - spawn_server_task(async move { |
41 | | - if let Err(err) = http::start_http_server(a, b).await { |
42 | | - show_error("Failed to start http server", &err.to_string()); |
43 | | - error!("Failed to start http server: {}", err); |
44 | | - } |
45 | | - }); |
46 | | - |
47 | | - // Spawn the QoS server |
48 | | - spawn_server_task(async move { |
49 | | - if let Err(err) = qos::start_qos_server().await { |
50 | | - show_error("Failed to start qos server", &err.to_string()); |
51 | | - error!("Failed to start qos server: {}", err); |
52 | | - } |
53 | | - }); |
| 16 | + // Create server tasks |
| 17 | + let redirector = redirector::start_redirector_server(); |
| 18 | + let blaze = blaze::start_blaze_server(ctx.clone()); |
| 19 | + let http = http::start_http_server(ctx.clone()); |
| 20 | + let tunnel = tunnel::start_tunnel_server(ctx.clone()); |
| 21 | + let qos = qos::start_qos_server(); |
| 22 | + let telemetry = telemetry::start_telemetry_server(ctx); |
| 23 | + |
| 24 | + // Spawn server tasks |
| 25 | + run_server(redirector, "redirector"); |
| 26 | + run_server(blaze, "blaze"); |
| 27 | + run_server(http, "http"); |
| 28 | + run_server(tunnel, "tunnel"); |
| 29 | + run_server(qos, "qos"); |
| 30 | + run_server(telemetry, "telemetry"); |
| 31 | +} |
54 | 32 |
|
55 | | - // Spawn the telemetry server |
| 33 | +/// Runs the provided server `future` in a background task displaying |
| 34 | +/// and logging any errors if they occur |
| 35 | +#[inline] |
| 36 | +pub fn run_server<F>(future: F, name: &'static str) |
| 37 | +where |
| 38 | + F: Future<Output = std::io::Result<()>> + Send + 'static, |
| 39 | +{ |
56 | 40 | spawn_server_task(async move { |
57 | | - if let Err(err) = telemetry::start_telemetry_server(http_client, base_url).await { |
58 | | - show_error("Failed to start telemetry server", &err.to_string()); |
59 | | - error!("Failed to start telemetry server: {}", err); |
| 41 | + if let Err(err) = future.await { |
| 42 | + show_error(&format!("Failed to start {name} server"), &err.to_string()); |
| 43 | + error!("Failed to start {name} server: {err}"); |
60 | 44 | } |
61 | 45 | }); |
62 | 46 | } |
0 commit comments