// Essentially, when this is passed an empty list, the okay will be sent to the server IEnumerator SendNeededFilesListToSender(List <int> _fileIDs) { bool allFilesReceived = _fileIDs.Count == 0; Debug.Log("sending needed files, files: " + _fileIDs.Count); PooledBitStream bitStream = PooledBitStream.Get(); PooledBitWriter writer = PooledBitWriter.Get(bitStream); if (allFilesReceived) { writer.WriteBit(true); writer.WriteIntArray(_fileIDs.ToArray()); writer.WriteBit(true); CustomMessagingManager.SendNamedMessage(MessageName, SenderID, bitStream, "MLAPI_INTERNAL"); bitStream.Dispose(); writer.Dispose(); _fileIDs.Clear(); StopListening(); if (OnDownloadComplete != null) { OnDownloadComplete(SendOrReceiveFlag.Receive, SenderID); } ChangeState(LargeRPCState.Idle); } else { var i = 0; List <int> ids = _fileIDs; foreach (var id in ids) { i++; bool isFinalPacket = i >= _fileIDs.Count; if (i >= _fileIDs.Count) { writer.WriteBit(isFinalPacket); writer.WriteIntArray(_fileIDs.ToArray()); writer.WriteBit(false); CustomMessagingManager.SendNamedMessage(MessageName, SenderID, bitStream, "MLAPI_INTERNAL"); bitStream.Dispose(); writer.Dispose(); bitStream = PooledBitStream.Get(); writer = PooledBitWriter.Get(bitStream); _fileIDs.Clear(); yield return(new WaitForSeconds(1 / 8)); break; } } } yield break; }