{"id":3741,"date":"2021-10-01T15:32:13","date_gmt":"2021-10-01T07:32:13","guid":{"rendered":"https:\/\/www.enablex.io\/developer\/?page_id=3741"},"modified":"2025-04-11T13:23:21","modified_gmt":"2025-04-11T05:23:21","slug":"enxroom","status":"publish","type":"page","link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/video-api\/client-api\/android-toolkit\/enxroom\/","title":{"rendered":"EnxRoom Class Room Handler: Android SDK \u2013 Video API"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote\"><p>The EnxRoom is a Derived Class from EnxRtc. It handles all the room-related functions to communicate with the Portal such as connection of Client endpoints to Video Room, publishing and subscription of Streams etc.<\/p><\/blockquote>\n\n\n\n<p>References: <a href=\"#attributes\">Attributes<\/a> &#8211; <a href=\"#methodsd\">Methods<\/a> &#8211; <a href=\"#events\">Observers<\/a><\/p>\n\n\n\n<a name=\"attributes\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Private Attributes<\/h2>\n\n\n\n<ul><li><code>roomID<\/code> &#8211; Unique Room Identifier generated for each Room.<\/li><li><code>clientID<\/code> &#8211; Unique Client ID assigned by the Portal to the client endpoint.<\/li><li><code>streams<\/code> &#8211; Dummy Streams available for subscription. Active Talker Notification gives a list of Streams carrying Media.<\/li><li><code>remoteStreams<\/code> &#8211; List of Remote Streams.<\/li><li><code>localStreams<\/code> &#8211; List of Local Streams.<\/li><li><code>status<\/code> &#8211; Room Connection Status: Enum (1=Connecting, 2=Connected, 0=Disconnected). <\/li><li><code>awaitedParticipants<\/code> &#8211; List of users awaiting Moderator&#8217;s approval to enter a knock-enabled Room.<\/li><li><code>raisedHands<\/code> &#8211; List of users requesting Floor Access in Lecture Mode. <\/li><li><code>approvedHands<\/code> &#8211; List of users approved for Floor Access in Lecture Mode.<\/li><\/ul>\n\n\n\n<a name=\"methodsd\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Methods<\/h2>\n\n\n\n<p>The category-wise list of methods is as given below:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Connection<\/strong><\/p>\n\n\n\n<ul><li><a href=\"..\/room-connection\/#connect-room\" target=\"_blank\" rel=\"noreferrer noopener\"><code>connect()<\/code><\/a> &#8211; To connect client endpoint to the Room. <\/li><li><a href=\"..\/room-connection\/#disconnect-room\" target=\"_blank\" rel=\"noreferrer noopener\"><code>disconnect()<\/code><\/a> &#8211; To disconnect client endpoint from the Room.<\/li><li><a href=\"..\/room-information\/#get-room-meta\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getRoomMetaData()<\/code><\/a> &#8211; To get complete Meta Data of the connected Room.<\/li><li><a href=\"..\/room-information\/#get-room-id\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getRoomId()<\/code><\/a> &#8211; To retrieve the Room ID.<\/li><li><a href=\"..\/room-information\/#get-mode\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getMode()<\/code><\/a> &#8211; To get Room Mode viz. <code>group<\/code> or <code>lecture<\/code>.<\/li><li><a href=\"..\/room-information\/#get-connected-user-role\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getRole()<\/code><\/a>&#8211; To get the role of the user connected to the Room, viz. <code>moderator<\/code> or <code>participant<\/code>.<\/li><li><a href=\"..\/room-information\/#get-connected-user-id\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getClientId()<\/code><\/a> &#8211; To get the Client ID of the user connected to the Room.<\/li><li><a href=\"..\/room-information\/#get-connected-user-name\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getClientName()<\/code><\/a> &#8211; To get the Client Name of the user connected to the Room.<\/li><li><a href=\"..\/room-information\/#get-connected-user-list\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getUserList()<\/code><\/a> &#8211; To get a list of users connected to the Room.<\/li><li><code><a href=\"..\/file-share\/#download-file\" target=\"_blank\" rel=\"noreferrer noopener\"><code><strong><code>getAvailableFiles<\/code><\/strong><\/code><\/a>()<\/code> &#8211; To get a list of files shared in the room after joining the session.<\/li><li><a href=\"..\/local-stream\/#init-stream\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getLocalStream()<\/code><\/a> &#8211; To initialize a local stream at the Client endpoint before it can be published to the Room.<\/li><li><a href=\"..\/room-information\/#whoami\" target=\"_blank\" rel=\"noreferrer noopener\"><code>whoami()<\/code><\/a> &#8211; To provide the complete User Meta Information of the connected user.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Streaming<\/strong><\/p>\n\n\n\n<ul><li><a rel=\"noreferrer noopener\" href=\"..\/publishing-local-stream\/#publish-stream\" target=\"_blank\"><code>publish()<\/code><\/a> &#8211; To publish local stream in the Room.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/publishing-local-stream\/#unpublish-stream\" target=\"_blank\"><code>unpublish()<\/code><\/a> &#8211; To unpublish a local stream from the Room.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/subscribing-remote-streams\/\" target=\"_blank\"><code>subscribe()<\/code><\/a> &#8211; To subscribe to a remote stream to start receiving it.<\/li><li><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/android-toolkit\/receiving-video-quality\/\" target=\"_blank\"><code>setReceiveVideoQuality()<\/code><\/a> &#8211; To opt to receive a specific video quality. <\/li><li><a rel=\"noreferrer noopener\" href=\"..\/active-talkers\/#get-max-talkers\" target=\"_blank\"><code>getMaxTalkers()<\/code><\/a> &#8211; To get the maximum number of talkers allowed in the Active Talker List.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/active-talkers\/#set-talker-count\" target=\"_blank\"><code>setTalkerCount()<\/code><\/a> &#8211; To set the desired number of talkers you want to receive in the Active Talker List. <\/li><li><a rel=\"noreferrer noopener\" href=\"..\/active-talkers\/#get-talker-count\" target=\"_blank\"><code>getTalkerCount()<\/code><\/a> &#8211; To get the number of talkers set to be received in the Active Talker List.<\/li><li><a href=\"..\/active-talkers\/#switch-active-talker\"><code>switchATView()<\/code><\/a> &#8211; Provides the option to switch their talker view from leader\/gallery or vice versa.<\/li><li><a href=\"..\/active-talkers\/#playerview\"><code>getPlayer()<\/code><\/a> &#8211; Provides the option to get a particular EnxPlayerView.<\/li><li><a href=\"..\/active-talkers\/#playerview\"><code>highlightBorderForClient()<\/code><\/a> &#8211; &nbsp;Provides the choice to highlight the EnxPlayer border colour.<\/li><li><a href=\"..\/active-talkers\/#playerview\"><code>changeBgColorForClients()<\/code><\/a> &#8211; To change the background colour for an EnxPlayer.<\/li><li><a href=\"..\/active-talkers\/#playerview\"><code>forceUpdateATList()<\/code><\/a> &#8211; To force reload the active talker view after any manipulation.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/live-media-statistics\/\" target=\"_blank\"><code>enableStats()<\/code><\/a> &#8211; To know statistics of Local &amp; Remote Streams.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/room-information\/#get-local-stream-id\" target=\"_blank\"><code>getLocalStreamID()<\/code><\/a> &#8211; To get Stream ID of the Local Stream.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/room-information\/#get-stream-by-stream-id\" target=\"_blank\"><code>getStreamByStreamId()<\/code><\/a> &#8211; To get Stream Information for the given Stream ID.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/room-information\/#get-remote-streams\" target=\"_blank\"><code>getRemoteStreams()<\/code><\/a> &#8211; To get the list of Remote Streams published in the Room.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/room-information\/#is-publishing\" target=\"_blank\"><code>isPublishing()<\/code><\/a> &#8211; To know if the local Stream is being published in the Room.<\/li><li><code><code><a rel=\"noreferrer noopener\" href=\"..\/audio-only-mode\/\" target=\"_blank\"><code>setAudioOnlyMode<\/code><\/a><\/code>()<\/code> &#8211; To switch to an audio-only call where you can neither receive anybody\u2019s video nor publish your video.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Advance Features<\/strong> <\/p>\n\n\n\n<ul><li><code><a rel=\"noreferrer noopener\" href=\"..\/screen-share\/#start-share\" target=\"_blank\"><code>startScreenShare<\/code><\/a>()<\/code> &#8211; To create a Screen-Sharing Stream.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/screen-share\/#stop-share\" target=\"_blank\"><code>stopScreenShare<\/code><\/a>()<\/code> &#8211; To stop the ongoing Screen-Sharing.<\/li><li><a href=\"..\/screen-share\/#force-stop-share\"><code>stopAllSharing()<\/code><\/a> &#8211; To force stop any ongoing Screen Share\u00a0other user in the Room by the moderator.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/canvas-streaming\/#start-canvas-streaming\" target=\"_blank\"><code>startCanvas<\/code><\/a>()<\/code> &#8211; To start canvas streaming.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/canvas-streaming\/#stop-canvas-streaming\" target=\"_blank\"><code>stopCanvas<\/code><\/a>()<\/code> &#8211; To stop canvas streaming.<\/li><li><a href=\"..\/canvas-streaming\/#force-stop-share\"><code>stopAllSharing()<\/code><\/a> &#8211; To force stop any ongoing Screen Share\u00a0other user in the Room by the moderator.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/annotation\/#annotation-start-stop\" target=\"_blank\"><code>startAnnotation<\/code><\/a>()<\/code> &#8211; To start Annotation on a given Stream object.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/annotation\/#annotation-start-stop\" target=\"_blank\"><code>stopAnnotation<\/code><\/a>()<\/code> &#8211; To stop Annotation on a given Stream object.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/talker-noise-notification\/\" target=\"_blank\"><code>subscribeForTalkerNotification<\/code><\/a>()<\/code> &#8211; To receive notification for the talkers in the Room or the participants acting as a source of the noise.\u00a0<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/custom-signalling\/\" target=\"_blank\"><code>sendUserData<\/code><\/a>()<\/code> &#8211; To send customized data adhering to a structure not bound by the Portal message structure, to one or more users connected in a session.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#pause-resume-parent-room\" target=\"_blank\"><code>pause<\/code><\/a>()<\/code> &#8211;\u00a0To allow the user to pause the Parent Room after joining the Break-Out Room.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#pause-resume-parent-room\" target=\"_blank\"><code>resume<\/code><\/a>()<\/code> &#8211;\u00a0To resume the Parent Room if it was paused while joining the Break-Out Room.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#mute-unmute-parent-room\" target=\"_blank\"><code>muteRoom()<\/code><\/a> &#8211; Allows the user to mute Audio and\/or Video of the Parent Room after joining the Break-Out Room.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/web-toolkit\/hard-muting\/#hard-mute-unmute-room\" target=\"_blank\">unMuteRoom()<\/a><\/code> &#8211; To unmute Audio and\/or Video of the Parent Room after disconnecting from Break-Out Room and resuming the Parent Room.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/detect-local-audio\/\" target=\"_blank\"><code>onSpeechDetected<\/code><\/a>()<\/code> &#8211;\u00a0To send notification to the user when speech is detected at their endpoint.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/detect-local-audio\/\" target=\"_blank\"><code>onNoiseDetected<\/code><\/a>()<\/code> &#8211;\u00a0To send notification to the user when noise is detected at their endpoint.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/enable-proximity-sensor\/\" target=\"_blank\"><code>enableProximitySensor<\/code><\/a>()<\/code> &#8211;\u00a0To enable the Camera to detect the proximity.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/share-log\/\" target=\"_blank\"><code>postClientLogs<\/code><\/a>()<\/code> &#8211;\u00a0To share Console Log with the Portal Tech Team for audit.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Moderator Controls<\/strong><\/p>\n\n\n\n<ul><li><a rel=\"noreferrer noopener\" href=\"..\/hard-muting\/#hard-mute-unmute-room\" target=\"_blank\"><code>hardMute()<\/code><\/a> &#8211; To hard-mute a Room where no participant can talk.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/hard-muting\/#hard-mute-unmute-room\" target=\"_blank\"><code>hardUnMute()<\/code><\/a> &#8211; To switch the Room from a hard-mute state to a normal state.<\/li><li><a href=\"..\/hard-muting\/#hard-mute-unmute-participant\"><code>hardMuteUserAudio()<\/code><\/a> &#8211; Allows the Moderator to hard-mute a Participant\u2019s Audio.<\/li><li><a href=\"..\/hard-muting\/#hard-mute-unmute-participant\"><code>hardMuteUserVideo()<\/code><\/a> &#8211; Allows the Moderator to hard-mute a Participant\u2019s Video Streams.<\/li><li><a href=\"..\/hard-muting\/#hard-mute-unmute-participant\"><code>hardUnMuteUserAudio()<\/code><\/a> &#8211; Allows the Moderator to hard-unmute a Participant\u2019s Audio.<\/li><li><a href=\"..\/hard-muting\/#hard-mute-unmute-participant\"><code>hardUnMuteUserVideo()<\/code><\/a> &#8211; Allows the Moderator to hard-unmute a Participant\u2019s Video Streams.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/recording\/#on-demand-recording\" target=\"_blank\"><code>startRecord()<\/code><\/a> &#8211; To start session recording.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/recording\/#on-demand-recording\" target=\"_blank\"><code>stopRecord()<\/code><\/a> &#8211; To stop ongoing session recording.<\/li><li><a href=\"..\/recording\/#on-demand-live-recording\"><code>startLiveRecording()<\/code><\/a> &#8211; Allows the Moderator to start live recording the session.<\/li><li><a href=\"..\/recording\/#on-demand-live-recording\"><code>stopLiveRecording()<\/code><\/a> &#8211; Allows the Moderator to stop live recording the session.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/participant-role-switch\/\" target=\"_blank\"><code>switchUserRole()<\/code><\/a> &#8211; To change a Participant&#8217;s Role to Moderator.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/room-entry-restriction\/#lock-unlock-room\" target=\"_blank\"><code>lockRoom()<\/code><\/a> &#8211; To allow the Moderator to lock the Room which forbids any new user from joining the Session.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/room-entry-restriction\/#lock-unlock-room\" target=\"_blank\"><code>unLockRoom()<\/code><\/a> &#8211; To allow the Moderator to unlock the Room to allow subsequent users to join the Session.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/disconnect-user\/\" target=\"_blank\"><code>dropUser()<\/code><\/a> &#8211; To allow the Moderator to disconnect \/ force-drop one or more participant(s) from the Session.<\/li><li><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/android-toolkit\/destroy-session\/\" target=\"_blank\"><code>destroy()<\/code><\/a> &#8211; To allow the Moderator to conclude an ongoing session.<\/li><li><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/android-toolkit\/moderate-participants-entry\/\" target=\"_blank\"><code>approveAwaitedUser()<\/code><\/a> &#8211; To allow the Moderator to approve a user\u2019s entry.<\/li><li><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/android-toolkit\/moderate-participants-entry\/\" target=\"_blank\"><code>denyAwaitedUser()<\/code><\/a>  &#8211; To decline a user\u2019s entry to the Session.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/participant-role-switch\/\" target=\"_blank\"><code>switchUserRole()<\/code><\/a> &#8211; To allow the Moderator to promote a Participant to act as a Moderator in the ongoing Session.\u00a0<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/pin-user\/\" target=\"_blank\"><code>pinUsers()<\/code><\/a> &#8211; To allow the Moderator to pin a user(s) to the Active Talker List irrespective of the user\u2019s activity level.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/spotlight-user\/\" target=\"_blank\"><code>addSpotlightUsers()<\/code><\/a> &#8211; To allow the Moderator to spotlight a user which pushes the user\u2019s Stream to the top of Active Talker List\u00a0irrespective of the user\u2019s activity level.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong> Floor Access <\/strong><\/p>\n\n\n\n<ul><li><a href=\"..\/floor-access-control\/#request-floor-access\" target=\"_blank\" rel=\"noreferrer noopener\"><code>requestFloor()<\/code><\/a> &#8211; To allow a Participant to request the Moderator for Floor Access.<\/li><li><a href=\"..\/floor-access-control\/#cancel-floor-access\" target=\"_blank\" rel=\"noreferrer noopener\"><code>cancelFloor()<\/code><\/a> &#8211; To allow participants to cancel their request for Floor Access pending for Moderator\u2019s approval.<\/li><li><a href=\"..\/floor-access-control\/#deny-floor-access\" target=\"_blank\" rel=\"noreferrer noopener\"><code>denyFloor()<\/code><\/a> &#8211; To allow the Moderator to deny a Participant\u2019s request for Floor Access.<\/li><li><a href=\"..\/floor-access-control\/#grant-floor-access\" target=\"_blank\" rel=\"noreferrer noopener\"><code>grantFloor()<\/code><\/a> &#8211; To allow the Moderator to grant Floor Access to one or more Participants one by one.<\/li><li><a href=\"..\/floor-access-control\/#finish-floor-access\" target=\"_blank\" rel=\"noreferrer noopener\"><code>finishFloor()<\/code><\/a> &#8211; To allow the Participant to announce the completion of Floor Access and release Floor Access.<\/li><li><a href=\"..\/floor-access-control\/#release-floor-access\" target=\"_blank\" rel=\"noreferrer noopener\"><code>releaseFloor()<\/code><\/a> &#8211; To allow the Moderator to terminate the Floor Access granted to a Participant.<\/li><li><a href=\"..\/floor-access-control\/#invite-floor\" target=\"_blank\" rel=\"noreferrer noopener\"><code>inviteToFloor()<\/code><\/a> &#8211; To allow the Moderator to invite any Participant in the ongoing conference to the Floor and talk.<\/li><li><a href=\"..\/floor-access-control\/#cancel-floor-invite\" target=\"_blank\" rel=\"noreferrer noopener\"><code>cancelFloorInvite()<\/code><\/a> &#8211; To allow the Moderator to cancel a Floor Invitation sent to a Participant.<\/li><li><a href=\"..\/floor-access-control\/#accept-floor-invite\" target=\"_blank\" rel=\"noreferrer noopener\"><code>acceptInviteFloorRequest()<\/code><\/a> &#8211; To allow the Participant to accept the invitation to the Floor and talk.<\/li><li><a href=\"..\/floor-access-control\/#reject-floor-invite\" target=\"_blank\" rel=\"noreferrer noopener\"><code>rejectInviteFloor()<\/code><\/a> &#8211; To allow the invited Participant to reject the invitation to the Floor.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Devices<\/strong><\/p>\n\n\n\n<ul><li><a rel=\"noreferrer noopener\" href=\"..\/get-devices\/\" target=\"_blank\"><code>getDevices()<\/code><\/a> &#8211; To get a list of Audio devices connected to the client endpoint.<\/li><li><a href=\"..\/get-devices\/#get-selected-devices\" target=\"_blank\" rel=\"noreferrer noopener\"><code>getSelectedDevice()<\/code><\/a> &#8211; To get the name of the currently selected device by the user.<\/li><li><a rel=\"noreferrer noopener\" href=\"..\/switch-camera-mic-speaker\/#switch-mic\" target=\"_blank\"><code>switchMediaDevice()<\/code><\/a> &#8211; To switch to another Audio device.<\/li><li><a href=\"..\/switch-camera-mic-speaker\/#switch-camera\"><code>switchCamera()<\/code><\/a> &#8211; Allows to switch between Rear and Front Camera as a source for the published Stream.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Break Out Room <\/strong><\/p>\n\n\n\n<ul><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#create-breakout-room\" target=\"_blank\"><code>createBreakOutRoom<\/code><\/a>()<\/code> &#8211; To create a Break-Out Room.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#invite-breakout-room\" target=\"_blank\"><code>inviteToBreakOutRoom<\/code><\/a>()<\/code> &#8211; To allow the Creator\/Owner of a Break-Out Room to invite one or more users from the Parent Room to join the Break-Out Room.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#create-breakout-room-invite\" target=\"_blank\"><code>createAndInviteBreakoutRoom<\/code><\/a>()<\/code> &#8211;&nbsp;To support certain use-cases where auto-assignment of users into different Break-Out Rooms is required.&nbsp;<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#join-breakout-room\" target=\"_blank\"><code>joinBreakOutRoom<\/code><\/a>()<\/code> &#8211;&nbsp;To allow users to join a Break-Out room on being invited by the creator.<\/li><li><code><a rel=\"noreferrer noopener\" href=\"..\/break-out-room\/#reject-break-out-room\" target=\"_blank\"><code>rejectBreakOutRoom<\/code><\/a>()<\/code> &#8211;&nbsp;To allow the invited user to reject the invitation to join a Break-Out Room.<\/li><li><a href=\"..\/break-out-room\/#clearall-breakout-room\"><code>clearAllBreakOutSession()<\/code><\/a> &#8211; Allows the participant to clear all Break-Out Rooms.<\/li><li><a href=\"..\/break-out-room\/#destroyall-breakout-rooms\"><code>destroyAllBreakOutSession()<\/code><\/a> &#8211; Allows the moderator to destroy all the Breakout Room sessions.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Messaging &amp; File Sharing<\/strong> <\/p>\n\n\n\n<ul><li><a href=\"..\/chat\/\" target=\"_blank\" rel=\"noreferrer noopener\"><code>sendMessage()<\/code><\/a> &#8211; To send public and private messages to other users in the Room.<\/li><li><code><a href=\"..\/file-share\/#upload-file\" target=\"_blank\" rel=\"noreferrer noopener\"><code>sendFiles<\/code><\/a>()<\/code> &#8211; To upload files to share with all or selected users in the Room.<\/li><li><code><a href=\"..\/file-share\/#download-file\" target=\"_blank\" rel=\"noreferrer noopener\"><code>downloadFile<\/code><\/a>()<\/code> &#8211; To download available files.<\/li><li><code><a href=\"..\/file-share\/#download-file\" target=\"_blank\" rel=\"noreferrer noopener\"><code>cancelDownload<\/code><\/a>()<\/code> &#8211; To cancel the ongoing file download job taking place at your endpoint.<\/li><li><code><a href=\"..\/file-share\/#cancel-upload\" target=\"_blank\" rel=\"noreferrer noopener\"><code>CancelUpload<\/code><\/a>()<\/code> &#8211; To cancel an ongoing file upload job initiated by you.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Miscellaneous<\/strong><\/p>\n\n\n\n<ul><li><a rel=\"noreferrer noopener\" href=\"..\/share-log\/\" target=\"_blank\"><code>postClientLogs()<\/code><\/a> &#8211; To submit client endpoint logs to the Portal Team to audit <\/li><li><a rel=\"noreferrer noopener\" href=\"..\/audio-only-mode\/\" target=\"_blank\"><code>changeToAudioOnly()<\/code><\/a> &#8211; To change from normal to Audio-Only mode where the user can neither receive or publish their video and vice-versa.<\/li><li><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/android-toolkit\/handle-application-switch\/\" target=\"_blank\"><code>stopVideoTracksOnApplicationBackground()<\/code><\/a> &#8211;  To configure the state of streams when moving the application from foreground to background.<\/li><li><a rel=\"noreferrer noopener\" href=\"\/developer\/video-api\/client-api\/android-toolkit\/handle-application-switch\/\" target=\"_blank\"><code>startVideoTracksOnApplicationForeground()<\/code><\/a> &#8211;  To configure the state of streams when moving the application from background to foreground.<\/li><li><a href=\"..\/join-aside-room\/\"><code>joinAsideRoom()<\/code><\/a> &#8211; To join Aside Room.<\/li><\/ul>\n\n\n\n<a name=\"events\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Observers &amp; their Callbacks<\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Room Observer<\/h3>\n\n\n\n<p>Given below is a list of Callbacks for Room-related events categorized by their functions. The Room Observer is initiated along with <a href=\"..\/room-connection\/#init-room\">Room Initialization Process<\/a>.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Connection<\/strong><\/p>\n\n\n\n<ul><li><code>onRoomConnected<\/code> &#8211; Acknowledgment to the user when the client endpoint is connected to the room successfully.<\/li><li><code>onRoomDisConnected<\/code> &#8211; Acknowledgment to the user when the client endpoint gets disconnected from the Room.<\/li><li><code>onRoomError<\/code> &#8211; Acknowledgment to the user when the client endpoint fails to connect to the Room.<\/li><li><code>onUserConnected<\/code> &#8211; Notification to everyone in the Room when a new user enters the Room.<\/li><li> <code style=\"background-color: rgb(255, 255, 255);\">onUserDisConnected<\/code> &#8211; Notification to everyone in the Room when a user is disconnected from the Room.<\/li><li><code>onConnectionLost<\/code> &#8211; Acknowledgment to the user when the client endpoint loses network connection. <\/li><li><code>onConnectionInterrupted<\/code> &#8211; Acknowledgment to the user when the client endpoint&#8217;s connection is interrupted such as a switch from WiFi to 4G and vice versa. <\/li><li><code>onUserReconnectSuccess<\/code>&nbsp;&#8211; Acknowledgment to the user when the client endpoint gets reconnected with the Portal successfully.<\/li><li><code>onReconnect<\/code>&nbsp;&#8211; Acknowledgment to the user when the client endpoint is trying to reconnect within the given time period. <\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Streaming<\/strong><\/p>\n\n\n\n<ul><li><code>onPublishedStream<\/code> &#8211; Acknowledgment to the user when the user&#8217;s Stream has been published into the Room successfully.<\/li><li><code>onUnPublishedStream<\/code> &#8211; Acknowledgment to the user when the user&#8217;s Stream has been unpublished\/removed from the Room.<\/li><li><code>onStreamAdded<\/code> &#8211; Notification to everyone in the Room when a Stream is published in the Room.<\/li><li><code>onRemovedStream<\/code> &#8211; Notification to everyone in the Room when a Stream is unpublished\/removed from the Room.<\/li><li><code>onSubscribedStream<\/code> &#8211; Acknowledgment to the user when they have successfully subscribed to a Remote Stream. <\/li><li><code>onActiveTalkerList<\/code> &#8211; Notification to everyone in the Room when the list of Active Talkers is updated.<\/li><li><code>onActiveTalkerView<\/code> &#8211; Video UI View built on list of Active Talkers.<\/li><li><code>onCanvasStarted<\/code> &#8211; Notification to everyone in the Room that a Canvas Streaming has started.<\/li><li><code>onCanvasStopped<\/code> &#8211; Notification to everyone in the Room that the ongoing Canvas Streaming has stopped.<\/li><li><code>onDialStateEvents<\/code> -Notification to the call initiator about the status of the dial-out process as received from Gateway. The JSON Response returns status codes as: <em>initiated, calling, connecting, connected<\/em>, and <em>terminated<\/em>.<\/li><li><code>onDTMFCollected <\/code>&#8211; Notification when DTMF input is collected. It gets the String of digits collected.<\/li><li><code>onOutBoundCallCancel:<\/code>&nbsp;Notification to the call initiator when the participant gets disconnected.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Devices<\/strong><\/p>\n\n\n\n<ul><li><code>onNotifyDeviceUpdate<\/code> &#8211; Acknowledgment to the user that the Audio device is changed.<\/li><li><code>onDeviceAdded<\/code> &#8211; Acknowledgment to the user that a new Audio device is added.<\/li><li><code>onDeviceRemoved<\/code> &#8211; Acknowledgment to the user that the Audio device is removed.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Miscellaneous<\/strong><\/p>\n\n\n\n<ul><li><code>onEventError<\/code> &#8211; Acknowledgment to the user when client endpoint fails to perform an event.<\/li><li><code>onSwitchedUserRoleChange<\/code>&nbsp;&#8211; Acknowledgment to the Moderator when they switch a user&#8217;s role.<\/li><li><code>onUserRoleChanged<\/code>&nbsp;&#8211; Notification to everyone in the Room when a user is newly appointed as moderator and additional information provided to the newly appointed moderator. <\/li><li><code>onReceivedChatDataRoom&nbsp;<\/code>&#8211; Client endpoint receives messages in JSONObject.<\/li><li><code>onAckSwitchedRoom<\/code> &#8211; Acknowledgment to the Moderator when when Room Mode switch is done.<\/li><li><code>onRoomModeSwitched<\/code> &#8211; Notification to everyone in the room when a moderator switched Room Mode.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Aside Room Observer <\/h3>\n\n\n\n<p><strong>Observer<\/strong>: <code>EnxRoom.EnxAsideRoomObserver <\/code> &#8211; To receive the following callbacks: <\/p>\n\n\n\n<ul><li><code>onJoinedAsideRoom<\/code>&nbsp;\u2013 Notification when joined room aside.<\/li><li><code>onFailedAsideRoom<\/code>&nbsp;\u2013 Notification when failed to join room aside.<\/li><li><code>onDisconnectedAsideRoom&nbsp;<\/code>\u2013 Notification when disconnected to joined room aside.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Log Observer<\/h3>\n\n\n\n<p><strong>Observer<\/strong>: <code>EnxRoom.setLogsObserver(EnxLogsObserver-Object) <\/code>&#8211; To receive the following callbacks:<\/p>\n\n\n\n<ul><li> <code>onLogUploaded<\/code> &#8211; When log is uploaded to the Server successfully<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Recording Observer <\/h3>\n\n\n\n<p><strong>Observer<\/strong>: <code>EnxRoom.setRecordingObserver(EnxRecordingObserver-Object)<\/code> &#8211; To receive the following callbacks: <\/p>\n\n\n\n<ul><li><code>onStartRecordingEvent<\/code> &#8211; Acknowledgment to the Moderator when Recording starts.<\/li><li><code>onStopRecordingEvent<\/code> &#8211; Acknowledgment to the Moderator when Recording stops.<\/li><li><code>onRoomRecordingOn<\/code> &#8211; Notification to all the participants when Recording starts.<\/li><li><code>onRoomRecordingOff<\/code> &#8211; Notification to all the participants when Recording stops.<\/li><li><code>onACKStartLiveRecording<\/code>&nbsp;\u2013 Acknowledgment callback to the Moderator when the Live Recording starts.<\/li><li><code>onLiveRecordingNotification<\/code>&nbsp;\u2013 Notification to all the participants in the conference that the Live Recording has started\/stopped.<\/li><li><code>onRoomliverecordOn<\/code>&nbsp;\u2013 Notification to the new user joining the Session if the session is being recorded live.<\/li><li><code>onACKStopLiveRecording<\/code>&nbsp;\u2013 Acknowledgment callback when the Live Recording stops.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Hard Mute Observer<\/h3>\n\n\n\n<p><strong> Observer: <\/strong><code>EnxRoom.setMuteRoomObserver(EnxMuteRoomObserver-Object)<\/code> &#8211; To receive the following callbacks:  <\/p>\n\n\n\n<ul><li><code>onMutedRoom<\/code> &#8211; Acknowledgment to the Moderator when the Room is put on a Hard Mute state.<\/li><li><code>onUnMutedRoom<\/code> &#8211; Acknowledgment to the Moderator when the Room is put off a Hard Mute state.<\/li><li><code>onReceivedMuteRoom<\/code> &#8211; Notification to all the participants when the Room is put on a Hard Mute state.<\/li><li><code>onReceivedUnMuteRoom<\/code> &#8211; Notification to all the participants when the Room is put off a Hard Mute state.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Screen Share Observer<\/h3>\n\n\n\n<p><strong>Observer<\/strong>:  <code>EnxRoom.setScreenShareObserver(EnxScreenShareObserver-Object)<\/code> &#8211; To receive the following callbacks:  <\/p>\n\n\n\n<ul><li><code>onScreenSharedStarted<\/code> &#8211; Notification to everyone in the Room when Screen Sharing starts.<\/li><li><code>onScreenSharedStopped<\/code> &#8211; Notification to everyone in the Room when Screen Sharing stops.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>File Share Observer<\/h3>\n\n\n\n<p><strong>Observer<\/strong>:  <code>setFileShareObserver(EnxFileShareObserver-Object)<\/code> &#8211; To receive the following callbacks:  <\/p>\n\n\n\n<ul><li><strong>At File Sender&#8217;s End<\/strong><ul><li><code>onInitFileUpload<\/code> &#8211; Acknowledgment to the sender when a file upload process is initiated.<\/li><li><code>onFileUploaded<\/code> &#8211; Acknowledgment to the sender when the file is uploaded.<\/li><li><code>onFileUploadFailed<\/code> &#8211; Acknowledgment to the sender when the file upload process fails.<\/li><\/ul><\/li><li> <strong>At File Receiver&#8217;s End<\/strong> <ul><li><code>onFileUploadStarted<\/code> &#8211; Notification to the intended receiver when a file is being uploaded.<\/li><li><code>onFileAvailable<\/code> &#8211; Notification to the intended receiver when a file is ready for download.<\/li><\/ul><\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Bandwidth Observer<\/h3>\n\n\n\n<p><strong>Observer<\/strong>:  <code>EnxRoom.setBandwidthObserver(EnxBandwidthObserver-Object)<\/code> &#8211; To receive the following callbacks:<\/p>\n\n\n\n<ul><li><code>onBandWidthUpdated<\/code> &#8211; Notification to the user when a significant change is noticed in the downstream bandwidth at the client endpoint.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Lecture Mode Observer <\/h3>\n\n\n\n<p><strong>Observer<\/strong>:  <code>EnxRoom.setChairControlObserver(EnxChairControlObserver-Object)<\/code> &#8211; To receive the following callbacks:    <\/p>\n\n\n\n<ul><li><code>onFloorRequested<\/code> &#8211; Acknowledgment to the Participant when their request for Floor Access is sent to the Moderator.<\/li><li><code>onFloorRequestReceived<\/code> &#8211; Notification to the Moderator when a new request for Floor Access is received.<\/li><li><code>onGrantedFloorRequest<\/code> &#8211; Notification to the Participant when the Moderator grants them Floor Access.<\/li><li><code>onDeniedFloorRequest<\/code> &#8211; Notification to the Participant when the Moderator denies Floor Access to them.<\/li><li><code>onReleasedFloorRequest<\/code> &#8211; Notification to the Participant when the Moderator revokes their Floor Access permission.<\/li><li><code>onProcessFloorRequested<\/code> &#8211; Acknowledgment to the Moderator on his actions regarding Floor Requests such as grant, deny, and release floor access.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Active Talker Observer<\/h3>\n\n\n\n<p><strong>Observer<\/strong>:  <code>EnxRoom.setTalkerObserver(EnxTalkerObserver-Object)<\/code> &#8211; To receive the following callbacks:<\/p>\n\n\n\n<ul><li><code>onMaxTalkerCount<\/code> &#8211; Notification to the user with information on the maximum number of permissible Active Talkers in the Room.<\/li><li><code>onGetTalkerCount<\/code> &#8211; Notification to the user with information on the number of Talkers set to be received in the Active Talker List.<\/li><li><code>onSetTalkerCount<\/code> &#8211; Acknowledgment to the user when they update the number of Talkers to be received in the Active Talker List. <\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Stats Observer<\/h3>\n\n\n\n<p>Given below is a list of Callbacks for the Stats Observer. The Stats Observer is initiated along with the <a href=\"..\/live-media-statistics\/#init-stats\">Stats Enabling Process<\/a>.     <\/p>\n\n\n\n<ul><li><code>onAcknowledgeStats<\/code> &#8211; Acknowledgment to the user when the Stream stats are enabled or disabled.<\/li><li><code>onReceivedStats<\/code> &#8211; Notification to the user when Stream Statistics are received.<\/li><\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<p>\u2190 <a href=\"..\/enxrtc\/\"><\/a><a href=\"..\/enxrtc\/\">EnxRtc \u2013 Base Class<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p class=\"has-text-align-center\"><a href=\"..\/\">Index<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p class=\"has-text-align-right\"> <a href=\"..\/enxstream\/\">EnxStream \u2013 Stream Handler<\/a> \u2192 <\/p>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The EnxRoom is a Derived Class from EnxRtc. It handles all the room-related functions to communicate with the Portal such as connection of Client endpoints to Video Room, publishing and subscription of Streams etc. References: Attributes &#8211; Methods &#8211; Observers Private Attributes roomID &#8211; Unique Room Identifier generated for each Room. clientID &#8211; Unique Client ID assigned by the Portal to the client endpoint. streams &#8211; Dummy Streams available for&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3740,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":""},"featured_image_src":null,"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"featured":false,"featured-large":false},"uagb_author_info":{"display_name":"vcxdevwpadmin","author_link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/author\/vcxdevwpadmin\/"},"uagb_comment_info":0,"uagb_excerpt":"The EnxRoom is a Derived Class from EnxRtc. It handles all the room-related functions to communicate with the Portal such as connection of Client endpoints to Video Room, publishing and subscription of Streams etc. References: Attributes &#8211; Methods &#8211; Observers Private Attributes roomID &#8211; Unique Room Identifier generated for each Room. clientID &#8211; Unique Client&hellip;","_links":{"self":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/3741"}],"collection":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/comments?post=3741"}],"version-history":[{"count":0,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/3741\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/3740"}],"wp:attachment":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/media?parent=3741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}