{"id":4634,"date":"2021-12-01T18:15:48","date_gmt":"2021-12-01T10:15:48","guid":{"rendered":"https:\/\/www.enablex.io\/developer\/?page_id=4634"},"modified":"2022-04-07T19:58:51","modified_gmt":"2022-04-07T11:58:51","slug":"floor-access-control","status":"publish","type":"page","link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/video-api\/client-api\/react-native-toolkit\/floor-access-control\/","title":{"rendered":"Floor Access Control: React Native SDK &#8211; Video API"},"content":{"rendered":"\n<p>In Lecture Mode, only the Moderator publishes a stream to the room whereas all other participants subscribe to see and listen to the Moderator. If participants have questions to ask during the session, the Moderator can grant the floor to the participant to publish his stream.<\/p>\n\n\n\n<h4>Table of Contents<\/h4>\n\n\n\n<ul><li><a href=\"#request-floor-access\">Request Floor Access<\/a><\/li><li><a href=\"#cancel-floor-access\">Cancel Requested Floor Access<\/a><\/li><li><a href=\"#grant-floor-access\">Grant Floor Access<\/a><\/li><li><a href=\"#deny-floor-access\">Deny Floor Access<\/a><\/li><li><a href=\"#finish-floor-access\">Finish Floor Access<\/a><\/li><li><a href=\"#release-floor-access\">Release Granted Floor Access<\/a><\/li><li><a href=\"#restore-moderator-session\">Restore Moderator Session<\/a><\/li><li><a href=\"#invite-floor\">Invite Participant to Floor<\/a><\/li><\/ul>\n\n\n\n<a name=\"request-floor-access\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3> Request Floor Access <\/h3>\n\n\n\n<p>A participant requests for Floor access is forwarded to the Moderator using a notification event.<\/p>\n\n\n\n<p><strong>Method:<\/strong> <code>Enx.requestFloor()<\/code> &#8211; No parameter needed. Participant requests floor access<\/p>\n\n\n\n<p><strong>Callbacks:<\/strong> <\/p>\n\n\n\n<ul><li> <code>floorRequested &nbsp; <\/code>&#8211; Requesting Participant received acknowledgement that his request has been received by Moderator<\/li><li> <code>floorRequestReceived&nbsp;<\/code> &#8211; The Moderator receives requests from Participant<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.requestFloor(); \/\/ Participant requests floor access\n\n\/\/ Participant is acknowledged\nfloorRequested : event =&gt;{\n\t\/\/ event { result:1701, msg:'Floor Request Received' }\n}\n\n\/\/ Moderator receive Floor Access Request\nfloorRequestReceived : event =&gt;{\n\t\/\/ event { clientId : 1234, name : 'android' }\n}<\/pre>\n\n\n\n<a name=\"cancel-floor-access\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Cancel Requested Floor Access<\/h3>\n\n\n\n<p>The <code>Enx.cancelFloor()<\/code> method allows participants to cancel their request for Floor Access pending for Moderator&#8217;s approval.<\/p>\n\n\n\n<p><strong>Class<\/strong>:&nbsp;<code>Enx<\/code><\/p>\n\n\n\n<p><strong>Method:<\/strong>&nbsp;<code>Enx.cancelFloor()<\/code> &#8211; No Parameter required.<\/p>\n\n\n\n<p><strong>Callbacks<\/strong>:&nbsp;<\/p>\n\n\n\n<ul><li><code>cancelledFloorRequest<\/code> &#8211; Notification to the Moderator when the participant cancels the Floor Access Request. <\/li><li><code>floorCancelled<\/code> &#8211; Acknowledgment to the Participant when their Floor Access Request is cancelled. <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.cancelFloor()\n\ncancelledFloorRequest:event=&gt;{\n              \/\/ Moderator receives cancellation request\n        }\n\nfloorCancelled:event=&gt;{\n             \/\/ Participant is acknowledged that floor request is cancelled\n        }<\/pre>\n\n\n\n<p><strong>Error  Codes &amp; Exceptions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5003<\/td><td>Unauthorized Access. When a user with <code>moderator<\/code> role invokes <code>cancelFloor()<\/code>.<\/td><\/tr><tr><td>5041<\/td><td>Repeated <code>cancelFloor()<\/code> call while a previous request is in process.<\/td><\/tr><tr><td>5042<\/td><td>Repeated <code>cancelFloor()<\/code> call after the request has already been canceled.<\/td><\/tr><tr><td>5067<\/td><td>Unable to process the request for a Room in group mode. Non-Contextual method call.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<a name=\"grant-floor-access\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3> Grant Floor Access <\/h3>\n\n\n\n<p>Moderator might grant floor access to one or many users  one by one. Note that at any given point of time, only one person may be   granted floor access. To grant access to others, moderator must  release  floor access from the participant who is currently granted floor  access.  Once granted floor access, the designated participant will be  notified  using an event and he can publish his stream.  <\/p>\n\n\n\n<p><strong>Method: <\/strong><code>Enx.grantFloor(clientID)<\/code> &#8211; Moderator grants floor access to participant <\/p>\n\n\n\n<p><strong>Callbacks:<\/strong> <\/p>\n\n\n\n<ul><li><code>processFloorRequested  <\/code>&#8211; Moderator is acknowledged that Participant is granted floor access<\/li><li><code>grantedFloorRequest <\/code>&#8211; Participant receives floor access<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.grantFloor(ClientId); \/\/ To grant floor access to ClientId\n\n\/\/ To participant: Floor Access granted\ngrantedFloorRequest : event =&gt;{\n\t\/\/ event = { result:1708, msg:'Floor Granted', clientId: \"XXX\" }\n} \n\n\/\/To moderator: Acknowledgement \nprocessFloorRequested : event =&gt;{\n\t\/\/ event = { result:1708, msg:'Floor Granted' }\n}<\/pre>\n\n\n\n<a name=\"deny-floor-access\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Deny Floor Access <\/h3>\n\n\n\n<p>The Moderator may also deny a request for floor access to a participant.<\/p>\n\n\n\n<p><strong>Method: <\/strong> <code>Enx.denyFloor(ClientIDk)<\/code> \u2013 Moderator denies floor access to a Participant <\/p>\n\n\n\n<p><strong>Callbacks:<\/strong> <\/p>\n\n\n\n<ul><li><code>processFloorRequested <\/code>&#8211; Moderator is acknowledged that he denied floor access to a Participant<\/li><li><code>deniedFloorRequest  <\/code>&#8211; Participant is notified that he has been denied floor access<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.denyFloor(ClientId); \/\/ To deny floor access to ClientId\n\n\/\/ To participant: Floor Access request denied\ndeniedFloorRequest : event =&gt;{\n \/\/ event = { result:4117, msg:'Floor request denied', clientId: \"XXX\" }\n} \n\n\/\/To moderator: Acknowledgement \nprocessFloorRequested : event =&gt;{\n \/\/ event = { result:1709, msg:'Floor Denied' }\n}<\/pre>\n\n\n\n<a name=\"finish-floor-access\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Finish Floor Access<\/h3>\n\n\n\n<p>The <code>Enx.finishFloor()<\/code> allows the Participant to announce the completion of Floor Access and release Floor Access.<\/p>\n\n\n\n<p><strong>Class<\/strong>:&nbsp;<code>Enx<\/code><\/p>\n\n\n\n<p><strong>Method:&nbsp;<\/strong><code>Enx.finishFloor()<\/code>\u2013 No Parameter required.<\/p>\n\n\n\n<p><strong>Callbacks:<\/strong>&nbsp;<\/p>\n\n\n\n<ul><li><code>finishedFloorRequest:<\/code>&nbsp;Notification to the Moderator when the Participant finishes Floor Access.<\/li><li><code>floorFinished:<\/code>&nbsp;Acknowledgment to the Participant when Floor Access is finished. <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.finishFloor()\n\nonFinishedFloorRequest:event=&gt;{\n           \/\/ Moderator received Floor Finish notification\n       \n }\n\nonFloorFinished:event=&gt;{\n             \/\/ Participants is acknowledged that floor access is finished\n        \n}<\/pre>\n\n\n\n<p><strong>Error Codes &amp; Exceptions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5003<\/td><td>Unauthorized Access. When a user with <code>moderator<\/code> role invokes <code>finishFloor()<\/code>.<\/td><\/tr><tr><td>5041<\/td><td>Repeated <code>finishFloor()<\/code> call while the previous request is in process.<\/td><\/tr><tr><td>5042<\/td><td>When participant retries <code>finishFloor()<\/code> after finishing the Floor Access. <\/td><\/tr><tr><td>5067<\/td><td>Unable to process the request for a Room in group mode. Non-Contextual method call.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Note:&nbsp;<\/strong>In case of an error, &lt;null&gt; is received at the first Index and Error Info at the second Index.<\/p>\n\n\n\n<a name=\"release-floor-access\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3> Release Floor Access <\/h3>\n\n\n\n<p>Moderator may terminate floor access granted to some participant. Upon termination, the user\u2019s stream(s) is unpublished. It is necessary to terminate floor access of a participant before giving out floor access to another participant.<\/p>\n\n\n\n<p><strong>Method: <\/strong><code>Enx.releaseFloor(clientId)<\/code> \u2013 Moderator released floor request from a Client<\/p>\n\n\n\n<p><strong>Callbacks:<\/strong><\/p>\n\n\n\n<ul><li><code>processFloorRequested  <\/code>&#8211; Moderator is acknowledged that floor is released<\/li><li><code>floorReleased<\/code>&#8211; Participant i notified that floor access has been revoked. His stream is automatically unpublished.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.releaseFloor(ClientId); \/\/ To release floor access floor ClientId\n\n\/\/ To participant: Floor Access released\nfloorReleased : event =&gt;{\n\t\/\/ event = { result:1712, msg:'Floor released', clientId: \"XXX\" }\n} \n\n\/\/To moderator: Acknowledgement \nprocessFloorRequested : event =&gt;{\n\t\/\/ event = { result:1712, msg:'Floor Released' }\n}<\/pre>\n\n\n\n<a name=\"restore-moderator-session\"><\/a>\n\n\n\n<p><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3> Restore Moderator Session <\/h3>\n\n\n\n<p>In case the Moderator is disconnected during a session, the list of received floor requests and participant currently with floor access can be retrieved when connection is restored to the room in the Room-Meta viz.<\/p>\n\n\n\n<p><strong>Structured Data JSON<\/strong><\/p>\n\n\n\n<ul><li><code>room.raisedHands<\/code><em>\u2013 An Array of Client-IDs who requested floor-access<\/em><\/li><li><code>room.approvedHands<\/code> \u2013 <em>An Array of Client-IDs who currently has floor access<\/em> <\/li><\/ul>\n\n\n\n<a name=\"invite-floor\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Invite to Floor<\/h2>\n\n\n\n<p>In lecture mode, where only the Moderator can speak and control speakers in the Room through Floor Access Control methods, the Invite to Floor methods provide more options to the Moderator to organize a conference in lecture mode.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Invite Participant to Floor<\/h3>\n\n\n\n<p>The <code>Enx.inviteToFloor()<\/code> method allows the Moderator to invite any Participant in the ongoing conference to the Floor and talk. <\/p>\n\n\n\n<p><strong>Class:<\/strong> <code>Enx<\/code><\/p>\n\n\n\n<p><strong>Method:<\/strong> <code>Enx.inviteToFloor(clientId)<\/code><\/p>\n\n\n\n<p><strong>Parameter:<\/strong> <code>clientId<\/code> &#8211; String. The client ID of the invited Participant.<\/p>\n\n\n\n<p><strong>Callback:<\/strong> <\/p>\n\n\n\n<ul><li><code>ackInviteToFloorRequested<\/code> &#8211; Acknowledgment to the Moderator when an invitation to Floor is sent to the Participant.<\/li><li><code>inviteToFloorRequested<\/code> &#8211; Notification to all the Moderators in the Room when an invitation to Floor is sent to the Participant.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Enx.inviteToFloor(clientId)\n\nackInviteToFloorRequested:event=&gt;{\n           \/\/Acknowledgment to the moderator who invited\n        \n}\ninviteToFloorRequested:event=&gt;{\n         \/\/Notification to all the moderators in the room\n        \n}\ninvitedForFloorAccess: event=&gt;{\n \/\/Notification to the invited participant\n}<\/pre>\n\n\n\n<p><strong>Error Codes &amp; Exceptions:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5086&nbsp;<\/td><td>Endpoint application is not connected to a Room.&nbsp;<\/td><\/tr><tr><td>5097<\/td><td><code>inviteToFloor()<\/code> is not applicable in a Chat-Only Room. Non-Contextual method call.<\/td><\/tr><tr><td>5006<\/td><td>A User with a participant role is not authorized to invoke <code>inviteToFloor()<\/code>.<\/td><\/tr><tr><td>5045<\/td><td>Unable to invite a user with an invalid client ID.&nbsp;<\/td><\/tr><tr><td>5067<\/td><td>Unable to process the request for a Room in group mode. Non-Contextual method call.<\/td><\/tr><\/tbody><\/table><\/figure>\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=\"..\/room-mode-switch\/\"><\/a><a href=\"..\/room-mode-switch\/\">Switch Room Mode<\/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=\"..\/live-media-statistics\/\"><\/a><a href=\"..\/live-media-statistics\/\">Get Live Media Statistics<\/a> \u2192<a href=\"\/developer\/how-to-use\/\"><\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Lecture Mode, only the Moderator publishes a stream to the room whereas all other participants subscribe to see and listen to the Moderator. If participants have questions to ask during the session, the Moderator can grant the floor to the participant to publish his stream. Table of Contents Request Floor Access Cancel Requested Floor Access Grant Floor Access Deny Floor Access Finish Floor Access Release Granted Floor Access Restore&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3747,"menu_order":0,"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":"In Lecture Mode, only the Moderator publishes a stream to the room whereas all other participants subscribe to see and listen to the Moderator. If participants have questions to ask during the session, the Moderator can grant the floor to the participant to publish his stream. Table of Contents Request Floor Access Cancel Requested Floor&hellip;","_links":{"self":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/4634"}],"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=4634"}],"version-history":[{"count":0,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/4634\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/3747"}],"wp:attachment":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/media?parent=4634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}