11use crate :: models:: { RemoveRemoveEvent , RoomUpdateEvent , RoomView } ;
2- use crate :: packet:: RoomId ;
32use crate :: state:: { AppState , RoomUpdate } ;
43use axum:: {
5- extract:: { Path , State } ,
4+ extract:: State ,
65 http:: header,
76 response:: {
87 sse:: { Event , KeepAlive , Sse } ,
9- Html , IntoResponse ,
8+ IntoResponse ,
109 } ,
1110 routing:: { get, post} ,
1211 Router ,
@@ -23,7 +22,6 @@ pub async fn run(state: Arc<AppState>, port: u16) -> anyhow::Result<()> {
2322 let app = Router :: new ( )
2423 . route ( "/ping" , get ( ping) )
2524 . route ( "/rooms" , get ( rooms_sse) )
26- . route ( "/:roomId" , get ( room_page) )
2725 . route ( "/:roomId" , post ( room_port) )
2826 . with_state ( state) ;
2927
@@ -41,15 +39,7 @@ async fn rooms_sse(State(state): State<Arc<AppState>>) -> impl IntoResponse {
4139 let rx = state. room_state . broadcast_sender . subscribe ( ) ;
4240 let stream = BroadcastStream :: new ( rx) ;
4341
44- let initial_rooms: Vec < RoomUpdateEvent > = state
45- . room_state
46- . rooms
47- . iter ( )
48- . map ( |entry| RoomUpdateEvent {
49- room_id : entry. key ( ) . 0 . clone ( ) ,
50- data : RoomView :: from ( entry. value ( ) ) ,
51- } )
52- . collect ( ) ;
42+ let initial_rooms: Vec < RoomUpdateEvent > = state. room_state . into_views ( ) ;
5343
5444 let init_stream = once ( async move {
5545 Event :: default ( )
@@ -91,76 +81,6 @@ async fn rooms_sse(State(state): State<Arc<AppState>>) -> impl IntoResponse {
9181 )
9282}
9383
94- async fn room_page (
95- Path ( room_id) : Path < String > ,
96- State ( state) : State < Arc < AppState > > ,
97- ) -> impl IntoResponse {
98- let stats = state
99- . room_state
100- . rooms
101- . get ( & RoomId ( room_id) )
102- . map ( |r| r. stats . clone ( ) ) ;
103-
104- if let Some ( stats) = stats {
105- let html = format ! (
106- r#"<!DOCTYPE html>
107- <html lang="en">
108- <head>
109- <meta charset="UTF-8">
110- <meta name="viewport" content="width=device-width, initial-scale=1.0">
111- <title>Room: {}</title>
112- <meta property="og:title" content="Room: {}" />
113- <meta property="og:description" content="Map: {}, Gamemode: {}, Players: {}, Version: {}" />
114- <meta property="og:type" content="website" />
115- <meta property="og:site_name" content="Mindustry PlayerConnect" />
116-
117- <!-- Additional OpenGraph Tags for Stats -->
118- <meta property="og:map_name" content="{}" />
119- <meta property="og:gamemode" content="{}" />
120- <meta property="og:player_count" content="{}" />
121- <meta property="og:locale" content="{}" />
122- <meta property="og:version" content="{}" />
123- <meta property="og:created_at" content="{}" />
124-
125- </head>
126- <body>
127- <h1>Room: {}</h1>
128- <ul>
129- <li><strong>Map:</strong> {}</li>
130- <li><strong>Gamemode:</strong> {}</li>
131- <li><strong>Players:</strong> {}</li>
132- <li><strong>Locale:</strong> {}</li>
133- <li><strong>Version:</strong> {}</li>
134- <li><strong>Created At:</strong> {}</li>
135- </ul>
136- </body>
137- </html>"# ,
138- stats. name,
139- stats. name,
140- stats. map_name,
141- stats. gamemode,
142- stats. players. len( ) ,
143- stats. version,
144- stats. map_name,
145- stats. gamemode,
146- stats. players. len( ) ,
147- stats. locale,
148- stats. version,
149- stats. created_at,
150- stats. name,
151- stats. map_name,
152- stats. gamemode,
153- stats. players. len( ) ,
154- stats. locale,
155- stats. version,
156- stats. created_at
157- ) ;
158- Html ( html)
159- } else {
160- Html ( "<h1>Room not found</h1>" . to_string ( ) )
161- }
162- }
163-
16484async fn room_port ( State ( state) : State < Arc < AppState > > ) -> impl IntoResponse {
16585 state. config . player_connect_port . to_string ( )
16686}
0 commit comments