on master help sign in
WebSocketTest/Sources/App/configure.swift
60 lines 2.0 kB history raw
1import FluentSQLite
2import Vapor
4/// Called before your application initializes.
5public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws {
6 /// Register providers first
7 try services.register(FluentSQLiteProvider())
9 /// Register routes to the router
10 let router = EngineRouter.default()
11 try routes(router)
12 services.register(router, as: Router.self)
14 /// Register middleware
15 var middlewares = MiddlewareConfig() // Create _empty_ middleware config
16 /// middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory
17 middlewares.use(ErrorMiddleware.self) // Catches errors and converts to HTTP response
18 services.register(middlewares)
20 // Configure a SQLite database
21 let sqlite = try SQLiteDatabase(storage: .memory)
23 /// Register the configured SQLite database to the database config.
24 var databases = DatabasesConfig()
25 databases.add(database: sqlite, as: .sqlite)
26 services.register(databases)
28 /// Configure migrations
29 var migrations = MigrationConfig()
30 migrations.add(model: Todo.self, database: .sqlite)
31 services.register(migrations)
33 let ws = NIOWebSocketServer.default()
35 ws.get("test") { (ws, req) in
36 ws.onText({ (ws, text) in
37 ws.send("\(text) pong")
38 })
39 }
41 ws.get("postUpdates", Int.parameter) { (ws, req) in
42 let i = OpenSockets.insert(ws)
43 ws.onClose.always {
44 OpenSockets.remove(at: i)
45 }
46 let update = EventResponse(token: try! req.parameters.next(Int.self))
47 ws.send(try! enc.encode(update))
48 }
50 ws.get("postUpdates") { (ws, req) in
51 let i = OpenSockets.insert(ws)
52 ws.onClose.always {
53 OpenSockets.remove(at: i)
54 }
55 let update = EventResponse(token: nil)
56 ws.send(try! enc.encode(update))
57 }
59 services.register(ws, as: WebSocketServer.self)