1 | Writer = require "../io/writer"
|
2 | Reader = require "../io/reader"
|
3 | _ = require "underscore"
|
4 |
|
5 |
|
6 | class ResponseReader extends Reader
|
7 |
|
8 | |
9 |
|
10 |
|
11 | _listenTo: () -> super().concat "headers"
|
12 |
|
13 | |
14 |
|
15 |
|
16 | _listen: () ->
|
17 | super()
|
18 | @on "headers", (headers) => @headers = headers
|
19 |
|
20 |
|
21 | _dumpCached: (pipedReader) ->
|
22 |
|
23 | pipedReader.emit "headers", @headers if @headers
|
24 |
|
25 | super pipedReader
|
26 |
|
27 |
|
28 | module.exports = class Response extends Writer
|
29 |
|
30 | |
31 |
|
32 |
|
33 | constructor: (@messenger) ->
|
34 | super()
|
35 | @_headers = {}
|
36 |
|
37 |
|
38 | |
39 |
|
40 |
|
41 | headers: (typeOrObj, value) ->
|
42 | if typeof typeOrObj == "object"
|
43 | _.extend @_headers, typeOrObj
|
44 | else
|
45 | @_headers[typeOfObj] = value
|
46 |
|
47 | |
48 |
|
49 |
|
50 | write: (chunk, encoding = "utf8") ->
|
51 | @sendHeaders()
|
52 | super chunk, encoding
|
53 |
|
54 | |
55 |
|
56 |
|
57 | end: (chunk, encoding = "utf8") ->
|
58 | @sendHeaders()
|
59 | super chunk, encoding
|
60 |
|
61 |
|
62 | |
63 |
|
64 |
|
65 | sendHeaders: () ->
|
66 | return @ if @sentHeaders
|
67 | @sentHeaders = true
|
68 | @emit "headers", @_headers
|
69 | @
|
70 |
|
71 | |
72 |
|
73 |
|
74 | reader: () -> new ResponseReader @
|
75 |
|
76 |
|
77 | Writer::writable = true
|