Mercurial Hosting > luan
annotate src/luan/modules/http/LuanDomainHandler.java @ 1400:221eedb0f54e
fix inner class gc bug
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 13 Sep 2019 05:05:51 -0600 |
parents | d8754a50adf1 |
children | 27efb1fcbcb5 |
rev | line source |
---|---|
1315 | 1 package luan.modules.http; |
2 | |
1347
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1336
diff
changeset
|
3 import luan.lib.webserver.Request; |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1336
diff
changeset
|
4 import luan.lib.webserver.Response; |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1336
diff
changeset
|
5 import luan.lib.webserver.Handler; |
643cf1c37723
move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents:
1336
diff
changeset
|
6 import luan.lib.webserver.handlers.DomainHandler; |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1332
diff
changeset
|
7 import luan.Luan; |
1315 | 8 import luan.LuanTable; |
9 import luan.LuanCloner; | |
1350 | 10 import luan.LuanFunction; |
1315 | 11 import luan.LuanException; |
1332 | 12 import luan.modules.logging.Log4j; |
1315 | 13 |
14 | |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
15 public class LuanDomainHandler implements Handler, DomainHandler.Factory { |
1315 | 16 |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1332
diff
changeset
|
17 private final Luan luanInit; |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
18 private final DomainHandler domainHandler = new DomainHandler(this); |
1315 | 19 |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1332
diff
changeset
|
20 public LuanDomainHandler(Luan luanInit) { |
1315 | 21 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1332
diff
changeset
|
22 this.luanInit = (Luan)cloner.clone(luanInit); |
1315 | 23 } |
24 | |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
25 @Override public Handler newHandler(String domain) { |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1332
diff
changeset
|
26 Luan luan = newLuan(domain); |
1400
221eedb0f54e
fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents:
1350
diff
changeset
|
27 return new LuanHandler(luan,domain); |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
28 } |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
29 |
1336 | 30 protected void newLoggerRepository(Luan luan) { |
1332 | 31 Log4j.newLoggerRepository(luan); |
32 } | |
33 | |
1350 | 34 protected Luan newLuan(final String domain) { |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
35 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1332
diff
changeset
|
36 Luan luan = (Luan)cloner.clone(luanInit); |
1336 | 37 newLoggerRepository(luan); |
1350 | 38 LuanFunction reset_luan = new LuanFunction(false) { |
39 @Override public Object call(Object[] args) { | |
40 domainHandler.removeHandler(domain); | |
41 return LuanFunction.NOTHING; | |
42 } | |
43 }; | |
1328 | 44 try { |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
45 LuanTable Http = (LuanTable)luan.require("luan:http/Http.luan"); |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
46 Http.put( "domain", domain ); |
1350 | 47 Http.put( "reset_luan", reset_luan ); |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
48 } catch(LuanException e) { |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
49 throw new RuntimeException(e); |
1328 | 50 } |
1329
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
51 return luan; |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
52 } |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
53 |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
54 @Override public Response handle(Request request) { |
5a39b006acd1
make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents:
1328
diff
changeset
|
55 return domainHandler.handle(request); |
1315 | 56 } |
57 } |