Dreamine.Communication.Sockets 1.0.2
Dreamine.Communication.Sockets 통신 기능과 관련 API를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.Communication.Sockets.Udp.UdpTransport 클래스 참조sealed

더 자세히 ...

Dreamine.Communication.Sockets.Udp.UdpTransport에 대한 상속 다이어그램 :
Dreamine.Communication.Sockets.Udp.UdpTransport에 대한 협력 다이어그램:

Public 멤버 함수

 UdpTransport (UdpTransportOptions options)
 UdpTransport (UdpTransportOptions options, IMessageProtocolAdapter protocolAdapter)
Task ConnectAsync (CancellationToken cancellationToken=default)
async Task DisconnectAsync (CancellationToken cancellationToken=default)
async Task SendAsync (MessageEnvelope message, CancellationToken cancellationToken=default)
async ValueTask DisposeAsync ()

속성

ConnectionState State [get]
TransportKind Kind [get]

이벤트

EventHandler< MessageEnvelope >? MessageReceived

Private 멤버 함수

async Task ReceiveLoopAsync (CancellationToken cancellationToken)
void SetState (ConnectionState state)

정적 Private 멤버 함수

static void ValidateOptions (UdpTransportOptions options)
static void ValidatePort (int port, string parameterName)

Private 속성

readonly UdpTransportOptions _options
readonly IMessageProtocolAdapter _protocolAdapter
UdpClient? _client
IPEndPoint? _remoteEndPoint
CancellationTokenSource? _receiveLoopCts
Task? _receiveLoopTask
int _state = (int)ConnectionState.Disconnected

상세한 설명

UDP 데이터그램을 프로토콜 메시지로 변환해 송수신하는 전송 계층입니다.

UDP 데이터그램을 프로토콜 메시지로 변환해 송수신하는 전송 계층입니다.

UdpTransport.cs 파일의 27 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ UdpTransport() [1/2]

Dreamine.Communication.Sockets.Udp.UdpTransport.UdpTransport ( UdpTransportOptions options)
inline

기본 Dreamine JSON 프로토콜로 UDP 전송 계층을 초기화합니다.

매개변수
options로컬·원격 엔드포인트와 소켓 설정입니다.

UdpTransport.cs 파일의 110 번째 라인에서 정의되었습니다.

111 : this(options, new DreamineEnvelopeProtocolAdapter())
112 {
113 }

◆ UdpTransport() [2/2]

Dreamine.Communication.Sockets.Udp.UdpTransport.UdpTransport ( UdpTransportOptions options,
IMessageProtocolAdapter protocolAdapter )
inline

UDP 설정과 사용자 지정 프로토콜 어댑터로 전송 계층을 초기화합니다.

매개변수
options로컬·원격 엔드포인트와 소켓 설정입니다.
protocolAdapter메시지와 데이터그램 페이로드를 변환할 어댑터입니다.
예외
ArgumentNullExceptionoptions 또는 protocolAdapternull인 경우 발생합니다.

UdpTransport.cs 파일의 147 번째 라인에서 정의되었습니다.

150 {
151 _options = options ?? throw new ArgumentNullException(nameof(options));
152 _protocolAdapter = protocolAdapter ?? throw new ArgumentNullException(nameof(protocolAdapter));
153
154 ValidateOptions(_options);
155 }

다음을 참조함 : _options, _protocolAdapter, ValidateOptions().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ ConnectAsync()

Task Dreamine.Communication.Sockets.Udp.UdpTransport.ConnectAsync ( CancellationToken cancellationToken = default)
inline

로컬 엔드포인트에 UDP 소켓을 바인딩하고 백그라운드 수신 루프를 시작합니다.

매개변수
cancellationToken연결 및 수신 루프 수명과 연결할 취소 토큰입니다.
반환값
UDP 소켓 시작 작업입니다.

UdpTransport.cs 파일의 211 번째 라인에서 정의되었습니다.

