diff --git a/src/dev/peerat/framework/Client.java b/src/dev/peerat/framework/Client.java index ac04951..ab2ffde 100644 --- a/src/dev/peerat/framework/Client.java +++ b/src/dev/peerat/framework/Client.java @@ -8,26 +8,30 @@ public class Client extends Thread{ private HttpReader reader; private HttpWriter writer; private Router router; + private Locker logger; public Client(Socket socket, Router router) throws Exception{ this.reader = new HttpReader(socket); this.writer = new HttpWriter(socket); this.router = router; + this.logger = router.getLogger(); } @Override public void run(){ + Context context = null; try{ String[] headers = reader.readLine().split("\\s"); System.out.println(Arrays.toString(headers)); reader.readHeaders(); - router.exec(RequestType.valueOf(headers[0]), headers[1], isLogin(reader), reader, writer); + context = router.exec(RequestType.valueOf(headers[0]), headers[1], isLogin(reader), reader, writer); writer.flush(); writer.close(); }catch(Exception e){ e.printStackTrace(); } + if(context != null) logger.setValue(context); } private User isLogin(HttpReader reader) throws Exception{ diff --git a/src/dev/peerat/framework/Context.java b/src/dev/peerat/framework/Context.java index 2f10803..5ca3aaa 100644 --- a/src/dev/peerat/framework/Context.java +++ b/src/dev/peerat/framework/Context.java @@ -2,17 +2,33 @@ package dev.peerat.framework; public class Context{ + private RequestType type; + private String path; private User user; private int responseCode; private HttpWriter writer; private String[] headers; - public Context(User user, HttpWriter writer, String... headers){ + public Context(RequestType type, String path, User user, HttpWriter writer, String... headers){ + this.type = type; + this.path = path; this.user = user; this.writer = writer; this.headers = headers; } + public RequestType getType(){ + return this.type; + } + + public String getPath(){ + return this.path; + } + + public boolean isLogged(){ + return user != null; + } + public U getUser(){ return (U) user; } diff --git a/src/dev/peerat/framework/Router.java b/src/dev/peerat/framework/Router.java index b300b63..608a655 100644 --- a/src/dev/peerat/framework/Router.java +++ b/src/dev/peerat/framework/Router.java @@ -31,6 +31,7 @@ public class Router{ } + private Locker logger; private Map[] responses; private Map patterns; private Response noFileFound; @@ -42,6 +43,7 @@ public class Router{ private ServerSocket serverSocket; public Router() throws Exception{ + this.logger = new Locker<>(); int types = RequestType.values().length; this.responses = new HashMap[types]; for(RequestType type : RequestType.values()) this.responses[type.ordinal()] = new HashMap<>(); @@ -136,15 +138,15 @@ public class Router{ return this; } - void exec(RequestType type, String path, User user, HttpReader reader, HttpWriter writer) throws Exception{ - if(type == null) return; - Context context = new Context(user, writer, this.headers[type.ordinal()]); + Context exec(RequestType type, String path, User user, HttpReader reader, HttpWriter writer) throws Exception{ + if(type == null) return null; + Context context = new Context(type, path, user, writer, this.headers[type.ordinal()]); for(Entry routes : this.responses[type.ordinal()].entrySet()){ Matcher matcher = this.patterns.get(routes.getKey()).matcher(path); if(matcher.matches()){ if(user == null && routes.getValue().needLogin()){ writer.response(401, "Access-Control-Allow-Origin: *"); - return; + return context; } if(routes.getValue().websocket()){ switchToWebSocket(reader, writer); @@ -152,10 +154,11 @@ public class Router{ writer = new WebSocketWriter(writer); } routes.getKey().exec(matcher, context, reader, writer); - return; + return context; } } if(noFileFound != null) noFileFound.exec(null, context, reader, writer); + return context; } public Router configureSSL(String keyStore, String keyStorePassword){ @@ -185,6 +188,10 @@ public class Router{ return jws.getCompactSerialization(); } + public Locker getLogger(){ + return this.logger; + } + private void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{ String key = reader.getHeader("Sec-WebSocket-Key"); if (key == null) throw new IllegalArgumentException();