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)
             );
     }
 }