private void ServiceRequest(Protocol.AdsContext context) { Protocol.AdsResponse response = context.Response; switch (response.Command) { case Protocol.AdsCommand.Read: base.AdsReadRes(AmsAddress.Parse(context.Route), context.InvokeID, MapError(response.Error), response.Payload == null ? 0 : (uint)response.Payload.Length, response.Payload); break; case Protocol.AdsCommand.Write: base.AdsWriteRes(AmsAddress.Parse(context.Route), context.InvokeID, MapError(response.Error)); break; case Protocol.AdsCommand.ReadWrite: base.AdsReadWriteRes(AmsAddress.Parse(context.Route), context.InvokeID, MapError(response.Error), response.Payload == null ? 0 : (uint)response.Payload.Length, response.Payload); break; default: break; } if (_pendingRequests.ContainsKey(context.InvokeID)) { _pendingRequests.Remove(context.InvokeID); } }
public override void AdsReadWriteInd(AmsAddress rAddr, uint invokeId, uint indexGroup, uint indexOffset, uint cbReadLength, uint cbWriteLength, byte[] data) { if (OnClientReadWriteRequest != null) { _pendingRequests.Add( invokeId, Task.Factory.StartNew(() => { Protocol.AdsContext context = new Protocol.AdsContext(rAddr.ToString(), Protocol.AdsCommand.ReadWrite, invokeId, indexGroup, indexOffset, cbReadLength, data); OnClientReadWriteRequest(context); ServiceRequest(context); }, _cancellationSource.Token) ); } }