Committed by
GitHub
Fix NPE when streaming text (#670)
* Fix NPE in when streaming text * spotless and changeset
正在显示
3 个修改的文件
包含
64 行增加
和
1 行删除
.changeset/cyan-spoons-try.md
0 → 100644
| @@ -98,7 +98,9 @@ constructor( | @@ -98,7 +98,9 @@ constructor( | ||
| 98 | textHeader = with(DataStream.TextHeader.newBuilder()) { | 98 | textHeader = with(DataStream.TextHeader.newBuilder()) { |
| 99 | this.operationType = info.operationType.toProto() | 99 | this.operationType = info.operationType.toProto() |
| 100 | this.version = info.version | 100 | this.version = info.version |
| 101 | - this.replyToStreamId = info.replyToStreamId | 101 | + if (info.replyToStreamId != null) { |
| 102 | + this.replyToStreamId = info.replyToStreamId | ||
| 103 | + } | ||
| 102 | this.addAllAttachedStreamIds(info.attachedStreamIds) | 104 | this.addAllAttachedStreamIds(info.attachedStreamIds) |
| 103 | this.generated = info.generated | 105 | this.generated = info.generated |
| 104 | build() | 106 | build() |
| @@ -99,4 +99,60 @@ class RoomOutgoingDataStreamMockE2ETest : MockE2ETest() { | @@ -99,4 +99,60 @@ class RoomOutgoingDataStreamMockE2ETest : MockE2ETest() { | ||
| 99 | assertTrue(reason.isNullOrEmpty()) | 99 | assertTrue(reason.isNullOrEmpty()) |
| 100 | } | 100 | } |
| 101 | } | 101 | } |
| 102 | + | ||
| 103 | + @Test | ||
| 104 | + fun textStream() = runTest { | ||
| 105 | + connect() | ||
| 106 | + | ||
| 107 | + // Remote participant to send data to | ||
| 108 | + wsFactory.listener.onMessage( | ||
| 109 | + wsFactory.ws, | ||
| 110 | + TestData.PARTICIPANT_JOIN.toOkioByteString(), | ||
| 111 | + ) | ||
| 112 | + | ||
| 113 | + val text = "test_text" | ||
| 114 | + val job = launch { | ||
| 115 | + val sender = room.localParticipant.streamText( | ||
| 116 | + StreamTextOptions( | ||
| 117 | + topic = "topic", | ||
| 118 | + attributes = mapOf("hello" to "world"), | ||
| 119 | + streamId = "stream_id", | ||
| 120 | + destinationIdentities = listOf(Participant.Identity(TestData.REMOTE_PARTICIPANT.identity)), | ||
| 121 | + operationType = TextStreamInfo.OperationType.CREATE, | ||
| 122 | + version = 0, | ||
| 123 | + attachedStreamIds = emptyList(), | ||
| 124 | + replyToStreamId = null, | ||
| 125 | + totalSize = 3, | ||
| 126 | + ), | ||
| 127 | + ) | ||
| 128 | + sender.write(text) | ||
| 129 | + sender.close() | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + job.join() | ||
| 133 | + | ||
| 134 | + val buffers = pubDataChannel.sentBuffers | ||
| 135 | + | ||
| 136 | + println(buffers) | ||
| 137 | + assertEquals(3, buffers.size) | ||
| 138 | + | ||
| 139 | + val headerPacket = LivekitModels.DataPacket.parseFrom(ByteString.copyFrom(buffers[0].data)) | ||
| 140 | + assertTrue(headerPacket.hasStreamHeader()) | ||
| 141 | + | ||
| 142 | + with(headerPacket.streamHeader) { | ||
| 143 | + assertTrue(hasTextHeader()) | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + val payloadPacket = LivekitModels.DataPacket.parseFrom(ByteString.copyFrom(buffers[1].data)) | ||
| 147 | + assertTrue(payloadPacket.hasStreamChunk()) | ||
| 148 | + with(payloadPacket.streamChunk) { | ||
| 149 | + assertEquals(text, content.toStringUtf8()) | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + val trailerPacket = LivekitModels.DataPacket.parseFrom(ByteString.copyFrom(buffers[2].data)) | ||
| 153 | + assertTrue(trailerPacket.hasStreamTrailer()) | ||
| 154 | + with(trailerPacket.streamTrailer) { | ||
| 155 | + assertTrue(reason.isNullOrEmpty()) | ||
| 156 | + } | ||
| 157 | + } | ||
| 102 | } | 158 | } |
-
请 注册 或 登录 后发表评论