Elixir server SDK for Jellyfish. Currently it allows for:
- making API calls to Jellyfish server (QoL wrapper for HTTP requests)
- listening to Jellyfish server events via WebSocket
The package can be installed by adding jellyfish_server_sdk
to your list of dependencies in mix.exs
:
def deps do
[
{:jellyfish_server_sdk, "~> 0.4.0"}
]
end
Define the connection configuration in the mix config, specifying server address and authentication token (for more information see Jellyfish docs)
config :jellyfish_server_sdk,
server_address: "localhost:5002",
server_api_token: "your-jellyfish-token",
secure?: true
Alternatively, the connection options can be provided when creating a Jellyfish.Client
or starting Jellyfish.WSNotifier
:
client =
Jellyfish.Client.new(server_address: "localhost:5002", server_api_token: "your-jellyfish-token")
{:ok, notifier} =
Jellyfish.WSNotifier.start(
server_address: "localhost:5002",
server_api_token: "your-jellyfish-token"
)
Make API calls to Jellyfish and receive server events:
# start process responsible for receiving events
{:ok, notifier} = Jellyfish.WSNotifier.start()
:ok = Jellyfish.WSNotifier.subscribe_server_notifications(notifier)
# create HTTP client instance
client = Jellyfish.Client.new()
# Create room
{:ok, %Jellyfish.Room{id: room_id}, jellyfish_address} = Jellyfish.Room.create(client, max_peers: 10)
room_id
# => "8878cd13-99a6-40d6-8d7e-8da23d803dab"
# Add peer
{:ok, %Jellyfish.Peer{id: peer_id}, peer_token} =
Jellyfish.Room.add_peer(client, room_id, Jellyfish.Peer.WebRTC)
receive do
{:jellyfish, %Jellyfish.Notification.PeerConnected{room_id: ^room_id, peer_id: ^peer_id}} ->
# handle the notification
end
# Delete peer
:ok = Jellyfish.Room.delete_peer(client, room_id, peer_id)
List of structs representing events can be found in the docs.
When calling mix test
it will automatically start the Jellyfish container under the hood.
Tests on CI are run with the use of docker-compose, to run it locally in the same way as on CI run mix integration_test
.
Copyright 2023, Software Mansion
Licensed under the Apache License, Version 2.0