forked from
slices.network/quickslice
Auto-indexing service and GraphQL API for AT Protocol Records
1import gleam/erlang/process
2
3pub type SubscriptionMessage {
4 SubscriptionData(id: String, data: String)
5}
6
7/// Send a subscription data message to the handler process
8@external(erlang, "websocket_ffi_impl", "send_to_handler")
9pub fn send_to_handler(
10 handler_pid: process.Pid,
11 subscription_id: String,
12 data: String,
13) -> Nil
14
15/// Send a ping to trigger mailbox check
16@external(erlang, "websocket_ffi_impl", "send_ping")
17pub fn send_ping(handler_pid: process.Pid) -> Nil
18
19/// Check for subscription data messages in the process mailbox
20/// Returns the subscription_id and data if a message is available
21@external(erlang, "websocket_ffi_impl", "receive_subscription_data")
22pub fn receive_subscription_data() -> Result(#(String, String), Nil)
23
24/// Add a selector branch that matches {subscription_data, Id, Data} tuples
25@external(erlang, "websocket_ffi_impl", "select_subscription_data")
26pub fn select_subscription_data(
27 selector: process.Selector(SubscriptionMessage),
28) -> process.Selector(SubscriptionMessage)