From e57cace240d46861a65ee851ec1e358287cd9a71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EA=B0=95=EB=82=A8=EC=8A=A4=ED=83=80=EC=9D=BC?=
<65865554+DevSnaith@users.noreply.github.com>
Date: Fri, 14 Apr 2023 09:46:55 +0300
Subject: [PATCH] Update README.md
---
README.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 100 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 2a94e41..e7fb6fa 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,103 @@
-# Lumiere Server 💻👀
-Simple and lightweight web server for creating basic pages using Java ⭐
+# Lumiere Server
+**Lumiere Server is a web server designed for people who want to build a basic website in a quick and simple way.**
+**_If you want to support me, you can star the project 👀🌃_**
+## Build the JAR
+To build the JAR file, first clone the repository as shown below:
+```bash
+sudo apt update
+sudo apt install git -y
+git clone https://github.com/DevSnaith/lumiere-server.git
+```
+
+After the cloning is done, ``cd`` to the ``lumiere-server/`` folder. There you will find the `compile.sh` script; run it to generate the jar file.
+>In case you cannot execute `compile.sh`, give it executable permission using `chmod +x ./compile.sh`.
+
+```bash
+cd lumiere-server/
+chmod +x ./compile.sh
+./compile.sh
+```
+
+If all goes well, you will find a new file called ``lumiere-server.jar``, Type ``java -jar lumiere-server.jar`` the output should be like the one shown below:
+
+```
+Lumiere-server version
+lumiere-server at github https://github.com/DevSnaith/lumiere-server
+```
+
+Now copy the ``lumiere-server.jar`` and add it to your project.
+
+## Usage/Examples
+`Lumiere` class contains the basic things that must be available for the server to work well, it manages the traffic of requests and forwards them to the `HttpRequestHandler` interface. It also adds some properties in the header.
+
+You need to pass a `HttpRequestHandler` to `Lumiere`, The easiest way to do that is to use the `SimpleResponse` class that implements the `HttpRequestHandler` interface.
+
+#### Example using ``SimpleResponse`` class
+```java
+int server_port = 8080;
+String body = "Hello, World!";
+boolean contentTypeIsHTML = true; // false = text/plan
+
+SimpleResponse requestHandler = new SimpleResponse(body, contentTypeIsHTML);
+
+Lumiere server = new Lumiere(requestHandler);
+server.bootServer(server_port); // start the server
+```
+
+If you want to make a dynamic response, use ``HttpRequestHandler``
+#### Example using ``HttpRequestHandler`` interface
+```java
+/* new HttpRequestHandler */
+new Lumiere((HttpRequest request, HttpResponse response) -> {
+ response.setContentType("text/html");
+ response.push(""+request.getProperty("User-Agent")+"");
+}).bootServer(8080);
+```
+
+You can create multiple pages for your simple server using ``HttpController``
+
+#### Create responses using ``HttpController`` class
+```java
+HttpController controller = new HttpController();
+controller.addHandler("/", new SimpleResponse("GO TO INFO", true));
+controller.addHandler("/info", new SimpleResponse("Meow", false));
+controller.addHandler("/agent", (HttpRequest request, HttpResponse response) -> {
+ response.setContentType("text/html");
+ response.push(""+request.getProperty("User-Agent")+"");
+});
+
+new Lumiere(controller).bootServer(8080);
+```
+
+## Logger
+
+``Lumiere-server`` includes a logger class called ``GlobalLogger``.
+
+Use ``GlobalLogger.printf(...)`` to send a message via ``GlobalLogger``.
+#### Example
```java
-Lumiere server = new Lumiere(new SimpleResponse("Hello, World", false));
-server.bootServer(8080);
+// v Msg Level v The Msg v obj to return v formatting the msg
+GlobalLogger.getLogger().printf(LogLevel.INFO, "Math: %d", null, (5 + 5));
+// [INFO 0:00 AM]: Math: 10
```
+
+You can change the message output by changing the outputstream using ``GlobalLogger.os = ;``
+
+You can change the log pattern, the default pattern is ``[!L !D{h:mm a}]: !M\n``.
+
+| char | usage |
+|-------------|-----------------------------------------------------|
+| !L | Prints the msg level. |
+| !M | Print the msg. |
+| !CNAME | It is used to find out where the message came from. |
+| !D{pattern} | Print the date. |
+
+
+#### Pattern Example
+```java
+GlobalLogger.pattern="FROM: !CNAME | YEAR: !D{YYYY} | MSG: !M\n"
+// FROM: org.eu.lumiere.net.RequestListener | YEAR: 2023 | MSG: Lumiere using port 8080
+```
+
+Disable it using ``GlobalLogger.pattern=""`` or ``GlobalLogger.os = null;``