OdinRoom
On this page
- Properties
- Methods
init()
init(gateway:)
deinit
join(token:)
join(token:)
leave()
updateAudioConfig(_:)
updateGatewayUrl(_:)
setAudioAutopilotMode(_:)
updateUserData(userData:target:)
updatePeerUserData(userData:)
updateRoomUserData(userData:)
updatePosition(x:y:)
setPositionScale(scale:)
addMedia(type:)
addMedia(audioConfig:)
removeMedia(streamHandle:)
removeMedia(media:)
sendMessage(data:targetIds:)
hash(into:)
==(_:_:)
public class OdinRoom: Hashable, ObservableObject
Class to handle ODIN rooms.
A room is the virtual space where clients can communicate with each other.
Properties
roomHandle
public internal(set) var roomHandle: OdinRoomHandle
The underlying room handle to interact with.
ownPeer
public let ownPeer: OdinPeer = .init()
An instance of your own peer in the room.
gateway
public private(set) var gateway: String = ""
The gateway URL used for authentication.
audioAutopilot
public private(set) var audioAutopilot: OdinAudioAutopilotMode = .room
Indicates how and if medias will be added to the capture/playback mix automatically.
audioNode
public internal(set) var audioNode: AVAudioSourceNode!
The underlying object that receives mixed audio data from remote medias in the room.
audioConfig
public private(set) var audioConfig: OdinApmConfig = .init(
voice_activity_detection: true,
voice_activity_detection_attack_probability: 0.9,
voice_activity_detection_release_probability: 0.8,
volume_gate: false,
volume_gate_attack_loudness: -30,
volume_gate_release_loudness: -40,
echo_canceller: false,
high_pass_filter: false,
pre_amplifier: false,
noise_suppression_level: OdinNoiseSuppressionLevel_Moderate,
transient_suppressor: false
)
The audio processing module settings of the room.
id
@Published public private(set) var id: String = ""
The name of the room.
customer
@Published public private(set) var customer: String = ""
The identifier of the customer the room is assigned to.
userData
@Published public private(set) var userData: [UInt8] = []
A byte array with arbitrary user data attached to the room.
connectionStatus
@Published public private(set) var connectionStatus = (
state: OdinRoomConnectionState_Disconnected,
reason: OdinRoomConnectionStateChangeReason_ClientRequested
)
A tuple with current connection status of the room including a reason identifier for the last update.
peers
@Published public private(set) var peers: [UInt64: OdinPeer] = [:]
An array of current peers in the room.
medias
@Published public private(set) var medias: [OdinMediaStreamHandle: OdinMedia] = [:]
An array of current medias in the room.
delegate
public weak var delegate: OdinRoomDelegate?
An optional delegate with custom event callbacks.
remotePeers
public var remotePeers: [UInt64: OdinPeer]
An array of current remote peers in the room.
localMedias
public var localMedias: [OdinMediaStreamHandle: OdinMedia]
An array of current local medias in the room, which can be used for capture.
remoteMedias
public var remoteMedias: [OdinMediaStreamHandle: OdinMedia]
An array of current remote medias in the room, which can be used for playback.
isConnected
public var isConnected: Bool
Indicates wether or not the room handle is connected.
isConnecting
public var isConnecting: Bool
Indicates wether or not the room handle is connecting.
isDisconnected
public var isDisconnected: Bool
Indicates wether or not the room handle is disconnected.
Methods
init()
public convenience init()
Initializes a new room instance.
init(gateway:)
public init(gateway: String) throws
Initializes a new room instance using a custom gateway URL.
deinit
deinit
Destroys the room handle and closes the connection to the server if needed.
join(token:)
public func join(token: String) throws -> UInt64
Joins a room on an ODIN server and returns the ID of your own peer on success. This function takes a signed room token obtained externally that authorizes the client to establish the connection.
join(token:)
public func join(token: OdinToken) throws -> UInt64
Joins a room on an ODIN server and returns the ID of your own peer on success. This function takes a signed room token obtained externally that authorizes the client to establish the connection.
leave()
public func leave() throws
Leaves the room and closes the connection to the server if needed.
updateAudioConfig(_:)
public func updateAudioConfig(_ config: OdinApmConfig) throws
Updates the settings of the audio processing module for the room. This includes everything from noise reduction to smart voice activity detection.
updateGatewayUrl(_:)
public func updateGatewayUrl(_ gateway: String) throws
Updates the gateway URL used for authentication.
setAudioAutopilotMode(_:)
public func setAudioAutopilotMode(_ mode: OdinAudioAutopilotMode) throws
Enables or disables the audio autopilot. This is a simple flag to control whether or not medias in the room will be added to the default capture/playback mix automatically.
updateUserData(userData:target:)
public func updateUserData(userData: [UInt8], target: OdinUserDataTarget) throws
Updates the custom user data for either your own peer or the specified room itself. This data is synced between clients automatically, which allows storing of arbitrary information for each individual peer and even globally for the room if needed.
Note: Use this with target peer before calling OdinRoom.join
to set initial peer user data upon connect.
updatePeerUserData(userData:)
public func updatePeerUserData(userData: [UInt8]) throws
Updates the custom user data for your own peer. This data is synced between clients automatically.
Note: Use this before calling OdinRoom.join
to set initial peer user data upon connect.
updateRoomUserData(userData:)
public func updateRoomUserData(userData: [UInt8]) throws
Updates the custom user data for the current room. This data is synced between clients automatically.
updatePosition(x:y:)
public func updatePosition(x: Float, y: Float) throws
Updates the two-dimensional position of your own peer. The server will use the specified coordinates for each
peer in the same room to apply automatic culling based on unit circles with a radius of 1.0
. This is ideal for
any scenario, where you want to put a large numbers of peers into the same room and make them only ‘see’ each
other while being in proximity. Additionally, you can use setPositionScale
to adjust the distance multiplier
for position updates if needed.
Note: Use this before calling OdinRoom.join
to set the initial peer position upon connect.
setPositionScale(scale:)
public func setPositionScale(scale: Float) throws
Sets the scaling used for all coordinates passed to updatePosition
. This allows adapting to the individual
needs of your game coorinate system if necessary. Only peers within a unit circle with a radius of 1.0
are
able to ‘see’ each other. When changing the position of a peer, the position must be scaled such as that the
maximum distance is one or less. The scaling can be done either manually or by setting the multiplicative scale
here.
Note: Please make sure that all of your client apps use the same scaling.
addMedia(type:)
public func addMedia(type: OdinMediaStreamType) throws -> OdinMediaStreamHandle
Creates a new input stream of the specified type, adds it to the room and returns the media ID on success.
addMedia(audioConfig:)
public func addMedia(audioConfig: OdinAudioStreamConfig) throws -> OdinMediaStreamHandle
Creates new audio input stream using the specified config, adds it to the room and returns the media ID on success. The new audio media can be used to transmit audio samples captured from a local microphone.
removeMedia(streamHandle:)
public func removeMedia(streamHandle: OdinMediaStreamHandle) throws
Removes the media instance matching the specified ID from the room and destroys it.
removeMedia(media:)
public func removeMedia(media: OdinMedia) throws
Removes the specified media instance from the room and destroys it.
sendMessage(data:targetIds:)
public func sendMessage(data: [UInt8], targetIds: [UInt64] = []) throws
Sends a message with arbitrary data to all other peers in the same room. Optionally, you can provide a list of target IDs to send the message to specific peers only.
hash(into:)
public func hash(into hasher: inout Hasher)
Hashes the essential components of the room by feeding them into the given hasher.
==(_:_:)
public static func ==(lhs: OdinRoom, rhs: OdinRoom) -> Bool
Returns a value indicating whether two type-erased hashable instances wrap the same room.