/// <summary> /// Saves the media associated to a given header message and looks for /// unheaded chunks of this header to save their data on the media structure. /// </summary> /// <param name="header">Header message.</param> /// <param name="streamS">Media associated to the header message.</param> /// <param name="SaveChunk">Methodd that takes a chunk message and saves its data.</param> public void RecoverEarlyChunks(headerMsg header, struc streamS, StreamChunkHandler <chunkMsg> SaveChunk) { streamData[header.id] = streamS; streamWasFullyReceived[header.id] = false; if (amountOfEarlyChunks.ContainsKey(header.id)) { int i = 0; int count = 0; while (i < amountOfEarlyChunks[header.id] && i < unheadedChunks.Count) { var row = unheadedChunks[i].Item1; if (row.id == header.id) { SaveChunk(row); unheadedChunks.RemoveAt(i); count += 1; } i += 1; } if (amountOfEarlyChunks[header.id] != count) { RemoveStream(header.id); } amountOfEarlyChunks.Remove(header.id); } }
/// <summary> /// Adds the data contain in a chunk message to the appopiate media structure. /// </summary> /// <param name="chunk">Chunk message.</param> /// <param name="SaveChunk">Methodd that takes a chunk message and saves its data.</param> public void AddChunk(chunkMsg chunk, StreamChunkHandler <chunkMsg> SaveChunk) { if (streamData.ContainsKey(chunk.id)) { SaveChunk(chunk); } else { unheadedChunks.Add((chunk, 0.0f)); if (amountOfEarlyChunks.ContainsKey(chunk.id)) { amountOfEarlyChunks[chunk.id] += 1; } else { amountOfEarlyChunks[chunk.id] = 1; } Debug.Log(amountOfEarlyChunks[chunk.id] + " chunk(s) with our previous head received."); } }