izqui / Taylor

A lightweight library for writing HTTP web servers with Swift
MIT License
926 stars 79 forks source link

[Enhancement] Refactor code relating to how handlers are processed #26

Closed Danappelxx closed 8 years ago

Danappelxx commented 8 years ago

This will turn beautiful snippets of code such as:

var j = -1
var postRequest: ((Callback)->())!
postRequest = {
    a in
    switch a {
    case .Continue(let req, let res):
        j = j+1
        if j < self.postRequestHandlers.count {
            self.postRequestHandlers[j](req, res, postRequest)
        }
    case .Send(_, _):
        print("Attempting to send a response twice")
    }
}

var cb: ((Callback)->())!
var i = -1
cb = {
    a in
    switch a {
    case .Continue(let req, let res):
        i = i+1
        if i < self.handlers.count {
            self.handlers[i](req, res, cb)
        } else {
            self.notFoundHandler(req, res, cb)
        }
    case .Send(let req, let res):
        let data = res.generateResponse(req.method)

        socket.sendData(data)
        postRequest(.Continue(req, res))
    }
}

cb(.Continue(request, response))

into this:

let callbackHandler = CallbackHandler(handlers: self.handlers)

callbackHandler.onContinueWithNoHandlersLeft = notFoundHandler
callbackHandler.onSend = { req, res, cb in
    let data = res.generateResponse(req.method)
    socket.sendData(data)

    self.startHooks(request: request, response: response)
}

callbackHandler.start(request, response)

I've tested it a little bit but that doesn't mean it isn't broken. Would appreciate another eye :smiley: