Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions examples/room_manager/room_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import betterproto

from fishjam import FishjamClient, PeerOptions, Room, RoomOptions
from fishjam._openapi_client.models import RoomConfigRoomType
from fishjam.events import ServerMessagePeerCrashed as PeerCrashed
from fishjam.events import ServerMessagePeerDeleted as PeerDeleted
from fishjam.events import ServerMessageRoomCrashed as RoomCrashed
Expand Down Expand Up @@ -38,8 +39,15 @@ def __init__(self, args: Namespace, logger: Logger):
self.logger = logger
self.config = args

def get_peer_access(self, room_name: str, username: str) -> PeerAccess:
room = self.__find_or_create_room(room_name)
def get_peer_access(
self,
room_name: str,
username: str,
room_type: RoomConfigRoomType | None,
) -> PeerAccess:
room = self.__find_or_create_room(
room_name, room_type or RoomConfigRoomType.FULL_FEATURE
)
peer_access = self.peer_name_to_access.get(username)
peer_in_room = self.__is_in_room(room, peer_access)

Expand All @@ -63,7 +71,9 @@ def handle_notification(self, notification: betterproto.Message):
case _:
pass

def __find_or_create_room(self, room_name: str) -> Room:
def __find_or_create_room(
self, room_name: str, room_type: RoomConfigRoomType
) -> Room:
if room_name in self.room_name_to_room_id:
self.logger.info("Room %s, already exists in the Fishjam", room_name)

Expand All @@ -74,6 +84,7 @@ def __find_or_create_room(self, room_name: str) -> Room:
max_peers=self.config.max_peers,
webhook_url=self.config.webhook_url,
peerless_purge_timeout=self.config.peerless_purge_timeout,
room_type=room_type.value,
)
new_room = self.fishjam_client.create_room(options=options)

Expand Down
17 changes: 15 additions & 2 deletions examples/room_manager/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from flask import Flask, abort, jsonify, request

from fishjam import receive_binary
from fishjam.room import RoomConfigRoomType

from .room_service import RoomService

Expand All @@ -15,7 +16,13 @@ def health_check():

@app.get("/api/rooms/<room_name>/users/<peer_name>")
def get_room_params(room_name, peer_name):
access_data = room_service.get_peer_access(room_name, peer_name)
raw_room_type = request.args.get("roomType")
try:
room_type = RoomConfigRoomType(raw_room_type) if raw_room_type else None
except ValueError:
return abort(400)

access_data = room_service.get_peer_access(room_name, peer_name, room_type)
response = asdict(access_data)

response["peerToken"] = response.pop("peer_token")
Expand All @@ -25,12 +32,18 @@ def get_room_params(room_name, peer_name):
@app.get("/api/rooms")
def get_room_query():
room_name = request.args.get("roomName")
raw_room_type = request.args.get("roomType")
peer_name = request.args.get("peerName")

if not room_name or not peer_name:
return abort(400)

access_data = room_service.get_peer_access(room_name, peer_name)
try:
room_type = RoomConfigRoomType(raw_room_type) if raw_room_type else None
except ValueError:
return abort(400)

access_data = room_service.get_peer_access(room_name, peer_name, room_type)
response = asdict(access_data)

response["peerToken"] = response.pop("peer_token")
Expand Down
8 changes: 6 additions & 2 deletions fishjam/room/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
from fishjam._openapi_client.models import RoomConfig, RoomConfigVideoCodec
from fishjam._openapi_client.models import (
RoomConfig,
RoomConfigRoomType,
RoomConfigVideoCodec,
)

__all__ = ["RoomConfig", "RoomConfigVideoCodec"]
__all__ = ["RoomConfig", "RoomConfigVideoCodec", "RoomConfigRoomType"]