From: itsWill Date: Mon, 28 Dec 2015 22:20:52 +0000 (+0100) Subject: implemented htcpc server X-Git-Tag: v0.8~6^2 X-Git-Url: http://nitlanguage.org implemented htcpc server Signed-off-by: itsWill --- diff --git a/lib/nitcorn/examples/src/htcpcp_server.nit b/lib/nitcorn/examples/src/htcpcp_server.nit new file mode 100644 index 0000000..37fa87e --- /dev/null +++ b/lib/nitcorn/examples/src/htcpcp_server.nit @@ -0,0 +1,96 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2015 Guilherme Mansur +# +# 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