SightCall Developer Center

Account Login Support

Manage a Waiting Room

The SightCall platform proposes a Waiting Room feature. A user can create a virtual place dedicated to wait for a meeting to start.
This place is called a Waiting Room and is reachable by a Meeting Point (identified by its Meeting Point ID aka MPI).

Except for the hostless case, attending a call behind a waiting room always happens in two steps:

To create a meeting point, the user needs to have been created with a correct user profile (at least premium). He/she is then considered as the owner of the meeting point and is the only one who can host it.

All methods described here for the management of the waiting rooms are only available to the host.

There are four types of meeting points:

A meeting point can also be in one of the three following modes:

Creating a Meeting Point

Meeting points are created by the createMeetingPoint method (JS,Android,iOS). The meeting point type (scheduled, ad-hoc ,permanent or hostless) is mandatory.

For example, to create a scheduled meeting point, the code looks like

var options = {
  location : "on the cloud",
    startDate : timeST, 
    stopDate  : timeS
};
rtcc.createMeetingPoint('schedulded', options);
console.log('Meeting Point creation requested');
[[Rtcc instance] meetingPointCreateWithTitle:@"a title"
                                   atLocation:@"a location"
                                    startDate:<a valid NSDate>
                                      endDate:<a valid NSDate>
                                     withType:<a valid type>];
Rtcc.instance().meetingPointCreate("a title", atLocation:"a location", startDate:<a valid NSDate>, endDate:<a valid NSDate>, withType:<a valid type>)
public void create(String title, String location, int startTime, int endTime) {
    Builder builder = new Builder(Type.SCHEDULED)
        .title(title)
        .location(location)
        .startTime(startTime)
        .endTime(endTime);
    Rtcc.instance().createMeetingPoint(builder);
}
POST /meetingpoints/
{ "conftype":"scheduled",
  "title":"a Title",
  "location":"a location",
  "startdate":"",
  "stopdate":""}

Once the meeting point is created and validated, the cloud notifies the client that the operation was succesful.

function onMeetingPointCreated(mph)  {
        loadedMeetingPoint = mph;
        console.log('Meeting point was succesfully created with id: '+ loadedMeetingPoint.id);
}

rtcc.on('meetingpoint.create.success',onMeetingPointCreated);
- (void)rtccMeetingPointCreated:(NSDictionary *)mp
{
    NSLog(@"The meeting point id is %@",[mp objectForKey:k_MPID]);
}
override func rtccMeetingPointCreated(mp: AnyObject!) {
    println("The meeting point id is \(mp[k_MPID]!)")
}
@RtccEventListener
public void onStatusEvent(final StatusEvent event) {
    switch (event.getType()) {
    case CREATED:
        Log.d(TAG, event.getMeetingPoint());
        break;
    }
}

Getting Info on a Meeting Point

Getting details from a meeting point id is an asynchronous operation as the the data has to be loaded from the cloud. The request is sent when calling a getMeetingPointDetails method and the answer is received through a callback/event mechanism.

rtcc.getMeetingPoint(meetingPointId);
[[Rtcc instance] meetingPointGetDetails:mpID];
Rtcc.instance().meetingPointGetDetails(mpID)
public void details(MeetingPoint meetingPoint) {
    meetingPoint.details();
}

and the answer:

function meetingPointGot(mph)  {
        loadedMeetingPoint = mph;
        console.log('the meeting point id is '+ loadedMeetingPoint.id);
}

