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

더 자세히 ...

Dreamine.PLC.Core.Simulation.PlcSimulatorServer에 대한 상속 다이어그램 :
Dreamine.PLC.Core.Simulation.PlcSimulatorServer에 대한 협력 다이어그램:

Public 멤버 함수

 PlcSimulatorServer (PlcSimulatorServerOptions options)
 PlcSimulatorServer (PlcSimulatorServerOptions options, InMemoryPlcMemory memory)
Task StartAsync (CancellationToken cancellationToken=default)
async Task StopAsync ()
async ValueTask DisposeAsync ()

속성

bool IsRunning [get]

이벤트

EventHandler< string >? StatusChanged

Private 멤버 함수

async Task AcceptLoopAsync (CancellationToken cancellationToken)
async Task HandleClientAsync (TcpClient client, CancellationToken cancellationToken)
string ExecuteLine (string line)
string ExecuteReadBits (Abstractions.Devices.PlcAddress address, string argument)
string ExecuteReadWords (Abstractions.Devices.PlcAddress address, string argument)
string ExecuteWriteBits (Abstractions.Devices.PlcAddress address, string argument)
string ExecuteWriteWords (Abstractions.Devices.PlcAddress address, string argument)
void ApplyAutoWordResponse (Abstractions.Devices.PlcAddress writtenAddress, IReadOnlyList< short > values)

정적 Private 멤버 함수

static bool TryParseCount (string text, out int count, out string error)
static IPAddress ParseAddress (string host)

Private 속성

readonly PlcSimulatorServerOptions _options
readonly InMemoryPlcMemory _memory
readonly DefaultPlcAddressParser _addressParser = new()
readonly List< Task > _clientTasks = []
readonly object _syncRoot = new()
CancellationTokenSource? _cts
TcpListener? _listener
Task? _acceptTask

상세한 설명

샘플과 PC 간 테스트용 경량 TCP PLC 시뮬레이터 서버를 제공합니다.

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

생성자 & 소멸자 문서화

◆ PlcSimulatorServer() [1/2]

Dreamine.PLC.Core.Simulation.PlcSimulatorServer.PlcSimulatorServer ( PlcSimulatorServerOptions options)
inline

새 메모리 저장소와 지정한 옵션으로 서버를 초기화합니다.

매개변수
options서버 옵션입니다.
예외
ArgumentNullExceptionoptionsnull인 경우 발생합니다.

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

116 : this(options, new InMemoryPlcMemory())
117 {
118 }

◆ PlcSimulatorServer() [2/2]

Dreamine.PLC.Core.Simulation.PlcSimulatorServer.PlcSimulatorServer ( PlcSimulatorServerOptions options,
InMemoryPlcMemory memory )
inline

지정한 옵션과 공유 메모리 저장소로 서버를 초기화합니다.

매개변수
options서버 옵션입니다.
memory공유 PLC 메모리입니다.
예외
ArgumentNullException옵션 또는 메모리가 null인 경우 발생합니다.

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

152 {
153 _options = options ?? throw new ArgumentNullException(nameof(options));
154 _memory = memory ?? throw new ArgumentNullException(nameof(memory));
155 }

다음을 참조함 : _memory, _options.

멤버 함수 문서화

◆ AcceptLoopAsync()

async Task Dreamine.PLC.Core.Simulation.PlcSimulatorServer.AcceptLoopAsync ( CancellationToken cancellationToken)
inlineprivate

TCP 클라이언트를 수락하고 각 연결 처리 작업을 추적합니다.

매개변수
cancellationToken루프 취소 토큰입니다.
반환값
수락 루프 작업입니다.

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

