コード例 #1
0
ファイル: Client.cs プロジェクト: HelloKitty/PSOBB2.Client
        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);
        }
コード例 #2
0
 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);
 }