implemented htcpc server
authoritsWill <guilhermerpmansur@gmail.com>
Mon, 28 Dec 2015 22:20:52 +0000 (23:20 +0100)
committeritsWill <guilhermerpmansur@gmail.com>
Fri, 15 Jan 2016 19:59:56 +0000 (14:59 -0500)
Signed-off-by: itsWill <guilhermerpmansur@gmail.com>

lib/nitcorn/examples/src/htcpcp_server.nit [new file with mode: 0644]

diff --git a/lib/nitcorn/examples/src/htcpcp_server.nit b/lib/nitcorn/examples/src/htcpcp_server.nit
new file mode 100644 (file)
index 0000000..37fa87e
--- /dev/null
@@ -0,0 +1,96 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2015 Guilherme Mansur<guilhermerpmansur@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Hyper Text Coffee Pot Control Protocol
+
+# A server that implements HTCPCP. At the moment there are no additions.
+module htcpcp_server
+
+import nitcorn
+
+class HTCPCPAction
+       super Action
+       var brewing = false
+  var is_teapot = false
+
+       redef fun answer(http_request, turi) do
+               var message: String
+               var method = http_request.method
+               var headers = http_request.header
+               var response: HttpResponse
+
+               if is_teapot == true then
+                       response = new HttpResponse(418)
+                       response.body = "I'm a teapot!\n"
+                       response.header["Content-Type"] = "text"
+                       return response
+               end
+
+               if method == "POST" or method == "BREW" then
+                       if brewing then
+                               message = "Pot Busy"
+                               response = new HttpResponse(400)
+                       else
+                               message = "Brewing a new pot of coffee\n"
+                               brewing = true
+                               response = new HttpResponse(200)
+                       end
+               else if method == "WHEN" then
+                       if brewing then
+                               message = "Stopped adding milk, your coffee is ready!\n"
+                               brewing = false
+                               response = new HttpResponse(200)
+                       else
+                               message = "There is no coffee brewing!\n"
+                               response = new HttpResponse(405)
+                       end
+               else if method == "PROPFIND" or method == "GET" then
+                       if brewing then
+                               message = "The pot is busy\n"
+                       else
+                               message = "The pot is ready to brew more coffee\n"
+                       end
+                       response = new HttpResponse(200)
+               else
+                       message = "Unknown method: {method}"
+                       brewing = false
+                       response = new HttpResponse(405)
+               end
+
+               response.header["Content-Type"] = "text"
+               response.body = message
+
+               return response
+       end
+end
+
+
+class HTCPCServer
+       var port: Int
+
+       fun run do
+               var vh = new VirtualHost("localhost:{port}")
+               vh.routes.add new Route("/", new HTCPCPAction)
+               var factory = new HttpFactory.and_libevent
+               factory.config.virtual_hosts.add vh
+               print "Nit4Coffee is now running at port: {port}"
+               factory.run
+       end
+end
+
+var server = new HTCPCServer(1227)
+
+server.run