320 {
321 while (!cancellationToken.IsCancellationRequested && _listener is not null)
322 {
323 TcpClient client;
324
325 try
326 {
327 client = await _listener.AcceptTcpClientAsync(cancellationToken).ConfigureAwait(false);
328 }
329 catch (OperationCanceledException)
330 {
331 break;
332 }
333 catch (ObjectDisposedException)
334 {
335 break;
336 }
337
338 var task = Task.Run(() => HandleClientAsync(client, cancellationToken), CancellationToken.None);
339 lock (_syncRoot)
340 {
341 _clientTasks.RemoveAll(static item => item.IsCompleted);
342 _clientTasks.Add(task);
343 }
344 }
345 }

다음을 참조함 : _clientTasks, _listener, _syncRoot, HandleClientAsync().

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

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

◆ ApplyAutoWordResponse()

void Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ApplyAutoWordResponse ( Abstractions.Devices.PlcAddress writtenAddress,
IReadOnlyList< short > values )
inlineprivate

구성된 트리거에 단일 워드가 기록되면 증가된 자동 응답 값을 씁니다.

매개변수
writtenAddress기록된 주소입니다.
values기록된 값입니다.

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

697 {
698 if (!_options.EnableAutoWordResponse || values.Count != 1)
699 {
700 return;
701 }
702
703 var triggerResult = _addressParser.Parse(_options.AutoResponseTriggerAddress);
704 var responseResult = _addressParser.Parse(_options.AutoResponseAddress);
705 if (!triggerResult.IsSuccess || !responseResult.IsSuccess)
706 {
707 return;
708 }
709
710 var triggerAddress = triggerResult.Value;
711 if (writtenAddress.DeviceType != triggerAddress.DeviceType || writtenAddress.Offset != triggerAddress.Offset)
712 {
713 return;
714 }
715
716 var rawResponseValue = values[0] + _options.AutoResponseIncrement;
717 if (rawResponseValue is < short.MinValue or > short.MaxValue)
718 {
719 StatusChanged?.Invoke(this, $"Auto response skipped: value overflow. {_options.AutoResponseAddress}={rawResponseValue}");
720 return;
721 }
722
723 var responseValue = (short)rawResponseValue;
724 _memory.WriteWords(responseResult.Value, [responseValue]);
725 StatusChanged?.Invoke(this, $"Auto response: {_options.AutoResponseAddress}={responseValue}");
726 }

다음을 참조함 : _addressParser, _memory, _options, StatusChanged.

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

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

◆ DisposeAsync()

async ValueTask Dreamine.PLC.Core.Simulation.PlcSimulatorServer.DisposeAsync ( )
inline

TCP 시뮬레이터 서버를 중지하고 리소스를 해제합니다.

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

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

293 {
294 await StopAsync().ConfigureAwait(false);
295 }

다음을 참조함 : StopAsync().

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

◆ ExecuteLine()

string Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ExecuteLine ( string line)
inlineprivate

한 프로토콜 명령 라인을 분석하고 성공 또는 오류 응답을 만듭니다.

매개변수
line명령 라인입니다.
반환값
프로토콜 응답 라인입니다.

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

