Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ClientWebSocket.cs
Go to the documentation of this file.
3
5
6public sealed class ClientWebSocket : WebSocket
7{
8 private enum InternalState
9 {
10 Created,
14 }
15
16 private int _state;
17
19
21
23
25
26 public override string? SubProtocol => _innerWebSocket?.WebSocket?.SubProtocol;
27
28 public override WebSocketState State
29 {
30 get
31 {
32 if (_innerWebSocket != null)
33 {
35 }
36 return (InternalState)_state switch
37 {
38 InternalState.Created => WebSocketState.None,
39 InternalState.Connecting => WebSocketState.Connecting,
40 _ => WebSocketState.Closed,
41 };
42 }
43 }
44
46 {
47 get
48 {
49 if (_state == 3)
50 {
51 throw new ObjectDisposedException(GetType().FullName);
52 }
53 if (_state != 2)
54 {
56 }
58 }
59 }
60
66
68 {
69 if (uri == null)
70 {
71 throw new ArgumentNullException("uri");
72 }
73 if (!uri.IsAbsoluteUri)
74 {
76 }
77 if (uri.Scheme != "ws" && uri.Scheme != "wss")
78 {
80 }
82 {
83 case InternalState.Disposed:
84 throw new ObjectDisposedException(GetType().FullName);
85 default:
87 case InternalState.Created:
90 }
91 }
92
94 {
96 try
97 {
98 await _innerWebSocket.ConnectAsync(uri, cancellationToken, Options).ConfigureAwait(continueOnCapturedContext: false);
99 }
100 catch
101 {
102 Dispose();
103 throw;
104 }
105 if (Interlocked.CompareExchange(ref _state, 2, 1) != 1)
106 {
107 throw new ObjectDisposedException(GetType().FullName);
108 }
109 }
110
112 {
113 return ConnectedWebSocket.SendAsync(buffer, messageType, endOfMessage, cancellationToken);
114 }
115
117 {
118 return ConnectedWebSocket.SendAsync(buffer, messageType, endOfMessage, cancellationToken);
119 }
120
125
130
131 public override Task CloseAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken)
132 {
133 return ConnectedWebSocket.CloseAsync(closeStatus, statusDescription, cancellationToken);
134 }
135
136 public override Task CloseOutputAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken)
137 {
138 return ConnectedWebSocket.CloseOutputAsync(closeStatus, statusDescription, cancellationToken);
139 }
140
141 public override void Abort()
142 {
143 if (_state != 3)
144 {
146 Dispose();
147 }
148 }
149
150 public override void Dispose()
151 {
152 if (Interlocked.Exchange(ref _state, 3) != 3)
153 {
155 }
156 }
157}
override ValueTask< ValueWebSocketReceiveResult > ReceiveAsync(Memory< byte > buffer, CancellationToken cancellationToken)
override Task SendAsync(ArraySegment< byte > buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken)
override? WebSocketCloseStatus CloseStatus
override Task< WebSocketReceiveResult > ReceiveAsync(ArraySegment< byte > buffer, CancellationToken cancellationToken)
override ValueTask SendAsync(ReadOnlyMemory< byte > buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken)
async Task ConnectAsyncCore(Uri uri, CancellationToken cancellationToken)
override Task CloseOutputAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken)
override Task CloseAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken)
Task ConnectAsync(Uri uri, CancellationToken cancellationToken)
static ClientWebSocketOptions CreateDefaultOptions()
async Task ConnectAsync(Uri uri, CancellationToken cancellationToken, ClientWebSocketOptions options)
Task< WebSocketReceiveResult > ReceiveAsync(ArraySegment< byte > buffer, CancellationToken cancellationToken)
Task CloseOutputAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken)
Task SendAsync(ArraySegment< byte > buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken)
WebSocketCloseStatus? CloseStatus
Definition WebSocket.cs:12
Task CloseAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken)
static string net_WebSockets_NotConnected
Definition SR.cs:36
static string net_WebSockets_AlreadyStarted
Definition SR.cs:32
static string net_uri_NotAbsolute
Definition SR.cs:16
static string net_WebSockets_Scheme
Definition SR.cs:30
Definition SR.cs:7
static int CompareExchange(ref int location1, int value, int comparand)
static int Exchange(ref int location1, int value)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
bool IsAbsoluteUri
Definition Uri.cs:572
string Scheme
Definition Uri.cs:505