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

더 자세히 ...

Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport에 대한 상속 다이어그램 :
Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport에 대한 협력 다이어그램:

Public 멤버 함수

 TcpOmronFinsTransport (OmronFinsConnectionOptions options)
async Task< PlcResult > ConnectAsync (CancellationToken cancellationToken=default)
async Task< PlcResult > DisconnectAsync (CancellationToken cancellationToken=default)
async Task< PlcResult< byte[]> > SendAndReceiveAsync (IReadOnlyList< byte > requestFrame, int receiveTimeoutMs, int retryCount, CancellationToken cancellationToken=default)
async ValueTask DisposeAsync ()

속성

bool IsConnected [get]

Private 멤버 함수

async Task CloseCoreAsync ()
void ThrowIfDisposed ()

정적 Private 멤버 함수

static async Task< byte[]> ReceiveFinsTcpPacketAsync (NetworkStream stream, CancellationToken cancellationToken)
static async Task ReadExactlyAsync (NetworkStream stream, byte[] buffer, CancellationToken cancellationToken)

Private 속성

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

상세한 설명

Omron FINS 통신을 위한 TCP 전송을 제공합니다.

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

생성자 & 소멸자 문서화

◆ TcpOmronFinsTransport()

Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.TcpOmronFinsTransport ( OmronFinsConnectionOptions options)
inline

T:Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport 클래스의 새 인스턴스를 초기화합니다.

매개변수
options대상과 제한 시간을 지정하는 FINS 연결 옵션입니다.
예외
ArgumentNullExceptionoptionsnull일 때 발생합니다.

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

89 {
90 _options = options ?? throw new ArgumentNullException(nameof(options));
91 }

다음을 참조함 : _options.

멤버 함수 문서화

◆ CloseCoreAsync()

async Task Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.CloseCoreAsync ( )
inlineprivate

현재 네트워크 스트림과 TCP 클라이언트를 닫고 참조를 초기화합니다.

반환값
닫기 작업을 나타내는 완료 작업입니다.

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

548 {
549 _stream?.Dispose();
550 _tcpClient?.Dispose();
551 _stream = null;
552 _tcpClient = null;
553 await Task.CompletedTask.ConfigureAwait(false);
554 }

다음을 참조함 : _stream, _tcpClient.

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

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

◆ ConnectAsync()

async Task< PlcResult > Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.ConnectAsync ( CancellationToken cancellationToken = default)
inline

구성된 제한 시간 안에 FINS TCP 대상에 연결합니다.

매개변수
cancellationToken연결 및 잠금 대기를 취소하는 토큰입니다.
반환값
연결 성공 또는 포착된 네트워크·제한 시간 오류를 포함하는 결과 작업입니다.
예외
OperationCanceledException동기화 잠금을 기다리는 동안 취소되면 발생합니다.
ObjectDisposedException전송 또는 동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

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

144 {
145 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
146 try
147 {
148 ThrowIfDisposed();
149 if (IsConnected)
150 {
151 return PlcResult.Success();
152 }
153
154 await CloseCoreAsync().ConfigureAwait(false);
155 _tcpClient = new TcpClient { NoDelay = true };
156
157 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
158 timeoutCts.CancelAfter(_options.ConnectTimeoutMs);
159 await _tcpClient.ConnectAsync(_options.Host, _options.Port, timeoutCts.Token).ConfigureAwait(false);
160 _stream = _tcpClient.GetStream();
161 return PlcResult.Success();
162 }
163 catch (OperationCanceledException ex)
164 {
165 await CloseCoreAsync().ConfigureAwait(false);
166 return PlcResult.Failure(ex.Message);
167 }
168 catch (Exception ex)
169 {
170 await CloseCoreAsync().ConfigureAwait(false);
171 return PlcResult.Failure(ex.Message);
172 }
173 finally
174 {
175 _syncLock.Release();
176 }
177 }

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

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

◆ DisconnectAsync()

async Task< PlcResult > Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.DisconnectAsync ( CancellationToken cancellationToken = default)
inline

