The EndMeetingBtnClicked callback never been called when I end the meeting as a Host

I’m using the zoom_sdk_dotnet_wrap.dll and I have handled the callback of EndMeetingBtnClicked with calling IMeetingUIControllerDotNetWrap. Add_CB_onEndMeetingBtnClicked.
But it’s not worked when I click the END MEETING button in the meeting window. At the same time, the callback of MeetingStatusChanged always returned with the status of MEETING_STATUS_ENDED, when user click the END MEETING or LEAVE MEETING button.
So, my question is that, how could I know which button I have clicked?

image

Hey @VideoPro,

Thanks for using the dev forum!

There may be an issue with the wrapper itself, as the wrapper is not actively maintained by Zoom. Are you seeing the same behavior in the C++ version of the SDK?

Thanks!
Michael

Thanks for reply.
There is no C++ usage in my project, and I have found out that all the callbacks without parameter are not worked.
I have tried the following callbacks in my project and none of them is worked:
onStartShareBtnClicked
onEndMeetingBtnClicked
onParticipantListBtnClicked
onLogout

It will be appreciated if you have any suguestions. Thanks.

Hey @VideoPro,

Have you set your class to listen to these events?

Thanks!
Michael

Thanks for reply.
Yes, I have set my class to listen to these event.
I have reviewed the source code of the zoom_sdk_dotnet_wrap.dll. It’s using the std::bind function to handle the events.
At the same time, the event of onInviteBtnClicked is worked, which is in the same class with the event of onStartShareBtnClicked and onEndMeetingBtnClicked. They are using the same way to handle the event. The different between them I found is that the onInviteBtnClicked event has a parameter and the other two don’t.
Here’s part of the source code of the zoom_sdk_dotnet_wrap.dll:

class MeetingUIControllerEventHandler
{
public:
	static MeetingUIControllerEventHandler& GetInst()
	{
		static MeetingUIControllerEventHandler inst;
		return inst;
	}
	void onInviteBtnClicked(bool& handled)
	{
		if (CMeetingUIControllerDotNetWrap::Instance)
			CMeetingUIControllerDotNetWrap::Instance->ProcInviteBtnClicked(handled);
	}

	void onStartShareBtnClicked()
	{
		if (CMeetingUIControllerDotNetWrap::Instance)
			CMeetingUIControllerDotNetWrap::Instance->ProcStartShareBtnClicked();
	}

	void onEndMeetingBtnClicked()
	{
		if (CMeetingUIControllerDotNetWrap::Instance)
			CMeetingUIControllerDotNetWrap::Instance->ProcEndMeetingBtnClicked();
	}

	void onParticipantListBtnClicked()
	{
		if (CMeetingUIControllerDotNetWrap::Instance)
			CMeetingUIControllerDotNetWrap::Instance->ProcParticipantListBtnClicked();
	}

	void onZoomInviteDialogFailed()
	{
		if (CMeetingUIControllerDotNetWrap::Instance)
			CMeetingUIControllerDotNetWrap::Instance->ProcZoomInviteDialogFailed();
	}

private:
	MeetingUIControllerEventHandler() {}
};
//
void CMeetingUIControllerDotNetWrap::BindEvent()
{
	ZOOM_SDK_NAMESPACE::IMeetingUIControllerWrap& meetingUIController = ZOOM_SDK_NAMESPACE::CSDKWrap::GetInst().GetMeetingServiceWrap().GetUIController();
	meetingUIController.m_cbonInviteBtnClicked =
		std::bind(&MeetingUIControllerEventHandler::onInviteBtnClicked,
			&MeetingUIControllerEventHandler::GetInst(), std::placeholders::_1);

	meetingUIController.m_cbonStartShareBtnClicked =
		std::bind(&MeetingUIControllerEventHandler::onStartShareBtnClicked,
			&MeetingUIControllerEventHandler::GetInst());

	meetingUIController.m_cbonEndMeetingBtnClicked =
		std::bind(&MeetingUIControllerEventHandler::onEndMeetingBtnClicked,
			&MeetingUIControllerEventHandler::GetInst());

	meetingUIController.m_cbonParticipantListBtnClicked =
		std::bind(&MeetingUIControllerEventHandler::onParticipantListBtnClicked,
			&MeetingUIControllerEventHandler::GetInst());

	meetingUIController.m_cbonZoomInviteDialogFailed =
		std::bind(&MeetingUIControllerEventHandler::onZoomInviteDialogFailed,
			&MeetingUIControllerEventHandler::GetInst());
}

void CMeetingUIControllerDotNetWrap::ProcInviteBtnClicked(bool& handled)
{
	event_onInviteBtnClicked(handled);
}

void CMeetingUIControllerDotNetWrap::ProcStartShareBtnClicked()
{
	event_onStartShareBtnClicked();
}

void CMeetingUIControllerDotNetWrap::ProcEndMeetingBtnClicked()
{
	event_onEndMeetingBtnClicked();
}

void CMeetingUIControllerDotNetWrap::ProcParticipantListBtnClicked()
{
	event_onParticipantListBtnClicked();
}

void CMeetingUIControllerDotNetWrap::ProcZoomInviteDialogFailed()
{
	event_onZoomInviteDialogFailed();
}

		event onInviteBtnClicked^ event_onInviteBtnClicked;
	event onStartShareBtnClicked^ event_onStartShareBtnClicked;
	event onEndMeetingBtnClicked^ event_onEndMeetingBtnClicked;
	event onParticipantListBtnClicked^ event_onParticipantListBtnClicked;

Hey @VideoPro,

Can you share your code for your class that is implementing these callbacks?

Thanks!
Michael

Hey Michael,
Here is my code, I implement them in C#:

    private static ZoomHelper mInstance;
    public static ZoomHelper Instance
    {
        get { return mInstance ?? (mInstance = new ZoomHelper()); }
    }
    
    private unsafe void SetMeetingCallbacks()
    {
        var meetingService = this.mZoomInstance.GetMeetingServiceWrap();
        if (meetingService == null)
        {
            return;
        }

        var uiController = meetingService.GetUIController();
        if (uiController != null)
        {
            uiController.Add_CB_onInviteBtnClicked(InviteBtnClickCallback);
            uiController.Add_CB_onEndMeetingBtnClicked(EndMeetingBtnClickCallback);
            uiController.Add_CB_onParticipantListBtnClicked(ParticipantsListBtnClickCallback);
            uiController.Add_CB_onStartShareBtnClicked(ShareBtnClickCallback);
        }
    }

Hey @VideoPro,

I see. I ran the c++ demo app and saw these callbacks being triggered, so this likely indicates that those callbacks have not been wrapped properly. Zoom does not actively maintain the C# wrapper, so I would check out the wrapper methods related to this to see if there is something missing or miswrapped somewhere.

Thanks!
Michael