Example #1
0
        public OperationResponse operationRequest(
            DataPhaseInfo dpi, OperationCode code, UInt32 tid,
            UInt32 param1 = 0, UInt32 param2 = 0, UInt32 param3 = 0, UInt32 param4 = 0, UInt32 param5 = 0)
        {
            OperationRequest request = new OperationRequest(
                dpi, code, tid, param1, param2, param3, param4, param5);
            request.send(cmdStream);

            OperationResponse response = new OperationResponse();
            response.recv(cmdStream);

            return response;
        }
Example #2
0
        public OperationRequest(DataPhaseInfo dpi, OperationCode ope, UInt32 tid, 
			UInt32 param1 = 0, UInt32 param2 = 0, UInt32 param3 = 0, UInt32 param4 = 0, UInt32 param5 = 0)
        {
            DataPhaseInfo = dpi;
            OperationCode = ope;
            TransactionID = tid;
            Parameter1 = param1;
            Parameter2 = param2;
            Parameter3 = param3;
            Parameter4 = param4;
            Parameter5 = param5;
            PacketType = PacketType.OperationRequest;
        }
        public ResponseCode operationRequest(
            DataPhaseInfo dpi, OperationCode code, UInt32 tid,
            UInt32 param1 = 0, UInt32 param2 = 0, UInt32 param3 = 0, UInt32 param4 = 0, UInt32 param5 = 0)
        {
            // OperationRequestを送信
            byte[] data = operationRequestData(dpi, code, tid, param1, param2, param3, param4, param5);
            stream.Write(data, 0, data.Length);

            // データフェーズがあれば送信(未実装)
            if (dpi == DataPhaseInfo.DataOutPhase)
            {
                sendDataPhase(tid);
            }

            // データを受信
            data = recvAllData();
            UInt32 length = BitConverter.ToUInt32(data, 0);
            PacketType pt = (PacketType)BitConverter.ToUInt32(data, 4);

            // データフェーズがあれば受信する
            if (pt == PacketType.StartData)
            {
                // 全データサイズ
                UInt64 tlen = BitConverter.ToUInt64(data, 12);
                recvData = new byte[tlen];
                int recvDataCount = 0;
                do
                {
                    data = recvAllData();
                    length = BitConverter.ToUInt32(data, 0);
                    pt = (PacketType)BitConverter.ToUInt32(data, 4);
                    Array.Copy(data, 12, recvData, recvDataCount, length - 12);
                    recvDataCount += (int)length - 12;
                }
                while (pt != PacketType.EndData);

                data = recvAllData();
                length = BitConverter.ToUInt32(data, 0);
                pt = (PacketType)BitConverter.ToUInt32(data, 4);
            }

            return (ResponseCode)BitConverter.ToUInt16(data, 8);
        }
        /// <summary>
        /// OperationRequestのデータを作成する
        /// </summary>
        /// <param name="dpi"></param>
        /// <param name="oc"></param>
        /// <param name="tid"></param>
        /// <param name="param1"></param>
        /// <param name="param2"></param>
        /// <param name="param3"></param>
        /// <param name="param4"></param>
        /// <param name="param5"></param>
        /// <returns></returns>
        private byte[] operationRequestData(DataPhaseInfo dpi, OperationCode oc, UInt32 tid,
            UInt32 param1 = 0, UInt32 param2 = 0, UInt32 param3 = 0, UInt32 param4 = 0, UInt32 param5 = 0)
        {
            UInt32 length = (UInt32)(4 + 4 + 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4);
            byte[] data = new byte[length];
            Array.Copy(BitConverter.GetBytes(length), data, 4);
            Array.Copy(BitConverter.GetBytes((UInt32)PacketType.OperationRequest), 0, data, 4, 4);
            Array.Copy(BitConverter.GetBytes((UInt32)dpi), 0, data, 8, 4);
            Array.Copy(BitConverter.GetBytes((UInt16)oc), 0, data, 12, 2);
            Array.Copy(BitConverter.GetBytes(tid), 0, data, 14, 4);
            Array.Copy(BitConverter.GetBytes(param1), 0, data, 18, 4);
            Array.Copy(BitConverter.GetBytes(param2), 0, data, 22, 4);
            Array.Copy(BitConverter.GetBytes(param3), 0, data, 26, 4);
            Array.Copy(BitConverter.GetBytes(param4), 0, data, 30, 4);
            Array.Copy(BitConverter.GetBytes(param5), 0, data, 34, 4);

            return data;
        }