|
20 | 20 |
|
21 | 21 | import java.net.InetSocketAddress;
|
22 | 22 | import java.util.Objects;
|
| 23 | +import java.util.concurrent.Executors; |
| 24 | +import java.util.concurrent.ScheduledExecutorService; |
| 25 | +import java.util.function.BiConsumer; |
23 | 26 |
|
24 | 27 | import com.google.common.base.MoreObjects;
|
25 | 28 |
|
|
31 | 34 | */
|
32 | 35 | public final class HAProxyConfig extends ProxyConfig {
|
33 | 36 |
|
34 |
| - private final InetSocketAddress proxyAddress; |
| 37 | + private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); |
| 38 | + |
| 39 | + private long lastUpdateTime = System.currentTimeMillis(); |
| 40 | + |
| 41 | + private InetSocketAddress proxyAddress; |
35 | 42 |
|
36 | 43 | @Nullable
|
37 |
| - private final InetSocketAddress sourceAddress; |
| 44 | + private InetSocketAddress sourceAddress; |
38 | 45 |
|
39 | 46 | HAProxyConfig(InetSocketAddress proxyAddress) {
|
| 47 | + this(proxyAddress, -1); |
| 48 | + } |
| 49 | + |
| 50 | + HAProxyConfig(InetSocketAddress proxyAddress, long refreshInterval) { |
40 | 51 | this.proxyAddress = proxyAddress;
|
41 | 52 | sourceAddress = null;
|
| 53 | + |
| 54 | + if (refreshInterval > 0) { |
| 55 | + final BiConsumer<InetSocketAddress, Long> callback = (newProxyAddress, updateTime) -> { |
| 56 | + this.proxyAddress = newProxyAddress; |
| 57 | + this.lastUpdateTime = updateTime; |
| 58 | + }; |
| 59 | + |
| 60 | + ProxyConfig.reserveDNSUpdate(callback, |
| 61 | + proxyAddress.getHostName(), |
| 62 | + proxyAddress.getPort(), |
| 63 | + refreshInterval, |
| 64 | + scheduler); |
| 65 | + } |
42 | 66 | }
|
43 | 67 |
|
44 | 68 | HAProxyConfig(InetSocketAddress proxyAddress, InetSocketAddress sourceAddress) {
|
| 69 | + this(proxyAddress, sourceAddress, -1); |
| 70 | + } |
| 71 | + |
| 72 | + HAProxyConfig(InetSocketAddress proxyAddress, InetSocketAddress sourceAddress, long refreshInterval) { |
45 | 73 | checkArgument(sourceAddress.getAddress().getClass() == proxyAddress.getAddress().getClass(),
|
46 | 74 | "sourceAddress and proxyAddress should be the same type");
|
47 | 75 | this.proxyAddress = proxyAddress;
|
48 | 76 | this.sourceAddress = sourceAddress;
|
| 77 | + |
| 78 | + if (refreshInterval > 0) { |
| 79 | + final BiConsumer<InetSocketAddress, Long> callback = (newProxyAddress, updateTime) -> { |
| 80 | + this.proxyAddress = newProxyAddress; |
| 81 | + this.lastUpdateTime = updateTime; |
| 82 | + }; |
| 83 | + |
| 84 | + ProxyConfig.reserveDNSUpdate(callback, |
| 85 | + proxyAddress.getHostName(), |
| 86 | + proxyAddress.getPort(), |
| 87 | + refreshInterval, |
| 88 | + scheduler); |
| 89 | + } |
| 90 | + |
| 91 | + if (refreshInterval > 0) { |
| 92 | + final BiConsumer<InetSocketAddress, Long> callback = (newSourceAddress, updateTime) -> { |
| 93 | + this.sourceAddress = newSourceAddress; |
| 94 | + this.lastUpdateTime = updateTime; |
| 95 | + }; |
| 96 | + |
| 97 | + ProxyConfig.reserveDNSUpdate(callback, |
| 98 | + sourceAddress.getHostName(), |
| 99 | + sourceAddress.getPort(), |
| 100 | + refreshInterval, |
| 101 | + scheduler); |
| 102 | + } |
49 | 103 | }
|
50 | 104 |
|
51 | 105 | @Override
|
|
0 commit comments