Ejemplo n.º 1
0
        /// <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];
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }