public Task ConnectAsync(Uri uri, CancellationToken cancellationToken) { if (uri == null) { throw new ArgumentNullException(nameof(uri)); } if (!uri.IsAbsoluteUri) { throw new ArgumentException(SR.net_uri_NotAbsolute, nameof(uri)); } if (uri.Scheme != UriScheme.Ws && uri.Scheme != UriScheme.Wss) { throw new ArgumentException(SR.net_WebSockets_Scheme, nameof(uri)); } // Check that we have not started already var priorState = (InternalState)Interlocked.CompareExchange(ref _state, (int)InternalState.Connecting, (int)InternalState.Created); if (priorState == InternalState.Disposed) { throw new ObjectDisposedException(GetType().FullName); } else if (priorState != InternalState.Created) { throw new InvalidOperationException(SR.net_WebSockets_AlreadyStarted); } _options.SetToReadOnly(); return(ConnectAsyncCore(uri, cancellationToken)); }
public Task ConnectAsync(Uri uri, CancellationToken cancellationToken) { if (uri == null) { throw new ArgumentNullException(nameof(uri)); } if (!uri.IsAbsoluteUri) { throw new ArgumentException(SR.net_uri_NotAbsolute, nameof(uri)); } if (uri.Scheme != UriScheme.Ws && uri.Scheme != UriScheme.Wss) { throw new ArgumentException(SR.net_WebSockets_Scheme, nameof(uri)); } //HOTFIX: Port is set to -1 on Unity if not specified in original URI string if (uri.Port < 0) { if (uri.Scheme == UriScheme.Ws) { uri = new UriBuilder(uri) { Port = 80 }.Uri; } else if (uri.Scheme == UriScheme.Wss) { uri = new UriBuilder(uri) { Port = 443 }.Uri; } } // Check that we have not started already var priorState = (InternalState)Interlocked.CompareExchange(ref _state, (int)InternalState.Connecting, (int)InternalState.Created); if (priorState == InternalState.Disposed) { throw new ObjectDisposedException(GetType().FullName); } else if (priorState != InternalState.Created) { throw new InvalidOperationException(SR.net_WebSockets_AlreadyStarted); } _options.SetToReadOnly(); return(ConnectAsyncCore(uri, cancellationToken)); }