Packages
mist
0.11.0
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist/websocket.gleam
import gleam/bit_string
import gleam/erlang/process.{Subject}
import gleam/option.{None, Some}
import glisten/handler.{HandlerMessage, SendMessage}
import mist/internal/websocket.{
BinaryMessage, EventHandler, Handler, Message, TextMessage, WebsocketHandler,
to_binary_frame, to_text_frame,
}
/// Helper to encapsulate the logic to send a provided message over the
/// WebSocket
pub fn send(sender: Subject(HandlerMessage), message: Message) -> Nil {
case message {
TextMessage(data) ->
data
|> bit_string.from_string
|> to_text_frame
BinaryMessage(data) -> to_binary_frame(data)
}
|> SendMessage
|> process.send(sender, _)
Nil
}
pub fn echo_handler(
message: Message,
sender: Subject(HandlerMessage),
) -> Result(Nil, Nil) {
let _ = send(sender, message)
Ok(Nil)
}
pub fn with_handler(func: Handler) -> WebsocketHandler {
WebsocketHandler(on_close: None, on_init: None, handler: func)
}
pub fn on_init(
handler: WebsocketHandler,
func: EventHandler,
) -> WebsocketHandler {
WebsocketHandler(..handler, on_init: Some(func))
}
pub fn on_close(
handler: WebsocketHandler,
func: EventHandler,
) -> WebsocketHandler {
WebsocketHandler(..handler, on_close: Some(func))
}