Avatar
Kishikawa Katsumi 12/4/2024 9:34 AM
できそうな気がしてきた。リクエストメッセージの結合は最後のメッセージだけ別の処理が必要なんだけどmessagesの数(count)やiteratorを取得することってできないですよね? その場合は最後のパケットだけ別の引数で受けるとかするのかな。 var count = 0 for message in repeat each messages { count += 1 } var packet = Data() var index = 0 for message in repeat each messages { ^ とりあえず今はいったんこんな感じで無駄にループして数えるように書いたんだけど、なんか方法ありますか? 各パケットを連結する元々の処理は次になります。 private func send(_ packets: Data...) async throws -> Data { return try await connection.send( packets.enumerated().reduce(into: Data()) { let alignment = Data(count: 8 - $1.element.count % 8) if $1.offset < packets.count - 1 { let packet = $1.element + alignment var header = Header(data: packet[..<64]) let payload = $1.element[64...] header.nextCommand = UInt32(packet.count) $0 += sign(header.encoded() + payload + alignment) } else { $0 += sign($1.element + alignment) } } ) }