네트워크 스트림과 TCP 클라이언트를 닫아 FINS 연결을 해제합니다.

매개변수
cancellationToken잠금 대기를 취소하는 토큰입니다.
반환값
연결 해제 성공 결과 작업입니다.
예외
OperationCanceledException동기화 잠금을 기다리는 동안 취소되면 발생합니다.
ObjectDisposedException동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

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

220 {
221 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
222 try
223 {
224 await CloseCoreAsync().ConfigureAwait(false);
225 return PlcResult.Success();
226 }
227 finally
228 {
229 _syncLock.Release();
230 }
231 }

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

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

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

◆ DisposeAsync()

async ValueTask Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.DisposeAsync ( )
inline

연결을 닫고 동기화 자원을 비동기로 정리합니다.

반환값
비동기 정리 작업을 나타내는 값 작업입니다.
예외
ObjectDisposedException동시 정리로 동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

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

371 {
372 if (_disposed)
373 {
374 return;
375 }
376
377 await DisconnectAsync().ConfigureAwait(false);
378 _syncLock.Dispose();
379 _disposed = true;
380 GC.SuppressFinalize(this);
381 }

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

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

◆ ReadExactlyAsync()

async Task Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.ReadExactlyAsync ( NetworkStream stream,
byte[] buffer,
CancellationToken cancellationToken )
inlinestaticprivate

네트워크 스트림에서 대상 버퍼를 끝까지 채웁니다.

매개변수
stream읽을 네트워크 스트림입니다.
buffer완전히 채울 대상 버퍼입니다.
cancellationToken읽기를 취소하는 토큰입니다.
반환값
비동기 읽기 작업입니다.
예외
IOException버퍼를 채우기 전에 원격 끝점이 연결을 닫으면 발생합니다.
OperationCanceledException읽기가 취소되면 발생합니다.

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

517 {
518 var offset = 0;
519 while (offset < buffer.Length)
520 {
521 var read = await stream.ReadAsync(buffer.AsMemory(offset, buffer.Length - offset), cancellationToken).ConfigureAwait(false);
522 if (read == 0)
523 {
524 throw new IOException("The remote FINS endpoint closed the TCP connection.");
525 }
526
527 offset += read;
528 }
529 }

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

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

◆ ReceiveFinsTcpPacketAsync()

async Task< byte[]> Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.ReceiveFinsTcpPacketAsync ( NetworkStream stream,
CancellationToken cancellationToken )
inlinestaticprivate

FINS/TCP 헤더와 선언된 본문 길이를 기준으로 패킷 하나를 정확히 수신합니다.

매개변수
stream읽을 연결된 네트워크 스트림입니다.
cancellationToken수신을 취소하는 토큰입니다.
반환값
헤더와 본문을 포함한 완전한 FINS/TCP 패킷입니다.
예외
InvalidOperationException헤더의 패킷 길이가 8보다 작을 때 발생합니다.
IOException완전한 패킷을 받기 전에 원격 끝점이 연결을 닫으면 발생합니다.
OperationCanceledException수신이 취소되면 발생합니다.

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

440 {
441 var header = new byte[16];
442 await ReadExactlyAsync(stream, header, cancellationToken).ConfigureAwait(false);
443
444 var length = OmronFinsEndian.ReadInt32(header, 4);
445 if (length < 8)
446 {
447 throw new InvalidOperationException($"Invalid FINS/TCP packet length: {length}.");
448 }
449
450 var bodyLength = length - 8;
451 var body = new byte[bodyLength];
452 await ReadExactlyAsync(stream, body, cancellationToken).ConfigureAwait(false);
453
454 var packet = new byte[header.Length + body.Length];
455 Buffer.BlockCopy(header, 0, packet, 0, header.Length);
456 Buffer.BlockCopy(body, 0, packet, header.Length, body.Length);
457 return packet;
458 }

다음을 참조함 : ReadExactlyAsync(), Dreamine.PLC.Omron.Fins.Protocol.OmronFinsEndian.ReadInt32().

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

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

