Dreamine.PLC.Mitsubishi.MC 1.0.1
Dreamine.PLC.Mitsubishi.MC 산업 자동화 및 I/O 기능을 제공합니다.
로딩중...
검색중...
일치하는것 없음
FakeMitsubishiMcTransport.cs
이 파일의 문서화 페이지로 가기
1using Dreamine.PLC.Abstractions.Results;
2
4
14{
23 private readonly Queue<byte[]> _responses = new();
32 private readonly List<byte[]> _sentFrames = new();
33
42 public bool IsConnected { get; private set; }
43
52 public IReadOnlyList<byte[]> SentFrames => _sentFrames;
53
77 public void EnqueueResponse(byte[] responseFrame)
78 {
79 ArgumentNullException.ThrowIfNull(responseFrame);
80
81 _responses.Enqueue(responseFrame);
82 }
83
134 public Task<PlcResult> ConnectAsync(
135 string host,
136 int port,
137 int timeoutMs,
138 CancellationToken cancellationToken = default)
139 {
140 cancellationToken.ThrowIfCancellationRequested();
141
142 IsConnected = true;
143
144 return Task.FromResult(PlcResult.Success());
145 }
146
176 public Task<PlcResult> DisconnectAsync(CancellationToken cancellationToken = default)
177 {
178 cancellationToken.ThrowIfCancellationRequested();
179
180 IsConnected = false;
181
182 return Task.FromResult(PlcResult.Success());
183 }
184
242 public Task<PlcResult<byte[]>> SendAndReceiveAsync(
243 IReadOnlyList<byte> requestFrame,
244 int receiveTimeoutMs,
245 int retryCount,
246 CancellationToken cancellationToken = default)
247 {
248 ArgumentNullException.ThrowIfNull(requestFrame);
249
250 cancellationToken.ThrowIfCancellationRequested();
251
252 if (!IsConnected)
253 {
254 return Task.FromResult(
255 PlcResult<byte[]>.Failure("The fake Mitsubishi MC transport is not connected."));
256 }
257
258 if (requestFrame.Count == 0)
259 {
260 return Task.FromResult(
261 PlcResult<byte[]>.Failure("The request frame must not be empty."));
262 }
263
264 _sentFrames.Add(requestFrame as byte[] ?? requestFrame.ToArray());
265
266 if (_responses.Count == 0)
267 {
268 return Task.FromResult(
269 PlcResult<byte[]>.Failure("No fake Mitsubishi MC response frame was queued."));
270 }
271
272 return Task.FromResult(
273 PlcResult<byte[]>.Success(_responses.Dequeue()));
274 }
275
291 public ValueTask DisposeAsync()
292 {
293 IsConnected = false;
294 _responses.Clear();
295 _sentFrames.Clear();
296
297 return ValueTask.CompletedTask;
298 }
299}
Task< PlcResult< byte[]> > SendAndReceiveAsync(IReadOnlyList< byte > requestFrame, int receiveTimeoutMs, int retryCount, CancellationToken cancellationToken=default)
Task< PlcResult > DisconnectAsync(CancellationToken cancellationToken=default)
Task< PlcResult > ConnectAsync(string host, int port, int timeoutMs, CancellationToken cancellationToken=default)