11package express ;
22
3- import com .sun .net .httpserver .HttpServer ;
3+ import com .sun .net .httpserver .* ;
44import express .events .Action ;
55import express .events .HttpRequest ;
6+ import express .http .Request ;
7+ import express .http .Response ;
8+ import express .middleware .ExpressMiddleware ;
69
7- import java .io .File ;
810import java .io .IOException ;
911import java .net .InetSocketAddress ;
1012import java .util .ArrayList ;
11- import java .util .concurrent .ConcurrentHashMap ;
13+ import java .util .Collections ;
14+ import java .util .List ;
1215
1316public class Express {
1417
15- protected final ConcurrentHashMap <String , ArrayList <ExpressHandler >> MITTLEWARE = new ConcurrentHashMap <>();
16- protected final ConcurrentHashMap <String , ArrayList <ExpressHandler >> REQUEST = new ConcurrentHashMap <>();
18+ private final List <Filter > FILTER = Collections .synchronizedList (new ArrayList <>());
1719
18- protected HttpServer httpServer ;
20+ private HttpServer httpServer ;
21+ private HttpContext httpContext ;
22+ private HttpRequest request404 ;
1923
2024 public Express () {
25+
2126 }
2227
2328 public void use (HttpRequest request ) {
24- addToRouteMap ( MITTLEWARE , "*" , "*" , request );
29+ add ( "*" , "*" , request );
2530 }
2631
2732 public void use (String context , HttpRequest request ) {
28- addToRouteMap ( MITTLEWARE , "*" , context , request );
33+ add ( "*" , context , request );
2934 }
3035
3136 public void use (String method , String context , HttpRequest request ) {
32- addToRouteMap ( MITTLEWARE , method .toUpperCase (), context , request );
37+ add ( method .toUpperCase (), context , request );
3338 }
3439
3540 public void on (String method , String context , HttpRequest request ) {
36- addToRouteMap ( REQUEST , method .toUpperCase (), context , request );
41+ add ( method .toUpperCase (), context , request );
3742 }
3843
3944 public void all (String context , HttpRequest request ) {
40- addToRouteMap ( REQUEST , "*" , context , request );
45+ add ( "*" , context , request );
4146 }
4247
4348 public void get (String context , HttpRequest request ) {
44- addToRouteMap ( REQUEST , "GET" , context , request );
49+ add ( "GET" , context , request );
4550 }
4651
4752 public void post (String context , HttpRequest request ) {
48- addToRouteMap ( REQUEST , "POST" , context , request );
53+ add ( "POST" , context , request );
4954 }
5055
5156 public void put (String context , HttpRequest request ) {
52- addToRouteMap ( REQUEST , "PUT" , context , request );
57+ add ( "PUT" , context , request );
5358 }
5459
5560 public void delete (String context , HttpRequest request ) {
56- addToRouteMap ( REQUEST , "DELETE" , context , request );
61+ add ( "DELETE" , context , request );
5762 }
5863
5964 public void patch (String context , HttpRequest request ) {
60- addToRouteMap ( REQUEST , "PATCH" , context , request );
65+ add ( "PATCH" , context , request );
6166 }
6267
63- private void addToRouteMap (ConcurrentHashMap <String , ArrayList <ExpressHandler >> routemap , String key , String context , HttpRequest request ) {
64-
65- if (!routemap .containsKey (key ))
66- routemap .put (key , new ArrayList <>());
67-
68- routemap .get (key ).add (new ExpressHandler (context , request ));
68+ private void add (String requestMethod , String context , HttpRequest request ) {
69+ ExpressMiddleware handler = new ExpressMiddleware (requestMethod , context , request );
70+ if (httpContext == null ) {
71+ FILTER .add (handler );
72+ } else {
73+ httpContext .getFilters ().add (handler );
74+ }
6975 }
7076
7177 public void listen () throws IOException {
@@ -85,12 +91,26 @@ public void listen(int port, Action action) throws IOException {
8591 launch (action , port );
8692 }
8793
94+ public void set404 (HttpRequest request ) {
95+ this .request404 = request ;
96+ }
97+
8898 private void launch (Action action , int port ) throws IOException {
8999 new Thread (() -> {
90100 try {
91101 httpServer = HttpServer .create (new InetSocketAddress ("localhost" , port ), 0 );
92102 httpServer .setExecutor (null );
93- httpServer .createContext ("/" , new ExpressContext (this ));
103+ httpContext = httpServer .createContext ("/" , httpExchange -> {
104+ if (request404 != null ) {
105+ Request request = new Request (httpExchange );
106+ Response response = new Response (httpExchange );
107+ request404 .handle (request , response );
108+ } else {
109+ System .err .println ("Not 404 Handler specified" );
110+ }
111+ });
112+
113+ httpContext .getFilters ().addAll (FILTER );
94114
95115 httpServer .start ();
96116 action .action ();
@@ -101,16 +121,4 @@ private void launch(Action action, int port) throws IOException {
101121 }).start ();
102122 }
103123
104- public static HttpRequest statics (String path ) {
105- return (req , res ) -> {
106- File reqFile = new File (path + req .getURI ().getPath ());
107-
108- if (reqFile .exists ()) {
109- String extension = reqFile .getAbsolutePath ().replaceAll ("^(.*\\ .|.*\\ \\ |.+$)" , "" );
110- String contentType = ExpressUtils .getContentType (extension );
111- res .send (reqFile , contentType );
112- }
113- };
114- }
115-
116124}
0 commit comments