# lweb LiHaSo Webserver Modul ## Öffentliche Funktionen: ### Konfiguration des Server Moduls: Mögliche Parameter: ``` lweb::#conf_port ;Hörender Port, z.B. "80" lweb::#conf_binding ;Interface Binding z.B. nur Lokalhost mit "127.0.0.1" lweb::#conf_defaultfile ;Standard wenn keine Datei (Extension angegeben ist) z.B. "index.php" lweb::#conf_basedir ;Standard Verzeichnis z.B. "/srv/www/htdocs/" lweb::#conf_error400 ;TODO:error400 bearbeitung lweb::#conf_max_clients ;Maximale Clientconnections (Memory beachten) lweb::#conf_server_type ;Derzeit ohne Funktion (Später z.B. HTTPS und HTTP oder HTTP/2 usw.) lweb::#conf_cache_enable ;Bei wert auf 1 Setzen um zu Aktivieren diese Funktion ist aber derzeit mit Vorsicht zu geniessen!!!! ``` #### Funktionen `lweb::set_config(parameter.i=#conf_defaultfile, setting.s="index.html")` Dass setting ist immer ein String. Rückgabewert ist `#True` oder `#False.` `lweb::get_config(parameter.i=#conf_defaultfile)` Der Rückgabewert ist immer einen String. ### Starten des Servers `lweb::start_server()` Rückgabewert ist `#True` oder `#False.` ### Verschiedene arten des Handlers Registrieren & Proceduren: `lweb::register_client_handler(Route.s, Callback.i, AppPrototype.i = #handler_proto_get, RouteType.i = #handler_sub)` Rückgabewerte ist immer ein JSONString! AppPrototype Möglichkeiten: ``` lweb::#handler_proto_universal ;Für HTTP POST und GET Requests Nimmt Optional einen String entgegen. lweb::#handler_proto_post ;Nur für HTTP POST Requests Nimmt Zwingend einen String entgegen. lweb::#handler_proto_get ;Nur für HTTP GET Requests Nimmt keinen String entgegen. ``` RouteType Möglichkeiten: ``` lweb::#handler_only ;Reagiert nur auf die Url (Bsp. /rest/v1/test aber nicht auf /rest/v1/test/sub) lweb::#handler_sub ;Reagiert auf eine ganze Url die begint. (Bsp. /rest/v1/test sowie auch auf /rest/v1/test/sub) lweb::#handler_type ;Reagiert auf datentypen (zb. *.php = "php") ``` Map für Antwort ist eine einfache Stringmap: `NewMap Response.s()` Wobei folgende werte entsprechend gesetzt werden müssen: * `lweb::#cha_R_ResponseType = "ResponseType"` ;Element ResponseType,Mimetype mit `lweb::mimetype("html")` z.B. Setzen. * `lweb::#cha_R_ResponseContentType = "ResponseContentType"` ;Element ResponseContentType, `lweb::#response_string` oder `lweb::#response_Memory` * `lweb::#cha_R_MemoryAdress = "MemoryAdress"` ;Element MemoryAdress, Konvertieren zu String `Str(Adresse)` wird mit `Val()` zurückkonvertiert. Und nach dem Bearbeiten wieder freigegeben! * `lweb::#cha_R_MemorySize = "MemorySize"` ;Element MemorySize, Konvertieren zu String `Str(Grösse)` wird mit `Val()` zurückkonvertiert. * `lweb::#cha_R_StringBase64 = "StringBase64"` ;Element StringBase64, Base64 Encoded String * `lweb::#cha_R_http_head_status = "HeaderStatus"` ;`"200 OK"`, `"300 Error"`, `"500 Server Error"` usw. Zu beachten ist das entweder ein Base64 encodierter String oder ein MemoryBlock zurückgegeben werden muss! Komplettes Beispiel: ``` Procedure.s Sample_Header(Map Header.s()) Define *Text Define.s Encoded, ZumSenden, TBD NewMap Response.s() TBD="