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