Skip to content

Commit 9664f7c

Browse files
committed
wip: migrate some types from network to server crate
1 parent 09484a9 commit 9664f7c

26 files changed

Lines changed: 812 additions & 768 deletions

File tree

Cargo.lock

Lines changed: 12 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ reqwest-websocket = "0.5.0"
8989
# Terminal client exclusive
9090
ratatui = { version = "0.30.0", features = ["unstable"] }
9191
ratatui-image = { version = "8.0.1" }
92-
tui-popup = { version = "0.6.0" }
92+
tui-popup = { version = "0.7.2" }
9393

9494
# GUI client exclusive
9595
bevy = { version = "0.17.3" }

sandpolis-client/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ rand = { workspace = true, optional = true }
4141
# TUI dependencies
4242
ratatui = { workspace = true, optional = true }
4343
color-eyre = { version = "0.6.3", optional = true }
44-
crossterm = { version = "0.28.1", optional = true, features = ["event-stream"] }
44+
crossterm = { version = "0.29.0", optional = true, features = ["event-stream"] }
4545
tui-popup = { workspace = true, optional = true }
4646

4747
[features]

sandpolis-client/src/gui/login.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::gui::input::{LoginDialogState, LoginPhase};
22
use crate::gui::listeners::{DatabaseUpdate, DatabaseUpdateSender};
33
use bevy::prelude::*;
44
use sandpolis_database::{DataCreation, DataIdentifier};
5-
use sandpolis_network::ServerUrl;
5+
use sandpolis_server::ServerUrl;
66
use sandpolis_server::client::SavedServerData;
77
use sandpolis_user::LoginPassword;
88
use sandpolis_user::messages::{LoginRequest, LoginResponse};
@@ -145,12 +145,12 @@ pub fn handle_login_phase2(
145145
.map_err(|e| format!("Connection failed: {}", e))?;
146146

147147
// Get the server's instance ID from the connection
148-
let server_instance_id = connection.inner.data.read().remote_instance;
148+
let server_instance_id = connection.data.read().remote_instance;
149149

150150
// Create login request with hashed password
151151
let login_request = LoginRequest {
152152
username: username_clone.clone(),
153-
password: LoginPassword::new(connection.inner.cluster_id, &password),
153+
password: LoginPassword::new(connection.cluster_id, &password),
154154
totp_token,
155155
lifetime: Some(Duration::from_secs(86400)), // 24 hours
156156
};

sandpolis-client/src/tui/help.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::tui::EventHandler;
2+
use crossterm::event::{Event, KeyCode, KeyEventKind};
23
use ratatui::{
34
buffer::Buffer,
4-
crossterm::event::{Event, KeyCode, KeyEventKind},
55
layout::{Constraint, Layout, Rect},
66
style::{Color, Style, Stylize},
77
text::{Line, Span, Text},
@@ -200,9 +200,11 @@ impl WidgetRef for HelpWidget {
200200

201201
let help_text = Text::from(lines);
202202

203-
Paragraph::new(help_text)
204-
.style(Style::default().bg(Color::Black))
205-
.render_ref(area, buf);
203+
ratatui::widgets::Widget::render(
204+
Paragraph::new(help_text).style(Style::default().bg(Color::Black)),
205+
area,
206+
buf,
207+
);
206208
}
207209
}
208210

sandpolis-client/src/tui/loading.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
use ratatui::{
22
buffer::Buffer,
33
layout::{Alignment, Constraint, Layout, Rect},
4-
prelude::*,
54
style::{Style, Stylize},
65
text::Line,
76
widgets::{Block, Borders, Paragraph, Widget, WidgetRef},
87
};
98
use std::time::{Duration, Instant};
10-
use tui_popup::SizedWidgetRef;
9+
use tui_popup::KnownSize;
1110

1211
#[derive(Debug, Clone)]
1312
pub struct LoadingWidget {
@@ -50,7 +49,7 @@ impl LoadingWidget {
5049
}
5150
}
5251

53-
impl SizedWidgetRef for LoadingWidget {
52+
impl KnownSize for LoadingWidget {
5453
fn width(&self) -> usize {
5554
40
5655
}

sandpolis-client/src/tui/mod.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
use color_eyre::Result;
2-
use ratatui::{
3-
crossterm::event::Event,
4-
crossterm::event::EventStream,
5-
crossterm::event::KeyCode,
6-
crossterm::event::KeyEventKind,
7-
widgets::{Widget, WidgetRef},
8-
};
2+
use crossterm::event::{Event, EventStream, KeyCode, KeyEventKind};
3+
use ratatui::widgets::WidgetRef;
94
use std::time::Duration;
105
use tokio_stream::StreamExt;
116

@@ -27,7 +22,7 @@ where
2722

2823
while !should_quit {
2924
tokio::select! {
30-
_ = interval.tick() => { terminal.draw(|frame| frame.render_widget(&widget, frame.area()))?; },
25+
_ = interval.tick() => { terminal.draw(|frame| widget.render_ref(frame.area(), frame.buffer_mut()))?; },
3126
Some(Ok(event)) = events.next() => {
3227
if let Event::Key(key) = event {
3328
if key.kind == KeyEventKind::Press {

sandpolis-macros/src/lib.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,3 +261,22 @@ fn struct_name_to_id(name: &str) -> u32 {
261261
name.hash(&mut hasher);
262262
(hasher.finish() & 0xFFFF_FFFF) as u32
263263
}
264+
265+
/// Derive macro that implements the `Stream` trait for a struct.
266+
/// Generates a unique 32-bit type tag based on crate name + struct name.
267+
#[proc_macro_derive(Stream)]
268+
pub fn derive_stream(input: TokenStream) -> TokenStream {
269+
let input = parse_macro_input!(input as DeriveInput);
270+
let name = &input.ident;
271+
let type_tag = struct_name_to_id(&name.to_string());
272+
273+
let expanded = quote! {
274+
impl sandpolis_network::stream::Stream for #name {
275+
fn generate_id() -> sandpolis_network::stream::StreamId {
276+
((#type_tag as u64) << 32) | (rand::random::<u32>() as u64)
277+
}
278+
}
279+
};
280+
281+
TokenStream::from(expanded)
282+
}

sandpolis-network/src/cli.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
use crate::ServerUrl;
21
use clap::Parser;
32

43
#[derive(Parser, Debug, Clone)]
5-
pub struct NetworkCommandLine {
6-
/// Server addresses ($S7S_SERVER)
7-
#[clap(long)]
8-
pub server: Option<Vec<ServerUrl>>,
9-
}
4+
pub struct NetworkCommandLine {}

sandpolis-network/src/config.rs

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
use crate::{ServerUrl, cli::NetworkCommandLine};
1+
use crate::cli::NetworkCommandLine;
22
use sandpolis_core::LayerConfig;
33
use serde::{Deserialize, Serialize};
4-
use tracing::debug;
54

65
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
76
pub struct NetworkLayerConfig {
8-
/// Servers to connect to.
9-
///
10-
/// For GS servers, connections will be established to all given values at
11-
/// the same time. For LS servers, agents, and clients, only one connection
12-
/// can be maintained at a time.
13-
pub servers: Option<Vec<ServerUrl>>,
14-
157
/// Instead of maintaining a persistent connection, poll the server on this
168
/// cron expression
179
#[cfg(not(feature = "bootagent"))]
@@ -27,20 +19,7 @@ pub struct NetworkLayerConfig {
2719
}
2820

2921
impl LayerConfig<NetworkCommandLine> for NetworkLayerConfig {
30-
fn override_env(&mut self) {
31-
match std::env::var("S7S_SERVER") {
32-
Ok(server) => {
33-
debug!("Overriding server address from environment");
34-
todo!();
35-
}
36-
Err(_) => todo!(),
37-
}
38-
}
22+
fn override_env(&mut self) {}
3923

40-
fn override_cli(&mut self, args: &NetworkCommandLine) {
41-
if let Some(servers) = &args.server {
42-
debug!("Overriding server address from CLI");
43-
self.servers = Some(servers.to_owned());
44-
}
45-
}
24+
fn override_cli(&mut self, _args: &NetworkCommandLine) {}
4625
}

0 commit comments

Comments
 (0)