Skip to content

Commit 2dcb742

Browse files
committed
fix ci
1 parent 2e5581c commit 2dcb742

6 files changed

Lines changed: 120 additions & 87 deletions

File tree

File renamed without changes.

crates/starlang/src/application/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@
4444
#![deny(warnings)]
4545
#![deny(missing_docs)]
4646

47-
mod application;
47+
mod core;
4848
mod error;
4949
mod types;
5050

51-
pub use application::{AppController, Application};
51+
pub use core::{AppController, Application};
5252
pub use error::{StartError, StopError};
5353
pub use types::{AppConfig, AppInfo, AppSpec, ConfigValue, StartResult};
5454

File renamed without changes.

crates/starlang/src/supervisor/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
#![deny(warnings)]
5151
#![deny(missing_docs)]
5252

53+
mod core;
5354
mod error;
54-
mod supervisor;
5555
mod types;
5656

5757
/// DynamicSupervisor for starting children on demand.
@@ -63,11 +63,11 @@ mod types;
6363
/// See [`dynamic_supervisor`] module for details.
6464
pub mod dynamic_supervisor;
6565

66-
pub use error::{DeleteError, RestartError, StartError, TerminateError};
67-
pub use supervisor::{
66+
pub use core::{
6867
Supervisor, SupervisorInit, count_children, delete_child, start, start_link, terminate_child,
6968
which_children,
7069
};
70+
pub use error::{DeleteError, RestartError, StartError, TerminateError};
7171
pub use types::{
7272
ChildCounts, ChildInfo, ChildSpec, ChildType, RestartType, ShutdownType, StartChildError,
7373
Strategy, SupervisorFlags,

examples/chat/src/session.rs

Lines changed: 81 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ impl Session {
106106

107107
/// Handle incoming channel messages (broadcasts from other users).
108108
async fn handle_channel_message(&mut self, data: &[u8]) {
109+
tracing::debug!(
110+
nick = ?self.nick,
111+
data_len = data.len(),
112+
"handle_channel_message called"
113+
);
109114
// First, check if this is a presence message and apply it to the tracker
110115
if let Ok(presence_msg) = postcard::from_bytes::<starlang::presence::PresenceMessage>(data)
111116
{
@@ -139,77 +144,83 @@ impl Session {
139144
}
140145

141146
// Now handle the message for client notification
142-
if let Ok(reply) = postcard::from_bytes::<ChannelReply>(data) {
143-
match reply {
144-
ChannelReply::Push {
145-
topic,
146-
event: _,
147-
payload,
148-
} => {
149-
// Decode the room event
150-
if let Ok(room_event) = postcard::from_bytes::<RoomOutEvent>(&payload) {
151-
let room_name = topic.strip_prefix("room:").unwrap_or(&topic);
152-
match room_event {
153-
RoomOutEvent::UserJoined { nick } => {
154-
self.send_event(ServerEvent::UserJoined {
155-
room: room_name.to_string(),
156-
nick,
157-
})
158-
.await;
159-
}
160-
RoomOutEvent::UserLeft { nick } => {
161-
self.send_event(ServerEvent::UserLeft {
162-
room: room_name.to_string(),
163-
nick,
164-
})
165-
.await;
166-
}
167-
RoomOutEvent::Message { from, text } => {
168-
self.send_event(ServerEvent::Message {
169-
room: room_name.to_string(),
170-
from,
171-
text,
172-
})
173-
.await;
174-
}
175-
RoomOutEvent::PresenceState { users } => {
176-
self.send_event(ServerEvent::UserList {
177-
room: room_name.to_string(),
178-
users,
179-
})
180-
.await;
181-
}
182-
RoomOutEvent::PresenceSyncRequest { .. } => {
183-
// Handled by RoomChannel::handle_info above
184-
}
185-
RoomOutEvent::PresenceSyncResponse { nick } => {
186-
// An existing member announced themselves
187-
// Send this as a UserJoined so client adds them to list
188-
tracing::debug!(
189-
room = %room_name,
190-
nick = %nick,
191-
"Received presence sync response, sending UserJoined to client"
192-
);
193-
self.send_event(ServerEvent::UserJoined {
194-
room: room_name.to_string(),
195-
nick,
196-
})
197-
.await;
198-
}
199-
RoomOutEvent::History { messages } => {
200-
// History is already sent directly by session.rs on join
201-
// This is just for consistency - forward if received via channel
202-
self.send_event(ServerEvent::History {
203-
room: room_name.to_string(),
204-
messages,
205-
})
206-
.await;
207-
}
208-
}
147+
if let Ok(ChannelReply::Push {
148+
topic,
149+
event: _,
150+
payload,
151+
}) = postcard::from_bytes::<ChannelReply>(data)
152+
{
153+
// Decode the room event
154+
if let Ok(room_event) = postcard::from_bytes::<RoomOutEvent>(&payload) {
155+
let room_name = topic.strip_prefix("room:").unwrap_or(&topic);
156+
match room_event {
157+
RoomOutEvent::UserJoined { nick } => {
158+
tracing::debug!(
159+
room = %room_name,
160+
joined_nick = %nick,
161+
my_nick = ?self.nick,
162+
"Received UserJoined, sending to client"
163+
);
164+
self.send_event(ServerEvent::UserJoined {
165+
room: room_name.to_string(),
166+
nick,
167+
})
168+
.await;
169+
}
170+
RoomOutEvent::UserLeft { nick } => {
171+
self.send_event(ServerEvent::UserLeft {
172+
room: room_name.to_string(),
173+
nick,
174+
})
175+
.await;
176+
}
177+
RoomOutEvent::Message { from, text } => {
178+
self.send_event(ServerEvent::Message {
179+
room: room_name.to_string(),
180+
from,
181+
text,
182+
})
183+
.await;
184+
}
185+
RoomOutEvent::PresenceState { users } => {
186+
tracing::debug!(
187+
room = %room_name,
188+
users = ?users,
189+
nick = ?self.nick,
190+
"Received PresenceState, sending UserList to client"
191+
);
192+
self.send_event(ServerEvent::UserList {
193+
room: room_name.to_string(),
194+
users,
195+
})
196+
.await;
197+
}
198+
RoomOutEvent::PresenceSyncRequest { .. } => {
199+
// Handled by RoomChannel::handle_info above
200+
}
201+
RoomOutEvent::PresenceSyncResponse { nick } => {
202+
// An existing member announced themselves
203+
// Send this as a UserJoined so client adds them to list
204+
tracing::debug!(
205+
room = %room_name,
206+
nick = %nick,
207+
"Received presence sync response, sending UserJoined to client"
208+
);
209+
self.send_event(ServerEvent::UserJoined {
210+
room: room_name.to_string(),
211+
nick,
212+
})
213+
.await;
214+
}
215+
RoomOutEvent::History { messages } => {
216+
// History is already sent directly by session.rs on join
217+
// This is just for consistency - forward if received via channel
218+
self.send_event(ServerEvent::History {
219+
room: room_name.to_string(),
220+
messages,
221+
})
222+
.await;
209223
}
210-
}
211-
_ => {
212-
// Other replies are handled inline
213224
}
214225
}
215226
}

examples/chat/tests/distribution_test.rs

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ use tokio::process::{Child, Command};
99
use tokio::time::timeout;
1010

1111
/// Helper to start a chat server process.
12-
async fn start_server(name: &str, port: u16, dist_port: u16, connect: Option<&str>) -> Child {
12+
async fn start_server(
13+
name: &str,
14+
port: u16,
15+
dist_port: u16,
16+
ws_port: u16,
17+
http_port: u16,
18+
connect: Option<&str>,
19+
) -> Child {
1320
// Use the debug binary (built by cargo test)
1421
// CARGO_MANIFEST_DIR points to examples/chat, so we go up two levels to workspace root
1522
let manifest_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"));
@@ -22,16 +29,23 @@ async fn start_server(name: &str, port: u16, dist_port: u16, connect: Option<&st
2229
.arg("--port")
2330
.arg(port.to_string())
2431
.arg("--dist-port")
25-
.arg(dist_port.to_string());
32+
.arg(dist_port.to_string())
33+
.arg("--ws-port")
34+
.arg(ws_port.to_string())
35+
.arg("--http-port")
36+
.arg(http_port.to_string());
2637

2738
if let Some(peer) = connect {
2839
cmd.arg("--connect").arg(peer);
2940
}
3041

31-
cmd.env("RUST_LOG", "info,starlang::distribution=debug")
32-
.kill_on_drop(true)
33-
.spawn()
34-
.unwrap_or_else(|e| panic!("Failed to start server from {:?}: {}", binary, e))
42+
cmd.env(
43+
"RUST_LOG",
44+
"info,starlang::distribution=debug,chat_server::session=debug,chat_server::channel=debug",
45+
)
46+
.kill_on_drop(true)
47+
.spawn()
48+
.unwrap_or_else(|e| panic!("Failed to start server from {:?}: {}", binary, e))
3549
}
3650

3751
/// Helper to connect a client and return the stream.
@@ -153,7 +167,7 @@ struct RoomInfo {
153167
#[tokio::test]
154168
async fn test_single_node_chat() {
155169
// Start a single server
156-
let mut server = start_server("node1", 19999, 19000, None).await;
170+
let mut server = start_server("node1", 19999, 19000, 14000, 18080, None).await;
157171

158172
// Give server time to start
159173
tokio::time::sleep(Duration::from_secs(1)).await;
@@ -253,11 +267,12 @@ async fn test_single_node_chat() {
253267
#[tokio::test]
254268
async fn test_cross_node_global_registry() {
255269
// Start node1
256-
let mut node1 = start_server("node1", 29999, 29000, None).await;
270+
let mut node1 = start_server("node1", 29999, 29000, 24000, 28080, None).await;
257271
tokio::time::sleep(Duration::from_secs(1)).await;
258272

259273
// Start node2 and connect to node1
260-
let mut node2 = start_server("node2", 29998, 29001, Some("127.0.0.1:29000")).await;
274+
let mut node2 =
275+
start_server("node2", 29998, 29001, 24001, 28081, Some("127.0.0.1:29000")).await;
261276
tokio::time::sleep(Duration::from_secs(2)).await; // Extra time for distribution handshake
262277

263278
// Connect alice to node1
@@ -284,9 +299,15 @@ async fn test_cross_node_global_registry() {
284299
resp
285300
);
286301

287-
// Give time for global registry to sync
302+
// Give time for global registry to sync and drain any pending messages (like UserList from PushPresenceState)
288303
tokio::time::sleep(Duration::from_millis(500)).await;
289304

305+
// Drain any pending messages from Alice (like UserList sent after her own join)
306+
while let Ok(msg) = timeout(Duration::from_millis(100), read_message(&mut alice)).await {
307+
let event = decode_event(&msg);
308+
tracing::debug!("Drained pending message from Alice: {:?}", event);
309+
}
310+
290311
// Connect bob to node2
291312
let mut bob = connect_client(29998).await;
292313
let _ = read_message(&mut bob).await; // welcome
@@ -356,11 +377,12 @@ async fn test_cross_node_global_registry() {
356377
#[tokio::test]
357378
async fn test_room_list_across_nodes() {
358379
// Start node1
359-
let mut node1 = start_server("node1", 39999, 39000, None).await;
380+
let mut node1 = start_server("node1", 39999, 39000, 34000, 38080, None).await;
360381
tokio::time::sleep(Duration::from_secs(1)).await;
361382

362383
// Start node2 connected to node1
363-
let mut node2 = start_server("node2", 39998, 39001, Some("127.0.0.1:39000")).await;
384+
let mut node2 =
385+
start_server("node2", 39998, 39001, 34001, 38081, Some("127.0.0.1:39000")).await;
364386
tokio::time::sleep(Duration::from_secs(2)).await;
365387

366388
// Connect alice to node1 and create a room

0 commit comments

Comments
 (0)