/// <summary> /// 応答パケットからポーリング応答を生成します。 /// </summary> /// <param name="request">要求データ</param> /// <param name="data">応答データ</param> /// <exception cref="ArgumentNullException" /> /// <exception cref="ArgumentException" /> public PollingResponse(PollingRequest request, byte[] data) { Request = request ?? throw new ArgumentNullException("request"); RawData = data ?? throw new ArgumentNullException("data"); if (data.Length < 17) { throw new ArgumentException("データが不足しています。", "data"); } if (data[0] != ResponseCode) { throw new ArgumentException("データの形式が正しくありません。", "data"); } IDm = data.Where((val, idx) => 1 <= idx && idx <= 8).ToArray(); PMm = data.Where((val, idx) => 9 <= idx && idx <= 16).ToArray(); if (request.RequestCode != 0) { if (data.Length < 19) { throw new ArgumentException("データが不足しています。", "data"); } RequestData = data[17]; RequestData <<= 8; RequestData += data[18]; } }
/// <summary> /// Polling カードを捕捉する /// </summary> /// <param name="request">要求データ</param> /// <returns>応答データまたはnull</returns> /// <exception cref="ArgumentNullException" /> public PollingResponse Polling(PollingRequest request) { if (request == null) { throw new ArgumentNullException("request"); } byte[] recv = transmit(request.Command); if (recv == null) { return(null); } var response = new PollingResponse(request, recv); return(response); }