◆ SendAndReceiveAsync()

async Task< PlcResult< byte[]> > Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.SendAndReceiveAsync ( IReadOnlyList< byte > requestFrame,
int receiveTimeoutMs,
int retryCount,
CancellationToken cancellationToken = default )
inline

원시 FINS 프레임을 TCP 패킷으로 전송하고 완전한 응답 패킷을 수신합니다.

매개변수
requestFrame전송할 원시 FINS 요청 프레임입니다.
receiveTimeoutMs밀리초 단위 송수신 제한 시간입니다.
retryCount인터페이스 호환성을 위한 재시도 횟수이며 TCP 구현에서는 사용하지 않습니다.
cancellationToken잠금과 송수신을 취소하는 토큰입니다.
반환값
원시 FINS 응답 프레임 또는 연결·전송·프로토콜 오류를 포함하는 결과 작업입니다.
예외
ArgumentNullExceptionrequestFramenull일 때 발생합니다.
OperationCanceledException동기화 잠금을 기다리는 동안 취소되면 발생합니다.
ObjectDisposedException전송 또는 동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

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

310 {
311 ArgumentNullException.ThrowIfNull(requestFrame);
312
313 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
314 try
315 {
316 ThrowIfDisposed();
317 if (_stream is null || _tcpClient is null || !_tcpClient.Connected)
318 {
319 return PlcResult<byte[]>.Failure("The FINS TCP transport is not connected.");
320 }
321
322 var packet = OmronFinsTcpPacket.Wrap(requestFrame);
323 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
324 timeoutCts.CancelAfter(receiveTimeoutMs);
325
326 await _stream.WriteAsync(packet, timeoutCts.Token).ConfigureAwait(false);
327 await _stream.FlushAsync(timeoutCts.Token).ConfigureAwait(false);
328
329 var responsePacket = await ReceiveFinsTcpPacketAsync(_stream, timeoutCts.Token).ConfigureAwait(false);
330 return PlcResult<byte[]>.Success(OmronFinsTcpPacket.Extract(responsePacket));
331 }
332 catch (OperationCanceledException ex)
333 {
334 return PlcResult<byte[]>.Failure(ex.Message);
335 }
336 catch (Exception ex)
337 {
338 return PlcResult<byte[]>.Failure(ex.Message);
339 }
340 finally
341 {
342 _syncLock.Release();
343 }
344 }

다음을 참조함 : _stream, _syncLock, _tcpClient, Dreamine.PLC.Omron.Fins.Protocol.OmronFinsTcpPacket.Extract(), ReceiveFinsTcpPacketAsync(), ThrowIfDisposed(), Dreamine.PLC.Omron.Fins.Protocol.OmronFinsTcpPacket.Wrap().

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

◆ ThrowIfDisposed()

void Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.ThrowIfDisposed ( )
inlineprivate

이 전송 인스턴스가 아직 정리되지 않았는지 확인합니다.

예외
ObjectDisposedException인스턴스가 이미 정리된 경우 발생합니다.

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

573 {
574 ObjectDisposedException.ThrowIf(_disposed, this);
575 }

다음을 참조함 : _disposed.

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

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

멤버 데이터 문서화

◆ _disposed

bool Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport._disposed
private

disposed 값을 보관합니다.

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

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

◆ _options

readonly OmronFinsConnectionOptions Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport._options
private

options 값을 보관합니다.

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

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

◆ _stream

NetworkStream? Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport._stream
private

stream 값을 보관합니다.

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

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

◆ _syncLock

readonly SemaphoreSlim Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport._syncLock = new(1, 1)
private

sync Lock 값을 보관합니다.

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

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

◆ _tcpClient

TcpClient? Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport._tcpClient
private

tcp Client 값을 보관합니다.

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

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

속성 문서화

◆ IsConnected

bool Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport.IsConnected
get

TCP 클라이언트가 연결되고 네트워크 스트림이 준비되었는지 여부를 가져옵니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

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

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


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