How to use the IBOCreator class in C#

The C# Wrapper has implementation for IMeetingBreakoutRoomsController,
but how can the IBOCreator be used ?

Using version 5.0.24433.0616.

Hi @bm.erikstad,

Thanks for the post. The C# wrapper is a wrapper of the Windows SDK so the usage is the same as those in the Windows SDK. You could leverage the interfaces in the https://zoom.github.io/zoom-sdk-windows/class_i_meeting_b_o_controller.html and the callbacks in https://zoom.github.io/zoom-sdk-windows/class_i_meeting_b_o_controller_event.html to implement the Breakout room feature.

Here are the interfaces that you could use based on your role in the meeting:

  • If you are the host in the main session, you could use the IBOCreator, IBOAdmin, IBOAssistant and IBOData
  • If you are the host in the breakout session, you could use the IBOAdmin, IBOAssistant, and IBOData
  • If you are the cohost in the main session, you could use the IBOAttendee
  • If you are the cohost in the breakout session, you could use the IBOAssistant and IBOData
  • If you are the attendee in the main session or the breakout session, you could use the IBOAttendee

Hope this helps. Thanks!

I don’t understand how to access IBOCreator through C#. I can create a controller but I can’t access the IBO Creator in the class

ZOOM_SDK_DOTNET_WRAP.IMeetingBreakoutRoomsControllerDotNetWrap BO_controller=ZOOM_SDK_DOTNET_WRAP.CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().GetMeetingBreakoutRoomsController();

@Michael_Condon
Do you mind helping with this?

Hey @ekaram,

It is good to see you again :slight_smile:

The IBOCreator is defined in the second breakout room interface header file included in the c++ version of the sdk called “meeting_breakout_rooms_interface_v2.h”. As of right now, the wrapper uses the old breakout room header file “meeting_breakout_rooms_interface.h”. I am hoping that the engineers will be able to update this soon, but for now you will need to add that header file to the wrapper manually to use the newer breakout room interfaces like IBOCreator. Inside the wrapper there is a meeting_service_wrap.h file that is including the old breakout room header file, this is where you would include the v2 header file. Then you will have to update the meeting_breakout_rooms_wrap files to add in the new interfaces defined in the v2 header file.

Thanks!
Michael

1 Like

For those who need a bit more help
meeting_service_wrap.h can be found in the directory below

zoom_sdk_c_sharp_wrap\wrap\meeting_service_wrap.h

Now in my version (v5.4.54802.0124)
This file does not include meeting_breakout_rooms_interface.h explicitly.
It does include a file called #include common_include.h

If we look at common_include.h, we can find the include for “meeting_breakout_rooms_interface.h”

This is set as the following

#include “…/h/meeting_service_components/meeting_breakout_rooms_interface.h”

I think it would best to add to the common include file.

The file we want to add is '“meeting_breakout_rooms_interface_v2.h”
it was added as such

#include “…/h/meeting_service_components/meeting_breakout_rooms_interface_v2.h”

Now we need to edit the meeting_breakout_rooms_wrap.h and the meeting_breakout_rooms_wrap.cpp file to properly wrap the new functions and use cases.
This can be found in this directory

zoom_sdk_c_sharp_wrap\wrap\meeting_service_components_wrap\

@Michael_Condon
I don’t understand what is the best way to edit these files. It seems pretty convoluted to me. Is there a tutorial I can find? I don’t understand how the wrapping works

