internal IAsyncResult BeginGetConnectorHandle(Uri server, AsyncCallback callback) { CheckInitialized(); var result = new AsyncResult <string>(callback); if (!string.IsNullOrEmpty(_connectorHandle)) { result.SetCompletedSynchronously(_connectorHandle); return(result); } _pendingConnectorCreateRequests.Enqueue(result); if (_pendingConnectorCreateRequests.Count > 1) { return(result); } var request = new vx_req_connector_create_t(); request.acct_mgmt_server = server.ToString(); string connectorHandle = $"C{_nextHandle++}"; request.connector_handle = connectorHandle; VxClient.Instance.BeginIssueRequest(request, ar => { try { VxClient.Instance.EndIssueRequest(ar); } catch (Exception e) { VivoxDebug.Instance.VxExceptionMessage($"{request.GetType().Name} failed: {e}"); _connectorHandle = null; while (_pendingConnectorCreateRequests.Count > 0) { ((AsyncResult <string>)(_pendingConnectorCreateRequests).Dequeue()).SetComplete(e); } if (VivoxDebug.Instance.throwInternalExcepetions) { throw; } return; } _connectorHandle = connectorHandle; while (_pendingConnectorCreateRequests.Count > 0) { ((AsyncResult <string>)(_pendingConnectorCreateRequests).Dequeue()).SetComplete(_connectorHandle); } }); return(result); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(vx_req_connector_create_t obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }