public Task <ReturnMessage> JoinMeeting(int meetingId, uint[] hwnds, int count, uint[] docHwnds, int docCount)
        {
            Task <ReturnMessage> checkTask = _meetingManager.CheckMeetingServerStatus();

            if (checkTask != null)
            {
                return(checkTask);
            }

            var tcs = new TaskCallback <ReturnMessage>("JoinMeeting");

            if (_meetingManager.TaskCallbacks.ContainsKey(tcs.Name))
            {
                _meetingManager.TaskCallbacks.Remove(tcs.Name);
            }

            _meetingManager.TaskCallbacks.Add(tcs.Name, tcs);

            int result = MeetingAgent.JoinMeeting(meetingId, hwnds, count, docHwnds, docCount);

            if (result != 0)
            {
                _meetingManager.CurrentMeetingId = 0;
                return(Task.FromResult(MessageManager.FailedToJoinMeeting));
            }

            return(tcs.Task);
        }