212 {
213 if (State is ConnectionState.Connected or ConnectionState.Connecting)
214 {
215 return Task.CompletedTask;
216 }
217
218 cancellationToken.ThrowIfCancellationRequested();
219
220 SetState(ConnectionState.Connecting);
221
222 try
223 {
224 var localEndPoint = _options.CreateLocalEndPoint();
225 _remoteEndPoint = _options.CreateRemoteEndPoint();
226
227 _client = new UdpClient(AddressFamily.InterNetwork)
228 {
229 EnableBroadcast = _options.EnableBroadcast
230 };
231
232 _client.Client.ReceiveBufferSize = _options.ReceiveBufferSize;
233 _client.Client.SendBufferSize = _options.SendBufferSize;
234
235 if (_options.ReuseAddress)
236 {
237 _client.Client.SetSocketOption(
238 SocketOptionLevel.Socket,
239 SocketOptionName.ReuseAddress,
240 true);
241 }
242
243 _client.Client.Bind(localEndPoint);
244
245 _receiveLoopCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
246
247 SetState(ConnectionState.Connected);
248
249 _receiveLoopTask = Task.Run(
250 () => ReceiveLoopAsync(_receiveLoopCts.Token),
251 _receiveLoopCts.Token);
252
253 return Task.CompletedTask;
254 }
255 catch
256 {
257 SetState(ConnectionState.Faulted);
258
259 _client?.Dispose();
260 _client = null;
261 _remoteEndPoint = null;
262
263 _receiveLoopCts?.Dispose();
264 _receiveLoopCts = null;
265
266 throw;
267 }
268 }

다음을 참조함 : _client, _options, _receiveLoopCts, _receiveLoopTask, _remoteEndPoint, ReceiveLoopAsync(), SetState(), State.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ DisconnectAsync()

async Task Dreamine.Communication.Sockets.Udp.UdpTransport.DisconnectAsync ( CancellationToken cancellationToken = default)
inline

UDP 소켓을 닫고 백그라운드 수신 루프를 종료합니다.

매개변수
cancellationToken정리 후 연결 해제 취소 여부를 확인하는 토큰입니다.
반환값
비동기 연결 해제 작업입니다.

UdpTransport.cs 파일의 294 번째 라인에서 정의되었습니다.

295 {
296 if (State == ConnectionState.Disconnected)
297 {
298 return;
299 }
300
301 SetState(ConnectionState.Disconnecting);
302
303 _receiveLoopCts?.Cancel();
304
305 _client?.Close();
306 _client?.Dispose();
307 _client = null;
308 _remoteEndPoint = null;
309
310 if (_receiveLoopTask is not null)
311 {
312 try
313 {
314 await _receiveLoopTask.ConfigureAwait(false);
315 }
316 catch (OperationCanceledException)
317 {
318 }
319 catch (ObjectDisposedException)
320 {
321 }
322 catch (SocketException)
323 {
324 }
325 }
326
327 _receiveLoopCts?.Dispose();
328 _receiveLoopCts = null;
329 _receiveLoopTask = null;
330
331 cancellationToken.ThrowIfCancellationRequested();
332
333 SetState(ConnectionState.Disconnected);
334 }

다음을 참조함 : _client, _receiveLoopCts, _receiveLoopTask, _remoteEndPoint, SetState(), State.

다음에 의해서 참조됨 : DisposeAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DisposeAsync()

async ValueTask Dreamine.Communication.Sockets.Udp.UdpTransport.DisposeAsync ( )
inline

UDP 소켓과 수신 루프 리소스를 비동기적으로 해제합니다.

반환값
비동기 리소스 해제 작업입니다.

UdpTransport.cs 파일의 421 번째 라인에서 정의되었습니다.

422 {
423 await DisconnectAsync().ConfigureAwait(false);
424 }

다음을 참조함 : DisconnectAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ReceiveLoopAsync()

async Task Dreamine.Communication.Sockets.Udp.UdpTransport.ReceiveLoopAsync ( CancellationToken cancellationToken)
inlineprivate

데이터그램을 계속 수신해 메시지로 디코딩하고 수신 이벤트를 발생시킵니다.

매개변수
cancellationToken수신 루프 종료 토큰입니다.
반환값
백그라운드 수신 루프 작업입니다.

UdpTransport.cs 파일의 450 번째 라인에서 정의되었습니다.