rtcc.on('meetingpoint.get.success',meetingPointGot);
- (void)rtccMeetingPointDetails:(NSDictionary *)details
{
    NSString *mpID = [details objectForKey:k_MPID];
    NSString *title = [details objectForKey:k_MPTitle];
    NSDate *startDate = [details objectForKey:k_MPStart];
    NSDate *endDate = [details objectForKey:k_MPEnd];
    NSString *location = [details objectForKey:k_MPLocation];
    NSLog(@"MP %@ is titled: %@.\n%@", mpID, title, details);
}
override func rtccMeetingPointDetails(details: [NSObject : AnyObject]!) {
    var mpID = details[k_MPID] as! String
    var title = details[k_MPTitle] as! String
    var start = details[k_MPStart] as! NSDate
    var end = details[k_MPEnd] as! NSDate
    var location = details[k_MPLocation] as! String
    println("MP \(mpID) is titled: \(title)\n\(details)")
}
@RtccEventListener
public void onStatusEvent(final StatusEvent event) {
    switch (event.getType()) {
    case DETAILS:
        Log.d(TAG, event.getMeetingPoint());
        break;
    }

Updating a Meeting Point

A meeting point can also be updated.

var options = {
  location : "somewhere else",
};

loadedMeetingPoint.modify(options);
[[Rtcc instance] meetingPointUpdate:@"the ID of the MP to change"
                            newTitle:@"a title"
                          newLocation:@"a location"
                        newStartDate:<a valid NSDate>
                            newEndDate:<a valid NSDate>];
Rtcc.instance().meetingPointUpdate("the ID of the MP to change", newTitle:@"a title", newLocation:@"a location", newStartDate:<a valid NSDate>, newEndDate:<a valid NSDate>)
public void edit(MeetingPoint meetingPoint, String newTitle, String newLocation, int newStartTime, int newEndTime) {
    meetingPoint.edit()
        .title(newTitle)
        .location(newLocation)
        .startTime(newStartTime)
        .endTime(newEndTime)
        .apply();
}

Once the meeting point is modified and validated by the platform, the event meetingpoint.modify.success is triggered:

function onMeetingPointModified(mph)  {

        loadedMeetingPoint = mph;
        console.log('the meeting point '+ loadedMeetingPoint.id + 'has been succesfully modified');
}

rtcc.on('meetingpoint.modify.success',onMeetingPointModified)
- (void)rtccMeetingPointUpdated:(NSDictionary *)newDetails
{
    NSString *mpID = [details objectForKey:k_MPID];
    NSString *title = [details objectForKey:k_MPTitle];
    NSDate *startDate = [details objectForKey:k_MPStart];
    NSDate *endDate = [details objectForKey:k_MPEnd];
    NSString *location = [details objectForKey:k_MPLocation];
    NSLog(@"MP %@ updated. It is now titled: %@.\n%@", mpID, title, newDetails);
}
override func rtccMeetingPointUpdated(newDetails: [NSObject : AnyObject]!) {
    var mpID = newDetails[k_MPID] as! String
    var title = newDetails[k_MPTitle] as! String
    var start = newDetails[k_MPStart] as! NSDate
    var end = newDetails[k_MPEnd] as! NSDate
    var location = newDetails[k_MPLocation] as! String
    println("MP \(mpID) updated. It is now titled: \(title)\n\(newDetails)")
}
@RtccEventListener
public void onStatusEvent(final StatusEvent event) {
    switch (event.getType()) {
    case UPDATED:
        Log.d(TAG, event.getMeetingPoint());
        break;
    }
}

Deleting a Meeting Point

Deleting a meeting point is part of the Rtcc object methods.

rtcc.deleteMeetingPoint(loadedMeetingPoint.id);
[[Rtcc instance] meetingPointDelete:@"The ID of the MP to delete"];
Rtcc.instance().meetingPointDelete("The ID of the MP to delete")
public void delete(MeetingPoint meetingPoint) {
    meetingPoint.delete();
}

Once the meeting point is deleted on the platform, the event meetingpoint.delete.success is triggered:

function onMeetingPointDeleted(mpi)  {
        console.log('the meeting point '+ mpi + 'has been succesfully deleted');
}
//The rtccHostDelegate is notified throught rtccMeetingPointDeleted:
- (void)rtccMeetingPointDeleted:(NSString *)mpID
{
    NSLog(@"MP %@ was deleted.", mpID);
}
func rtccMeetingPointDeleted:(mpID: NSString!)
{
    println("MP \(mpID) was deleted.");
}
@RtccEventListener
public void onStatusEvent(final StatusEvent event) {
    switch (event.getType()) {
    case DELETED:
        Log.d(TAG, event.getMeetingPoint());
        break;
    }
}

Changing the mode of Meeting Point

At any time, the host can change the mode of a meeting point. This is done using one of the following methods of the MeetingPointHost.

loadedMeetingPoint.default_mode();
loadedMeetingPoint.autoaccept_mode();
loadedMeetingPoint.lock_mode();
mpAuthorizationMode_t status = mpSta_autoaccept;
[[Rtcc instance] meetingPoint:mpID setAuthorizationStatus:status]; 
var status:mpAuthorizationMode_t = .Sta_autoaccept
Rtcc.instance().meetingPoint(mpID!, setAuthorizationStatus:.Sta_autoaccept)
/**
 * @param mode Mode.DEFAULT or Mode.LOCK or Mode.AUTO_ACCEPT
 */
public void mode(MeetingPoint meetingPoint, Mode mode) {
    meetingPoint.mode(mode);
}