main.swift 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // main.swift
  3. // SwifterOSX
  4. // Copyright (c) 2015 Damian Kołakowski. All rights reserved.
  5. //
  6. import Foundation
  7. import Swifter
  8. let server = try Swifter()
  9. server.get("/") { _, request, responder in
  10. responder(html {
  11. "body" ~ {
  12. "h1" ~ "Hello World !"
  13. }
  14. })
  15. }
  16. server.get("/hello") { _, _, responder in
  17. responder(200)
  18. }
  19. server.get("/test/websocket") { _, request, responder in
  20. responder(WebsocketResponse(request) { event in
  21. switch event {
  22. case .text(let value):
  23. print("Got text message: \(value)")
  24. case .binary(let value):
  25. print("Got binary message: \(value)")
  26. case .disconnected(_, _):
  27. print("Peer disconneted")
  28. }
  29. })
  30. }
  31. server.get("/test/background") { _, _, closure in
  32. if #available(OSXApplicationExtension 10.10, *) {
  33. DispatchQueue.global(qos: .background).async {
  34. // Simulate http request to other service or a database query.
  35. sleep(2)
  36. closure(TextResponse(200, "Waited 2 secs for a response."))
  37. }
  38. } else {
  39. // Fallback on earlier versions
  40. }
  41. }
  42. server.get("/test/multipart") { _, request, responder in
  43. responder(html(200) {
  44. "body" ~ {
  45. "form(method=POST,action=/test/multipart,enctype=multipart/form-data)" ~ {
  46. "input(name=my_file1,type=file)" ~ ""
  47. "input(name=my_file2,type=file)" ~ ""
  48. "input(name=my_file3,type=file)" ~ ""
  49. "button(type=submit)" ~ "Upload"
  50. }
  51. }
  52. })
  53. }
  54. server.post("/test/multipart") { _, request, responder in
  55. let multiparts = request.parseMultiPartFormData()
  56. responder(html(200) {
  57. "body" ~ {
  58. "h5" ~ "Parts"
  59. "ul" ~ {
  60. multiparts.forEach { part in
  61. "li" ~ "\(part.fileName) -- \(part.body.count)"
  62. }
  63. }
  64. }
  65. })
  66. }
  67. server.notFoundHandler = { r in
  68. return html(200) {
  69. "body" ~ {
  70. "h5" ~ "Page not found. Try:"
  71. "ul" ~ {
  72. server.routes.forEach { route in
  73. "li" ~ {
  74. "a(href=\(route))" ~ route
  75. }
  76. }
  77. }
  78. }
  79. }
  80. }
  81. while true {
  82. try server.loop()
  83. }