451 {
452 if (_client is null)
453 {
454 return;
455 }
456
457 try
458 {
459 while (!cancellationToken.IsCancellationRequested &&
460 State == ConnectionState.Connected)
461 {
462 var result = await _client.ReceiveAsync(cancellationToken)
463 .ConfigureAwait(false);
464
465 var message = _protocolAdapter.Decode(result.Buffer);
466 MessageReceived?.Invoke(this, message);
467 }
468 }
469 catch (OperationCanceledException)
470 {
471 }
472 catch (ObjectDisposedException)
473 {
474 }
475 catch (SocketException)
476 {
477 if (!cancellationToken.IsCancellationRequested)
478 {
479 SetState(ConnectionState.Faulted);
480 }
481 }
482 catch
483 {
484 if (!cancellationToken.IsCancellationRequested)
485 {
486 SetState(ConnectionState.Faulted);
487 }
488 }
489 }

다음을 참조함 : _client, _protocolAdapter, MessageReceived, SetState(), State.

다음에 의해서 참조됨 : ConnectAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SendAsync()

async Task Dreamine.Communication.Sockets.Udp.UdpTransport.SendAsync ( MessageEnvelope message,
CancellationToken cancellationToken = default )
inline

메시지를 프로토콜 페이로드로 인코딩해 구성된 원격 UDP 엔드포인트로 전송합니다.

매개변수
message전송할 메시지입니다.
cancellationToken데이터그램 송신 취소 요청을 감시하는 토큰입니다.
반환값
비동기 데이터그램 송신 작업입니다.
예외
ArgumentNullException메시지가 null인 경우 발생합니다.
InvalidOperationExceptionUDP 전송 계층이 연결되지 않은 경우 발생합니다.

UdpTransport.cs 파일의 384 번째 라인에서 정의되었습니다.

387 {
388 ArgumentNullException.ThrowIfNull(message);
389
390 if (_client is null ||
391 _remoteEndPoint is null ||
392 State != ConnectionState.Connected)
393 {
394 throw new InvalidOperationException("UDP transport is not connected.");
395 }
396
397 cancellationToken.ThrowIfCancellationRequested();
398
399 var payload = _protocolAdapter.Encode(message);
400
401 await _client.SendAsync(payload, _remoteEndPoint, cancellationToken)
402 .ConfigureAwait(false);
403 }

다음을 참조함 : _client, _protocolAdapter, _remoteEndPoint, State.

◆ SetState()

void Dreamine.Communication.Sockets.Udp.UdpTransport.SetState ( ConnectionState state)
inlineprivate

원자적 연산으로 현재 UDP 상태를 설정합니다.

매개변수
state저장할 새 상태입니다.

UdpTransport.cs 파일의 591 번째 라인에서 정의되었습니다.

592 {
593 Interlocked.Exchange(ref _state, (int)state);
594 }

다음을 참조함 : _state.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync(), ReceiveLoopAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ValidateOptions()

void Dreamine.Communication.Sockets.Udp.UdpTransport.ValidateOptions ( UdpTransportOptions options)
inlinestaticprivate

UDP 호스트, 포트 및 버퍼 설정을 검증합니다.

매개변수
options검증할 UDP 설정입니다.
예외
ArgumentOutOfRangeException수신 또는 송신 버퍼 크기가 0 이하이거나 로컬·원격 포트가 허용 범위를 벗어난 경우 발생합니다.

UdpTransport.cs 파일의 515 번째 라인에서 정의되었습니다.

516 {
517 ArgumentNullException.ThrowIfNull(options);
518 ArgumentException.ThrowIfNullOrWhiteSpace(options.LocalHost);
519 ArgumentException.ThrowIfNullOrWhiteSpace(options.RemoteHost);
520
521 ValidatePort(options.LocalPort, nameof(options.LocalPort));
522 ValidatePort(options.RemotePort, nameof(options.RemotePort));
523
524 if (options.ReceiveBufferSize <= 0)
525 {
526 throw new ArgumentOutOfRangeException(nameof(options.ReceiveBufferSize));
527 }
528
529 if (options.SendBufferSize <= 0)
530 {
531 throw new ArgumentOutOfRangeException(nameof(options.SendBufferSize));
532 }
533 }

