HandRaise, Peer count and Support for Large Rooms
Handle Raise and Lower Hand
Previously, We had to implement hand raise functionality with peer metadata. But that is no more required, We have made raising/lowering hand as first class API on HMSSDK.
Requirements
SDK version 1.9.0 or higher
How to Raise Hand
You can use raiseLocalPeerHand
method available on HMSSDK
instance to raise hand of local peer.
// `hmsInstance` is an instance of `HMSSDK` class await hmsInstance.raiseLocalPeerHand();
How to Lower Hand
You can use lowerLocalPeerHand
method available on HMSSDK
instance to lower hand of local peer.
// `hmsInstance` is an instance of `HMSSDK` class await hmsInstance.lowerLocalPeerHand();
How to Lower Hand of Remote Peer
You can use lowerRemotePeerHand
method available on HMSSDK
instance to lower hand of remote peer.
It accepts a peer (an instance of the HMSPeer class) of whom you want to lower the hand.
// `hmsInstance` is an instance of `HMSSDK` class // `peer` is a remote peer of whom we want to lower the hand await hmsInstance.lowerRemotePeerHand(peer);
How to know when a Peer raises or lowers hand
Whenever local/remote peer raises or lowers hand, HMSUpdateListenerActions.ON_PEER_UPDATE
event
is emitted with HMSPeerUpdate.HAND_RAISED_CHANGED
update type. You can subscribe to this event and update the UI for updated peer.
const onPeerListener = (data: { peer: HMSPeer; type: HMSPeerUpdate; }) => { const { peer, type } = data; if (type === HMSPeerUpdate.HAND_RAISED_CHANGED) { // {peer} has either raised or lowered its hand // Update UI for the {peer} // Parsing the updated Metadata const isHandRaised = peer.isHandRaised; } }; hmsInstance.addEventListener(HMSUpdateListenerActions.ON_PEER_UPDATE, onPeerListener);
Get current hand raise status of peer
Now, HMSPeer
instance has isHandRaised
property on it. It will be true
when
peer has raised it's hand and false
otherwise. You can use peer.isHandRaised
property to
get the current status.
hmsPeer.isHandRaised;
How to get Total Peer count of the Room
You can use peerCount
property of HMSRoom
instance to get the latest peer count of the room.
Whenever peer count is updated, HMSUpdateListenerActions.ON_ROOM_UPDATE
event is emitted with HMSRoomUpdate.ROOM_PEER_COUNT_UPDATED
update type.
const roomUpdateHandler = (data: { room: HMSRoom; type: HMSRoomUpdate; }) => { if (data.type === HMSRoomUpdate.ROOM_PEER_COUNT_UPDATED) { // Update UI of `room.peerCount` } }; hmsInstance.addEventListener( HMSUpdateListenerActions.ON_ROOM_UPDATE, roomUpdateHandler );
Large Room changes
Get list of peers on join
When local peer join a room, it will not receive ON_PEER_UPDATE
with
type === HMSPeerUpdate.PEER_JOINED
for each remote peer like it used to.
Now, ON_PEER_LIST_UPDATED
event is emitted with list of all the peers present
in the room.
You can subscribe to ON_PEER_LIST_UPDATED
event to get list of added or removed peers -
const peerListUpdateHandler = (data: { addedPeers: HMSPeer[]; removedPeers: HMSPeer[]; }) => { // here, // `data.addedPeers` is list of added peers in room // `data.removedPeers` is list of removed peers from room }; hmsInstance.addEventListener( HMSUpdateListenerActions.ON_PEER_LIST_UPDATED, peerListUpdateHandler );
Note that on subsequent peer joins, both ON_PEER_LIST_UPDATED
and ON_PEER_UPDATE
with type === HMSPeerUpdate.PEER_JOINED
events are emitted.
Peer List Iterator API
You don't want to fetch every peer if the room is very large, use the peer list iterator instead.
How to get peer list iterator
You call getPeerListIterator
method on HMSSDK
instance to get HMSPeerListIterator
.
getPeerListIterator
method has following HMSPeerListIteratorOptions
options -
byRoleName?: string
- filter by role of the peersbyPeerIds?: string[]
-peerID
s of the peers you want to fetch with iterator.limit?: number
- number of peers fetched by the iterator innext
method call. Default value is10
// calling `getPeerListIterator` without any options const peerListIterator = hmsInstance.getPeerListIterator(); // calling `getPeerListIterator` with some options const peerListIterator = hmsInstance.getPeerListIterator({ limit: 10, byRoleName: 'viewer-realtime' });
If you wish to filter peers based on role name or peer ids, you can pass them in HMSPeerListIteratorOptions.
limit is the number of peers you want to fetch in one go.
Now with peerListIterator instance you can incremently load peers.
How to use peer iterator to load peers incremently
You can use next
method on HMSPeerListIterator
instance to fetch the next set of peers.
try { const peers = await peerListIterator.next(); // store newly loaded peers to show in UI } catch (error) { // handle error returned by `next` method here }
How to check if more peers are available to load
You can use hasNext
method on HMSPeerListIterator
instance to check if there are more peers available to fetch.
try { const hasNext = await peerListIterator.hasNext(); if (hasNext) { // can fetch more peers by calling `next` method } else { // There are no more peers available to fetch right now } } catch (error) { // handle error returned by `hasNext` method here }
How to check the total count of peers in the peer list
You use totalCount
property on HMSPeerListIterator
instance to know how many peers are there in
the peer list. This property is updated whenever you can next
method, initially it is zero. so,
ensure you have called peerListIterator.next()
method before using totalCount
property.
try { await peerListIterator.next(); // `totalCount` is the number of peers in the room const totalCount = peerListIterator.totalCount; } catch (error) { // handle error returned by `next` method here }