13
13
//===----------------------------------------------------------------------===//
14
14
15
15
import Foundation
16
- import Logging
17
16
import NIO
18
17
import NIOHTTP1
19
18
20
19
internal struct MockServer {
21
- private let logger : Logger
22
20
private let group : EventLoopGroup
23
21
private let host : String
24
22
private let port : Int
25
23
private let mode : Mode
26
- private let keepAlive : Bool
27
24
28
25
public init ( ) {
29
- var logger = Logger ( label: " MockServer " )
30
- logger. logLevel = env ( " LOG_LEVEL " ) . flatMap ( Logger . Level. init) ?? . info
31
- self . logger = logger
32
26
self . group = MultiThreadedEventLoopGroup ( numberOfThreads: System . coreCount)
33
27
self . host = env ( " HOST " ) ?? " 127.0.0.1 "
34
28
self . port = env ( " PORT " ) . flatMap ( Int . init) ?? 7000
35
29
self . mode = env ( " MODE " ) . flatMap ( Mode . init) ?? . string
36
- self . keepAlive = env ( " KEEP_ALIVE " ) . flatMap ( Bool . init) ?? true
37
30
}
38
31
39
32
func start( ) throws {
40
33
let bootstrap = ServerBootstrap ( group: group)
41
34
. serverChannelOption ( ChannelOptions . socket ( SocketOptionLevel ( SOL_SOCKET) , SO_REUSEADDR) , value: 1 )
42
35
. childChannelInitializer { channel in
43
36
channel. pipeline. configureHTTPServerPipeline ( withErrorHandling: true ) . flatMap { _ in
44
- channel. pipeline. addHandler ( HTTPHandler ( logger: self . logger,
45
- keepAlive: self . keepAlive,
46
- mode: self . mode) )
37
+ channel. pipeline. addHandler ( HTTPHandler ( mode: self . mode) )
47
38
}
48
39
}
49
40
try bootstrap. bind ( host: self . host, port: self . port) . flatMap { channel -> EventLoopFuture < Void > in
50
41
guard let localAddress = channel. localAddress else {
51
42
return channel. eventLoop. makeFailedFuture ( ServerError . cantBind)
52
43
}
53
- self . logger . info ( " \( self ) started and listening on \( localAddress) " )
44
+ print ( " \( self ) started and listening on \( localAddress) " )
54
45
return channel. eventLoop. makeSucceededFuture ( ( ) )
55
46
} . wait ( )
56
47
}
@@ -60,15 +51,11 @@ internal final class HTTPHandler: ChannelInboundHandler {
60
51
public typealias InboundIn = HTTPServerRequestPart
61
52
public typealias OutboundOut = HTTPServerResponsePart
62
53
63
- private let logger : Logger
64
54
private let mode : Mode
65
- private let keepAlive : Bool
66
55
67
56
private var pending = CircularBuffer < ( head: HTTPRequestHead , body: ByteBuffer ? ) > ( )
68
57
69
- public init ( logger: Logger , keepAlive: Bool , mode: Mode ) {
70
- self . logger = logger
71
- self . keepAlive = keepAlive
58
+ public init ( mode: Mode ) {
72
59
self . mode = mode
73
60
}
74
61
@@ -93,8 +80,6 @@ internal final class HTTPHandler: ChannelInboundHandler {
93
80
}
94
81
95
82
func processRequest( context: ChannelHandlerContext , request: ( head: HTTPRequestHead , body: ByteBuffer ? ) ) {
96
- self . logger. debug ( " \( self ) processing \( request. head. uri) " )
97
-
98
83
var responseStatus : HTTPResponseStatus
99
84
var responseBody : String ?
100
85
var responseHeaders : [ ( String , String ) ] ?
@@ -125,33 +110,24 @@ internal final class HTTPHandler: ChannelInboundHandler {
125
110
126
111
func writeResponse( context: ChannelHandlerContext , status: HTTPResponseStatus , headers: [ ( String , String ) ] ? = nil , body: String ? = nil ) {
127
112
var headers = HTTPHeaders ( headers ?? [ ] )
128
- headers. add ( name: " Content-Length " , value: " \( body? . utf8. count ?? 0 ) " )
129
- if !self . keepAlive {
130
- // We only need to add a "Connection" header if we really want to close the connection
131
- headers. add ( name: " Connection " , value: " close " )
132
- }
113
+ headers. add ( name: " content-length " , value: " \( body? . utf8. count ?? 0 ) " )
133
114
let head = HTTPResponseHead ( version: HTTPVersion ( major: 1 , minor: 1 ) , status: status, headers: headers)
134
115
135
116
context. write ( wrapOutboundOut ( . head( head) ) ) . whenFailure { error in
136
- self . logger . error ( " \( self ) write error \( error) " )
117
+ print ( " \( self ) write error \( error) " )
137
118
}
138
119
139
120
if let b = body {
140
121
var buffer = context. channel. allocator. buffer ( capacity: b. utf8. count)
141
122
buffer. writeString ( b)
142
123
context. write ( wrapOutboundOut ( . body( . byteBuffer( buffer) ) ) ) . whenFailure { error in
143
- self . logger . error ( " \( self ) write error \( error) " )
124
+ print ( " \( self ) write error \( error) " )
144
125
}
145
126
}
146
127
147
128
context. writeAndFlush ( wrapOutboundOut ( . end( nil ) ) ) . whenComplete { result in
148
129
if case . failure( let error) = result {
149
- self . logger. error ( " \( self ) write error \( error) " )
150
- }
151
- if !self . keepAlive {
152
- context. close ( ) . whenFailure { error in
153
- self . logger. error ( " \( self ) close error \( error) " )
154
- }
130
+ print ( " \( self ) write error \( error) " )
155
131
}
156
132
}
157
133
}
0 commit comments