33namespace React \Dns \Resolver ;
44
55use React \Dns \Query \Executor ;
6+ use React \Dns \Query \CachedExecutor ;
7+ use React \Dns \Query \RecordCache ;
68use React \Dns \Protocol \Parser ;
79use React \Dns \Protocol \BinaryDumper ;
810use React \EventLoop \LoopInterface ;
@@ -12,11 +14,29 @@ class Factory
1214 public function create ($ nameserver , LoopInterface $ loop )
1315 {
1416 $ nameserver = $ this ->addPortToServerIfMissing ($ nameserver );
15- $ executor = new Executor ( $ loop , new Parser (), new BinaryDumper () );
17+ $ executor = $ this -> createExecutor ( $ nameserver , $ loop );
1618
1719 return new Resolver ($ nameserver , $ executor );
1820 }
1921
22+ public function createCached ($ nameserver , LoopInterface $ loop )
23+ {
24+ $ nameserver = $ this ->addPortToServerIfMissing ($ nameserver );
25+ $ executor = $ this ->createCachedExecutor ($ nameserver , $ loop );
26+
27+ return new Resolver ($ nameserver , $ executor );
28+ }
29+
30+ protected function createExecutor ($ nameserver , LoopInterface $ loop )
31+ {
32+ return new Executor ($ loop , new Parser (), new BinaryDumper ());
33+ }
34+
35+ protected function createCachedExecutor ($ nameserver , LoopInterface $ loop )
36+ {
37+ return new CachedExecutor ($ this ->createExecutor (), new RecordCache ());
38+ }
39+
2040 protected function addPortToServerIfMissing ($ nameserver )
2141 {
2242 return false === strpos ($ nameserver , ': ' ) ? "$ nameserver:53 " : $ nameserver ;
0 commit comments