424 {
425 try
426 {
427 var parts = line.Split(' ', 3, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
428 if (parts.Length < 3)
429 {
430 return PlcSimulatorProtocol.Error("Invalid command format.");
431 }
432
433 var command = parts[0].ToUpperInvariant();
434 var addressResult = _addressParser.Parse(parts[1]);
435 if (!addressResult.IsSuccess)
436 {
437 return PlcSimulatorProtocol.Error(addressResult.Message ?? "Invalid PLC address.");
438 }
439
440 var address = addressResult.Value;
441 var argument = parts[2];
442
443 return command switch
444 {
445 PlcSimulatorProtocol.ReadBits => ExecuteReadBits(address, argument),
446 PlcSimulatorProtocol.ReadWords => ExecuteReadWords(address, argument),
447 PlcSimulatorProtocol.WriteBits => ExecuteWriteBits(address, argument),
448 PlcSimulatorProtocol.WriteWords => ExecuteWriteWords(address, argument),
449 _ => PlcSimulatorProtocol.Error($"Unsupported command: {command}")
450 };
451 }
452 catch (Exception ex)
453 {
454 return PlcSimulatorProtocol.Error(ex.Message);
455 }
456 }

다음을 참조함 : _addressParser, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Error(), ExecuteReadBits(), ExecuteReadWords(), ExecuteWriteBits(), ExecuteWriteWords(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.ReadBits, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.ReadWords, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.WriteBits, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.WriteWords.

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

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

◆ ExecuteReadBits()

string Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ExecuteReadBits ( Abstractions.Devices.PlcAddress address,
string argument )
inlineprivate

비트 읽기 명령을 실행합니다.

매개변수
address시작 주소입니다.
argument읽기 수 인수입니다.
반환값
응답 라인입니다.

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

488 {
489 if (!TryParseCount(argument, out var count, out var error))
490 {
491 return PlcSimulatorProtocol.Error(error);
492 }
493
494 var result = _memory.ReadBits(address, count);
495 return result.IsSuccess && result.Value is not null
496 ? PlcSimulatorProtocol.Ok(PlcSimulatorProtocol.FormatBits(result.Value))
497 : PlcSimulatorProtocol.Error(result.Message ?? "Read bits failed.");
498 }

다음을 참조함 : _memory, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Error(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.FormatBits(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Ok(), TryParseCount().

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

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

◆ ExecuteReadWords()

string Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ExecuteReadWords ( Abstractions.Devices.PlcAddress address,
string argument )
inlineprivate

워드 읽기 명령을 실행합니다.

매개변수
address시작 주소입니다.
argument읽기 수 인수입니다.
반환값
응답 라인입니다.

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

530 {
531 if (!TryParseCount(argument, out var count, out var error))
532 {
533 return PlcSimulatorProtocol.Error(error);
534 }
535
536 var result = _memory.ReadWords(address, count);
537 return result.IsSuccess && result.Value is not null
538 ? PlcSimulatorProtocol.Ok(PlcSimulatorProtocol.FormatWords(result.Value))
539 : PlcSimulatorProtocol.Error(result.Message ?? "Read words failed.");
540 }

다음을 참조함 : _memory, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Error(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.FormatWords(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Ok(), TryParseCount().

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

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

◆ ExecuteWriteBits()

string Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ExecuteWriteBits ( Abstractions.Devices.PlcAddress address,
string argument )
inlineprivate

비트 쓰기 명령을 실행합니다.

매개변수
address시작 주소입니다.
argument비트 페이로드입니다.
반환값
응답 라인입니다.

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

626 {
627 var values = PlcSimulatorProtocol.ParseBits(argument);
628 var result = _memory.WriteBits(address, values);
629 return result.IsSuccess ? PlcSimulatorProtocol.Ok() : PlcSimulatorProtocol.Error(result.Message ?? "Write bits failed.");
630 }

다음을 참조함 : _memory, Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Error(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Ok(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.ParseBits().

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

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

◆ ExecuteWriteWords()

string Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ExecuteWriteWords ( Abstractions.Devices.PlcAddress address,
string argument )
inlineprivate

워드 쓰기 명령을 실행하고 자동 응답을 적용합니다.

매개변수
address시작 주소입니다.
argument워드 페이로드입니다.
반환값
응답 라인입니다.

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

662 {
663 var values = PlcSimulatorProtocol.ParseWords(argument);
664 var result = _memory.WriteWords(address, values);
665 if (!result.IsSuccess)
666 {
667 return PlcSimulatorProtocol.Error(result.Message ?? "Write words failed.");
668 }
669
670 ApplyAutoWordResponse(address, values);
671 return PlcSimulatorProtocol.Ok();
672 }

다음을 참조함 : _memory, ApplyAutoWordResponse(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Error(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.Ok(), Dreamine.PLC.Core.Simulation.PlcSimulatorProtocol.ParseWords().

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

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

◆ HandleClientAsync()

async Task Dreamine.PLC.Core.Simulation.PlcSimulatorServer.HandleClientAsync ( TcpClient client,
CancellationToken cancellationToken )
inlineprivate

한 클라이언트의 라인 명령을 읽고 실행 결과를 응답합니다.

매개변수
client처리할 TCP 클라이언트입니다.
cancellationToken처리 취소 토큰입니다.
반환값
클라이언트 처리 작업입니다.

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

377 {
378 using (client)
379 using (var stream = client.GetStream())
380 using (var reader = new StreamReader(stream))
381 using (var writer = new StreamWriter(stream) { AutoFlush = true })
382 {
383 StatusChanged?.Invoke(this, "PLC simulator client connected.");
384
385 while (!cancellationToken.IsCancellationRequested)
386 {
387 var line = await reader.ReadLineAsync(cancellationToken).ConfigureAwait(false);
388 if (line is null)
389 {
390 break;
391 }
392
393 var response = ExecuteLine(line);
394 await writer.WriteLineAsync(response.AsMemory(), cancellationToken).ConfigureAwait(false);
395 }
396 }
397
398 StatusChanged?.Invoke(this, "PLC simulator client disconnected.");
399 }

다음을 참조함 : ExecuteLine(), StatusChanged.

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

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

◆ ParseAddress()

IPAddress Dreamine.PLC.Core.Simulation.PlcSimulatorServer.ParseAddress ( string host)
inlinestaticprivate

바인딩 호스트를 IP 주소로 변환하며 비어 있거나 잘못되면 Any를 사용합니다.

매개변수
host호스트 텍스트입니다.
반환값
바인딩 IP 주소입니다.

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

751 {
752 if (string.IsNullOrWhiteSpace(host) || host == "*" || host == "+")
753 {
754 return IPAddress.Any;
755 }
756
757 return IPAddress.TryParse(host, out var address) ? address : IPAddress.Any;
758 }

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

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

◆ StartAsync()

Task Dreamine.PLC.Core.Simulation.PlcSimulatorServer.StartAsync ( CancellationToken cancellationToken = default)
inline

TCP 수신기를 시작하고 클라이언트 수락 루프를 실행합니다.

매개변수
cancellationToken서버 수명 취소 토큰입니다.
반환값
시작 작업입니다.

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

201 {
202 if (_listener is not null)
203 {
204 return Task.CompletedTask;
205 }
206
207 var address = ParseAddress(_options.Host);
208 _listener = new TcpListener(address, _options.Port);
209 _listener.Start();
210 _cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
211 _acceptTask = Task.Run(() => AcceptLoopAsync(_cts.Token), CancellationToken.None);
212 StatusChanged?.Invoke(this, $"PLC simulator server started. {_options.Host}:{_options.Port}");
213 return Task.CompletedTask;
214 }

다음을 참조함 : _acceptTask, _cts, _listener, _options, AcceptLoopAsync(), ParseAddress(), StatusChanged.

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

◆ StopAsync()

async Task Dreamine.PLC.Core.Simulation.PlcSimulatorServer.StopAsync ( )
inline

수신기를 중지하고 수락 및 클라이언트 작업 종료를 기다립니다.

반환값
비동기 중지 작업입니다.

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

233 {
234 if (_listener is null)
235 {
236 return;
237 }
238
239 _cts?.Cancel();
240 _listener.Stop();
241 _listener = null;
242
243 if (_acceptTask is not null)
244 {
245 try
246 {
247 await _acceptTask.ConfigureAwait(false);
248 }
249 catch (OperationCanceledException)
250 {
251 }
252 catch (ObjectDisposedException)
253 {
254 }
255 }
256
257 Task[] clientTasks;
258 lock (_syncRoot)
259 {
260 clientTasks = _clientTasks.ToArray();
261 _clientTasks.Clear();
262 }
263
264 try
265 {
266 await Task.WhenAll(clientTasks).ConfigureAwait(false);
267 }
268 catch
269 {
270 }
271
272 _cts?.Dispose();
273 _cts = null;
274 StatusChanged?.Invoke(this, "PLC simulator server stopped.");
275 }

다음을 참조함 : _acceptTask, _clientTasks, _cts, _listener, _syncRoot, StatusChanged.

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

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

◆ TryParseCount()

bool Dreamine.PLC.Core.Simulation.PlcSimulatorServer.TryParseCount ( string text,
out int count,
out string error )
inlinestaticprivate

양의 읽기 수를 구문 분석합니다.

매개변수
text수 텍스트입니다.
count구문 분석된 수입니다.
error실패 메시지입니다.
반환값
성공하면 true입니다.

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

579 {
580 if (!int.TryParse(text, out count))
581 {
582 error = $"Invalid read count: {text}";
583 return false;
584 }
585
586 if (count <= 0)
587 {
588 error = "Read count must be greater than zero.";
589 return false;
590 }
591
592 error = string.Empty;
593 return true;
594 }

다음에 의해서 참조됨 : ExecuteReadBits(), ExecuteReadWords().

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

멤버 데이터 문서화

◆ _acceptTask

Task? Dreamine.PLC.Core.Simulation.PlcSimulatorServer._acceptTask
private

accept Task 값을 보관합니다.

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

다음에 의해서 참조됨 : StartAsync(), StopAsync().

◆ _addressParser

readonly DefaultPlcAddressParser Dreamine.PLC.Core.Simulation.PlcSimulatorServer._addressParser = new()
private

address Parser 값을 보관합니다.

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

다음에 의해서 참조됨 : ApplyAutoWordResponse(), ExecuteLine().

◆ _clientTasks

readonly List<Task> Dreamine.PLC.Core.Simulation.PlcSimulatorServer._clientTasks = []
private

client Tasks 값을 보관합니다.

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

다음에 의해서 참조됨 : AcceptLoopAsync(), StopAsync().

◆ _cts

CancellationTokenSource? Dreamine.PLC.Core.Simulation.PlcSimulatorServer._cts
private

cts 값을 보관합니다.

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

다음에 의해서 참조됨 : StartAsync(), StopAsync().

◆ _listener

TcpListener? Dreamine.PLC.Core.Simulation.PlcSimulatorServer._listener
private

listener 값을 보관합니다.

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

다음에 의해서 참조됨 : AcceptLoopAsync(), StartAsync(), StopAsync().

◆ _memory

readonly InMemoryPlcMemory Dreamine.PLC.Core.Simulation.PlcSimulatorServer._memory
private

memory 값을 보관합니다.

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

다음에 의해서 참조됨 : ApplyAutoWordResponse(), ExecuteReadBits(), ExecuteReadWords(), ExecuteWriteBits(), ExecuteWriteWords(), PlcSimulatorServer().

◆ _options

readonly PlcSimulatorServerOptions Dreamine.PLC.Core.Simulation.PlcSimulatorServer._options
private

options 값을 보관합니다.

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

다음에 의해서 참조됨 : ApplyAutoWordResponse(), PlcSimulatorServer(), StartAsync().

◆ _syncRoot

readonly object Dreamine.PLC.Core.Simulation.PlcSimulatorServer._syncRoot = new()
private

sync Root 값을 보관합니다.

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

다음에 의해서 참조됨 : AcceptLoopAsync(), StopAsync().

속성 문서화

◆ IsRunning

bool Dreamine.PLC.Core.Simulation.PlcSimulatorServer.IsRunning
get

시뮬레이터 서버 실행 여부를 가져옵니다.

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

이벤트 문서화

◆ StatusChanged

EventHandler<string>? Dreamine.PLC.Core.Simulation.PlcSimulatorServer.StatusChanged

서버 상태 메시지가 변경될 때 발생합니다.

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

다음에 의해서 참조됨 : ApplyAutoWordResponse(), HandleClientAsync(), StartAsync(), StopAsync().


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