Update I figure out that the folder labeled
zoom_sdk_c_sharp_wrap has its own visual studio sln. Edits need to happen thereafter opening the solution. Then right-click build to update the .dll (We need to run in release mode to create the dll

For now we have been trying to follow along pull requests that were done before to the C# wrapper
https://github.com/zoom/zoom-c-sharp-wrapper/pulls

Hey @ekaram,

Thank you for providing this. I understand that the C# wrapper process is not ideal. We are working internally to improve how C# will be supported in the future. We are considering providing tutorials for modifying the wrapper locally, however different types of features require different types of modifications to the wrapper.

Thanks!
Michael

Alright for my use case should I be editing all 4 files?
wrap\
meeting_breakout_rooms_dotnet_wrap.cpp
meeting_breakout_rooms_dotnet_wrap.h

wrap\meeting_service_components_wrap\
meeting_breakout_rooms_wrap.cpp
meeting_breakout_rooms_wrap.h

I’m lost which is for what

Hey @ekaram,

After trying to implement this myself, I realized the weight of the lift necessary to add this feature in manually. Another developer is also trying to implement breakout rooms in C# as well so I am building an updated version of the wrapper that will implement all of the features in the V2 version of breakout rooms, then I will provide the changes here. In the meantime, the Zoom Marketplace has been updated to provide the latest version of the C# wrapper. This version is the version I have been working with.

Thanks!
Michael

2 Likes

Thank you so much for this!!

Are there any quick workarounds that might be useful to do? We are trying to build a prototype so we are open to temporary fixes.

hi, any updates? Can we contribute in any way?
I believe having BO functionality is (will be) necessary for all wrapper users

1 Like

Hey @p.ceccanti and @ekaram,

I am very close to finishing the updated files. Sorry for the delay, it has been a busy couple weeks.
Stay tuned.

Thanks!
Michael

2 Likes

@Michael_Condon
Any updates on this?

Hey @ekaram,

Yes, was just about to update this thread actually! I have integrated the interfaces into the wrapper, however there seems to be several bugs with the latest version. I am trying to track down whether the bugs are in my implementation of the wrapper or in the SDK itself. I can provide you with my version now, or I can provide you with a version once I have completed more testing.

Thanks!
Michael

1 Like

Hey @Michael_Condon.
That sounds great!!!
If the interface works we don’t mind other bugs. There are bugs in the version we currently have so it’s not much of a deal-breaker.

Either way, we can always revert back if thing go too astray

Please send us your version when you get the chance

Hey @Michael_Condon
Any news on this?

Hey @ekaram @p.ceccanti @lauren.olphert,

Thanks for your patience with this one everyone :slight_smile:

Just to catch everyone up, I have added the breakout rooms interface to the C# wrapper locally. However, I was seeing bugs with it and had to track down whether those bugs were in the SDK itself or my implementation of the wrapper. This took longer than expected as the latest SDK release seemed to have its own breakout rooms bugs. After more testing, it appears the main issue I am seeing is indeed with my implementation of the wrapper. I am still troubleshooting what exactly is wrong in my code, but essentially the breakout room controller always returns NULL. Under the same scenario in the C++ SDK, it is returning successfully.

Every breakout room class and function is implemented in my wrapper but I have not found the root-cause of the NULL-ness. If you would like to look at it (or maybe derive your own implementation from it), I can still send it out to you over a DeveloperSupport thread. Otherwise, I can put up a PR internally once I identify the issue and hopefully we can distribute it publicly after that.

If you do want the broken version I am currently using, can you send an email with a link to this post to DeveloperSupport@zoom.us? I unfortunately cannot upload a zip here. @lauren.olphert, I still have our thread up so no need to start a new one.

Thanks!
Michael

1 Like

Hi Michael

I am able to get a non null result from CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().GetMeetingBOController() based on my tests at https://bumblebee.com.sg/ref/zoomsdk.php.

It was quite tedious to code all the intermediary objects.

1 Like

@ratuthit ohh awesome
just to note the old implementation was
ZOOM_SDK_DOTNET_WRAP.CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().GetMeetingBreakoutRoomsController();

I just noticed the link you sent has the tutorial on how to edit it!!! (this was released in march 29,2021)
https://bumblebee.com.sg/ref/zoomsdk.php
Super perfect!!

@Michael_Condon
take a look at the link it might point out the mistake

1 Like

Hey @ratuthit @ekaram,

Dang, I wish I would’ve seen the article before implementing it myself :sweat_smile:

Michael

A few things to note that got me stuck from the tutorial
https://bumblebee.com.sg/ref/zoomsdk.php

You need to modify the common header file in more than one place to include
meeting_breakout_rooms_interface_v2.h
you need to included it as
#include “…/…/zoom_sdk/include/meeting_service_components/meeting_breakout_rooms_interface_v2.h”

and
#include “…/h/meeting_service_components/meeting_breakout_rooms_interface_v2.h”

In zoom-c-sharp\zoom_sdk_c_sharp_wrap\meeting_bo_dotnet_wrap.h
You need to include the header file as well

Make sure you include the new files you create in the project

Please note that these are the problems I saw from the tutorial. I couldn’t get the tutorial to run
@ratuthit Do you have a working copy of this? I keep getting the following linker errors

I recompiled Michael’s Code though and it seems to run fine on a fresh install of the SDK. I just need to re-add the modifications I had