Server-Sent Events (SSE) support for MoonBit (JS client + Native server)
Dependencies
moon add f4ah6o/sseimport sse.{connect, on_message, on_error, on_open, close}
fn main {
let conn = connect("http://localhost:8080/events")
conn
|> on_message(fn(msg) {
println("Received: \{msg.data}")
})
|> on_error(fn(err) {
println("Error: \{err}")
})
|> on_open(fn(_state) {
println("Connection opened")
})
// Close when done
close(conn)
}import sse.{connect, on}
let conn = connect("http://localhost:8080/events")
conn
|> on("notification", fn(msg) {
println("Notification: \{msg.data}")
})
|> on("update", fn(msg) {
println("Update: \{msg.data}")
})import sse.{connect, setup_auto_reconnect, on_message}
let conn = connect("http://localhost:8080/events")
|> setup_auto_reconnect
|> on_message(fn(msg) {
println("Received: \{msg.data}")
})
// Will automatically reconnect on connection loss
// up to max_retries times with reconnect_interval delayimport sse.{
default_connection_config, connect_with_config, on_message
}
let config = {
...default_connection_config("http://localhost:8080/events")
with_credentials: true
reconnect_interval: 5000
max_retries: 5
}
let conn = connect_with_config(config)
|> on_message(fn(msg) {
println("Event: \{msg.event_name}, Data: \{msg.data}")
})# Build for JavaScript target
moon build --target js
# Run tests
moon test --target js
# Update snapshots after behavioral changes
moon test --target js --updatepub struct ConnectionConfig {
url : String
with_credentials : Bool
reconnect_interval : Int
max_retries : Int
}pub enum EventState {
Connecting
Open
Closed
Error
}impl Show for EventStatepub(all) struct SSEEvent {
data : String
event : String?
id : String?
}pub struct SseMessage {
event_name : String
data : String
origin : String
id : String?
}Server-Sent Events (SSE) support for MoonBit (JS client + Native server)
Dependencies