manicmaniac/ApolloDeveloperKit

View on GitHub
Sources/ApolloDeveloperKit/WebServer/HTTPOutputStreamSet.swift

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
//
//  HTTPOutputStreamSet.swift
//  ApolloDeveloperKit
//
//  Created by Ryosuke Ito on 9/15/20.
//  Copyright © 2020 Ryosuke Ito. All rights reserved.
//

import Foundation

final class HTTPOutputStreamSet: Sequence {
    private let hashTable = NSHashTable<AnyObject>.weakObjects()

    func insert(_ stream: HTTPOutputStream) {
        hashTable.add(stream)
    }

    func broadcast(data: Data) {
        for stream in self {
            stream.write(data: data)
        }
        Logger.http?.debug("Broadcasted \(data) to \(hashTable.count) streams.")
    }

    func makeIterator() -> AnyIterator<HTTPOutputStream> {
        return AnyIterator(hashTable.allObjects.map { $0 as! HTTPOutputStream }.makeIterator())
    }
}