다음을 참조함 : Dreamine.Communication.Sockets.Options.UdpTransportOptions.LocalHost, Dreamine.Communication.Sockets.Options.UdpTransportOptions.LocalPort, Dreamine.Communication.Sockets.Options.UdpTransportOptions.ReceiveBufferSize, Dreamine.Communication.Sockets.Options.UdpTransportOptions.RemoteHost, Dreamine.Communication.Sockets.Options.UdpTransportOptions.RemotePort, Dreamine.Communication.Sockets.Options.UdpTransportOptions.SendBufferSize, ValidatePort().

다음에 의해서 참조됨 : UdpTransport().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ValidatePort()

void Dreamine.Communication.Sockets.Udp.UdpTransport.ValidatePort ( int port,
string parameterName )
inlinestaticprivate

UDP 포트가 유효한 사용자 포트 범위인지 검증합니다.

매개변수
port검증할 포트 번호입니다.
parameterName예외에 사용할 설정 이름입니다.
예외
ArgumentOutOfRangeException포트가 1~65535 범위를 벗어난 경우 발생합니다.

UdpTransport.cs 파일의 567 번째 라인에서 정의되었습니다.

568 {
569 if (port <= 0 || port > 65535)
570 {
571 throw new ArgumentOutOfRangeException(parameterName);
572 }
573 }

다음에 의해서 참조됨 : ValidateOptions().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _client

UdpClient? Dreamine.Communication.Sockets.Udp.UdpTransport._client
private

client 값을 보관합니다.

UdpTransport.cs 파일의 56 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync(), ReceiveLoopAsync(), SendAsync().

◆ _options

readonly UdpTransportOptions Dreamine.Communication.Sockets.Udp.UdpTransport._options
private

options 값을 보관합니다.

UdpTransport.cs 파일의 37 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), UdpTransport().

◆ _protocolAdapter

readonly IMessageProtocolAdapter Dreamine.Communication.Sockets.Udp.UdpTransport._protocolAdapter
private

protocol Adapter 값을 보관합니다.

UdpTransport.cs 파일의 46 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ReceiveLoopAsync(), SendAsync(), UdpTransport().

◆ _receiveLoopCts

CancellationTokenSource? Dreamine.Communication.Sockets.Udp.UdpTransport._receiveLoopCts
private

receive Loop Cts 값을 보관합니다.

UdpTransport.cs 파일의 74 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync().

◆ _receiveLoopTask

Task? Dreamine.Communication.Sockets.Udp.UdpTransport._receiveLoopTask
private

receive Loop Task 값을 보관합니다.

UdpTransport.cs 파일의 83 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync().

◆ _remoteEndPoint

IPEndPoint? Dreamine.Communication.Sockets.Udp.UdpTransport._remoteEndPoint
private

remote End Point 값을 보관합니다.

UdpTransport.cs 파일의 65 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync(), SendAsync().

◆ _state

int Dreamine.Communication.Sockets.Udp.UdpTransport._state = (int)ConnectionState.Disconnected
private

state 값을 보관합니다.

UdpTransport.cs 파일의 92 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : SetState().

속성 문서화

◆ Kind

TransportKind Dreamine.Communication.Sockets.Udp.UdpTransport.Kind
get

UDP 전송 방식을 가져옵니다.

UdpTransport.cs 파일의 175 번째 라인에서 정의되었습니다.

◆ State

ConnectionState Dreamine.Communication.Sockets.Udp.UdpTransport.State
get

스레드 안전하게 현재 UDP 소켓 상태를 가져옵니다.

UdpTransport.cs 파일의 165 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync(), ReceiveLoopAsync(), SendAsync().

이벤트 문서화

◆ MessageReceived

EventHandler<MessageEnvelope>? Dreamine.Communication.Sockets.Udp.UdpTransport.MessageReceived

수신 데이터그램을 메시지로 디코딩했을 때 발생합니다.

UdpTransport.cs 파일의 185 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ReceiveLoopAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: