Dreamine.IO.Fastech.Ethernet 1.0.1
Dreamine.IO.Fastech.Ethernet 산업 자동화 및 I/O 기능을 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport 클래스 참조sealed

더 자세히 ...

Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport에 대한 상속 다이어그램 :
Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport에 대한 협력 다이어그램:

Public 멤버 함수

 TcpFastechEthernetIoTransport (FastechEthernetIoOptions options)
async Task< IoResult > ConnectAsync (CancellationToken cancellationToken=default)
async Task< IoResult > DisconnectAsync (CancellationToken cancellationToken=default)
async Task< IoResult< byte[]> > SendAndReceiveAsync (IReadOnlyList< byte > requestFrame, int receiveTimeoutMs, int expectedResponseLength, CancellationToken cancellationToken=default)
async ValueTask DisposeAsync ()

속성

bool IsConnected [get]

Private 멤버 함수

Task CloseCoreAsync ()
void ThrowIfDisposed ()

정적 Private 멤버 함수

static async Task< byte[]> ReadExactlyAsync (NetworkStream stream, int length, CancellationToken cancellationToken)
static async Task< byte[]> ReadAvailableAsync (NetworkStream stream, CancellationToken cancellationToken)

Private 속성

readonly SemaphoreSlim _syncLock = new(1, 1)
readonly FastechEthernetIoOptions _options
TcpClient? _tcpClient
NetworkStream? _stream
bool _disposed

정적 Private 속성

const int DefaultReceiveBufferSize = 4096

상세한 설명

Fastech Ethernet I/O 통신을 위한 TCP 전송을 제공합니다.

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

생성자 & 소멸자 문서화

◆ TcpFastechEthernetIoTransport()

Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.TcpFastechEthernetIoTransport ( FastechEthernetIoOptions options)
inline

TcpFastechEthernetIoTransport 클래스의 새 인스턴스를 초기화합니다.

매개변수
optionsFastech Ethernet I/O 연결 옵션입니다.
예외
ArgumentNullExceptionoptionsnull인 경우 발생합니다.

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

98 {
99 _options = options ?? throw new ArgumentNullException(nameof(options));
100 }

다음을 참조함 : _options.

멤버 함수 문서화

◆ CloseCoreAsync()

Task Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.CloseCoreAsync ( )
inlineprivate

내부 TCP 스트림과 클라이언트를 닫고 참조를 초기화합니다.

반환값
완료된 비동기 작업입니다.

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

555 {
556 try
557 {
558 _stream?.Dispose();
559 _tcpClient?.Dispose();
560 }
561 finally
562 {
563 _stream = null;
564 _tcpClient = null;
565 }
566
567 return Task.CompletedTask;
568 }

다음을 참조함 : _stream, _tcpClient.

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

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

◆ ConnectAsync()

async Task< IoResult > Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.ConnectAsync ( CancellationToken cancellationToken = default)
inline

구성된 호스트와 포트에 TCP 연결을 설정합니다.

매개변수
cancellationToken연결 작업 취소를 관찰하는 토큰입니다.
반환값
연결 성공 여부와 실패 메시지를 포함한 결과입니다.
예외
OperationCanceledException동기화 잠금을 기다리는 동안 cancellationToken 이 취소된 경우 발생합니다.

Dreamine.IO.Fastech.Ethernet.Transport.IFastechEthernetIoTransport를 구현.

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

145 {
146 if (string.IsNullOrWhiteSpace(_options.Host))
147 {
148 return IoResult.Failure("The Fastech host must not be empty.");
149 }
150
151 if (_options.Port is <= 0 or > 65535)
152 {
153 return IoResult.Failure($"Invalid TCP port: {_options.Port}.");
154 }
155
156 if (_options.ConnectTimeoutMs <= 0)
157 {
158 return IoResult.Failure("The connection timeout must be greater than zero.");
159 }
160
161 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
162
163 try
164 {
165 ThrowIfDisposed();
166
167 if (IsConnected)
168 {
169 return IoResult.Success();
170 }
171
172 await CloseCoreAsync().ConfigureAwait(false);
173
174 _tcpClient = new TcpClient
175 {
176 NoDelay = true
177 };
178
179 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
180 timeoutCts.CancelAfter(_options.ConnectTimeoutMs);
181
182 await _tcpClient.ConnectAsync(_options.Host, _options.Port, timeoutCts.Token).ConfigureAwait(false);
183 _stream = _tcpClient.GetStream();
184
185 return IoResult.Success();
186 }
187 catch (OperationCanceledException ex)
188 {
189 await CloseCoreAsync().ConfigureAwait(false);
190 return IoResult.Failure(ex.Message);
191 }
192 catch (Exception ex)
193 {
194 await CloseCoreAsync().ConfigureAwait(false);
195 return IoResult.Failure(ex.Message);
196 }
197 finally
198 {
199 _syncLock.Release();
200 }
201 }

다음을 참조함 : _options, _stream, _syncLock, _tcpClient, CloseCoreAsync(), IsConnected, ThrowIfDisposed().

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

◆ DisconnectAsync()

async Task< IoResult > Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.DisconnectAsync ( CancellationToken cancellationToken = default)
inline

현재 TCP 연결과 스트림을 닫습니다.

매개변수
cancellationToken연결 해제 작업 취소를 관찰하는 토큰입니다.
반환값
연결 해제 성공 여부와 실패 메시지를 포함한 결과입니다.
예외
OperationCanceledException동기화 잠금을 기다리는 동안 cancellationToken 이 취소된 경우 발생합니다.

Dreamine.IO.Fastech.Ethernet.Transport.IFastechEthernetIoTransport를 구현.

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

236 {
237 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
238
239 try
240 {
241 await CloseCoreAsync().ConfigureAwait(false);
242 return IoResult.Success();
243 }
244 catch (Exception ex)
245 {
246 return IoResult.Failure(ex.Message);
247 }
248 finally
249 {
250 _syncLock.Release();
251 }
252 }

다음을 참조함 : _syncLock, CloseCoreAsync().

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

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

◆ DisposeAsync()

async ValueTask Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.DisposeAsync ( )
inline

연결과 동기화 리소스를 비동기적으로 해제합니다.

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

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

397 {
398 if (_disposed)
399 {
400 return;
401 }
402
403 await DisconnectAsync().ConfigureAwait(false);
404 _syncLock.Dispose();
405 _disposed = true;
406
407 GC.SuppressFinalize(this);
408 }

다음을 참조함 : _disposed, _syncLock, DisconnectAsync().

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

◆ ReadAvailableAsync()

async Task< byte[]> Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.ReadAvailableAsync ( NetworkStream stream,
CancellationToken cancellationToken )
inlinestaticprivate

스트림에서 현재 수신 가능한 데이터를 한 번 읽습니다.

매개변수
stream읽을 네트워크 스트림입니다.
cancellationToken읽기 취소를 관찰하는 토큰입니다.
반환값
수신한 바이트 배열입니다.
예외
IOException데이터를 읽기 전에 원격 끝점이 연결을 닫은 경우 발생합니다.

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

526 {
527 var buffer = new byte[DefaultReceiveBufferSize];
528 var read = await stream.ReadAsync(buffer, cancellationToken).ConfigureAwait(false);
529
530 if (read == 0)
531 {
532 throw new IOException("The remote Fastech endpoint closed the TCP connection.");
533 }
534
535 return buffer[..read];
536 }

다음을 참조함 : DefaultReceiveBufferSize.

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

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

◆ ReadExactlyAsync()

async Task< byte[]> Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.ReadExactlyAsync ( NetworkStream stream,
int length,
CancellationToken cancellationToken )
inlinestaticprivate

스트림에서 지정된 바이트 수를 모두 읽습니다.

매개변수
stream읽을 네트워크 스트림입니다.
length읽어야 할 바이트 수입니다.
cancellationToken읽기 취소를 관찰하는 토큰입니다.
반환값
정확히 요청된 길이의 바이트 배열입니다.
예외
IOException요청된 길이를 읽기 전에 원격 끝점이 연결을 닫은 경우 발생합니다.

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

462 {
463 var buffer = new byte[length];
464 var offset = 0;
465
466 while (offset < buffer.Length)
467 {
468 var read = await stream.ReadAsync(
469 buffer.AsMemory(offset, buffer.Length - offset),
470 cancellationToken).ConfigureAwait(false);
471
472 if (read == 0)
473 {
474 throw new IOException("The remote Fastech endpoint closed the TCP connection.");
475 }
476
477 offset += read;
478 }
479
480 return buffer;
481 }

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

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

◆ SendAndReceiveAsync()

async Task< IoResult< byte[]> > Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.SendAndReceiveAsync ( IReadOnlyList< byte > requestFrame,
int receiveTimeoutMs,
int expectedResponseLength,
CancellationToken cancellationToken = default )
inline

요청 프레임을 전송하고 TCP 응답 프레임을 수신합니다.

매개변수
requestFrame전송할 요청 바이트입니다.
receiveTimeoutMs밀리초 단위의 수신 제한 시간입니다.
expectedResponseLength기대하는 응답 길이이며, 0이면 한 번에 사용 가능한 데이터를 읽습니다.
cancellationToken송수신 작업 취소를 관찰하는 토큰입니다.
반환값
수신한 바이트 또는 실패 메시지를 포함한 결과입니다.
예외
ArgumentNullExceptionrequestFramenull인 경우 발생합니다.
OperationCanceledException동기화 잠금을 기다리는 동안 cancellationToken 이 취소된 경우 발생합니다.

Dreamine.IO.Fastech.Ethernet.Transport.IFastechEthernetIoTransport를 구현.

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

323 {
324 ArgumentNullException.ThrowIfNull(requestFrame);
325
326 if (requestFrame.Count == 0)
327 {
328 return IoResult<byte[]>.Failure("The request frame must not be empty.");
329 }
330
331 if (receiveTimeoutMs <= 0)
332 {
333 return IoResult<byte[]>.Failure("The receive timeout must be greater than zero.");
334 }
335
336 if (expectedResponseLength < 0)
337 {
338 return IoResult<byte[]>.Failure("The expected response length must not be negative.");
339 }
340
341 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
342
343 try
344 {
345 ThrowIfDisposed();
346
347 if (_stream is null || _tcpClient is null || !_tcpClient.Connected)
348 {
349 return IoResult<byte[]>.Failure("The Fastech TCP transport is not connected.");
350 }
351
352 var requestBuffer = requestFrame as byte[] ?? requestFrame.ToArray();
353
354 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
355 timeoutCts.CancelAfter(receiveTimeoutMs);
356
357 await _stream.WriteAsync(requestBuffer, timeoutCts.Token).ConfigureAwait(false);
358 await _stream.FlushAsync(timeoutCts.Token).ConfigureAwait(false);
359
360 var response = expectedResponseLength > 0
361 ? await ReadExactlyAsync(_stream, expectedResponseLength, timeoutCts.Token).ConfigureAwait(false)
362 : await ReadAvailableAsync(_stream, timeoutCts.Token).ConfigureAwait(false);
363
364 return IoResult<byte[]>.Success(response);
365 }
366 catch (OperationCanceledException ex)
367 {
368 return IoResult<byte[]>.Failure(ex.Message);
369 }
370 catch (Exception ex)
371 {
372 return IoResult<byte[]>.Failure(ex.Message);
373 }
374 finally
375 {
376 _syncLock.Release();
377 }
378 }

다음을 참조함 : _stream, _syncLock, _tcpClient, ReadAvailableAsync(), ReadExactlyAsync(), ThrowIfDisposed().

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

◆ ThrowIfDisposed()

void Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.ThrowIfDisposed ( )
inlineprivate

이 전송 객체가 이미 해제되었으면 예외를 발생시킵니다.

예외
ObjectDisposedException객체가 이미 해제된 경우 발생합니다.

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

587 {
588 ObjectDisposedException.ThrowIf(_disposed, this);
589 }

다음을 참조함 : _disposed.

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

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

멤버 데이터 문서화

◆ _disposed

bool Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport._disposed
private

disposed 값을 보관합니다.

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

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

◆ _options

readonly FastechEthernetIoOptions Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport._options
private

options 값을 보관합니다.

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

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

◆ _stream

NetworkStream? Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport._stream
private

stream 값을 보관합니다.

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

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

◆ _syncLock

readonly SemaphoreSlim Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport._syncLock = new(1, 1)
private

sync Lock 값을 보관합니다.

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

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

◆ _tcpClient

TcpClient? Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport._tcpClient
private

tcp Client 값을 보관합니다.

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

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

◆ DefaultReceiveBufferSize

const int Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.DefaultReceiveBufferSize = 4096
staticprivate

Default Receive Buffer Size 값을 보관합니다.

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

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

속성 문서화

◆ IsConnected

bool Dreamine.IO.Fastech.Ethernet.Transport.TcpFastechEthernetIoTransport.IsConnected
get

TCP 클라이언트와 네트워크 스트림이 연결되어 있는지 여부를 가져옵니다.

Dreamine.IO.Fastech.Ethernet.Transport.IFastechEthernetIoTransport를 구현.

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

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


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