Lightning/Sources/HTTP/ClientConnection.swift

51 lines
1.1 KiB
Swift

//
// ClientConnection.swift
// Edge
//
// Created by Tyler Fleming Cloutier on 7/9/16.
//
//
import Foundation
import TCP
import StreamKit
import POSIX
public final class ClientConnection {
let socket: TCP.Socket
var parser = RequestParser()
init(socket: TCP.Socket) {
self.socket = socket
}
public func read() -> Source<Request, ClientError> {
return Source { observer in
let read = self.socket.read()
self.parser.onRequest = { request in
observer.sendNext(request)
}
read.onNext { data in
do {
try self.parser.parse(data)
} catch {
// Respond with 400 error
observer.sendFailed(.badRequest)
}
}
read.start()
return ActionDisposable {
read.stop()
}
}
}
public func write(_ response: Response) -> Source<Data, SystemError> {
return socket.write(buffer: response.serialized)
}
}