1
zyy
2026-04-03 4fefff17528a878d345ff3311c297a66a671b8d6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.yami.trading.huobi.tradingview.api;
 
import com.yami.trading.huobi.tradingview.api.model.TickerData;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
 
public class TickerSubscription {
    private final String simpleOrProName;
    private final TradingViewAPI api;
    private final List<UpdateListener> updateListeners = new ArrayList<>();
 
    private long due;
 
    private TickerData tickerData;
 
    private boolean destroyed = false;
 
    public TickerSubscription(TradingViewAPI api, String simpleOrProName) {
        this.api = api;
        this.simpleOrProName = simpleOrProName;
        refreshDue();
    }
 
    public void updateData(TickerData tickerDataPatch) {
        if (this.tickerData == null) {
            this.tickerData = tickerDataPatch;
        } else {
            this.tickerData = this.tickerData.merge(tickerDataPatch);
        }
        this.tickerData.setLastUpdated(new Date());
 
        for (UpdateListener listener : new ArrayList<>(updateListeners)) {
            listener.onUpdate(this.tickerData);
        }
    }
 
    public CompletableFuture<TickerData> fetch() {
        refreshDue();
        return api.ensureRegistered(this).thenApply(v -> tickerData);
    }
 
    public boolean isCanBeDestroyed() {
        return due < System.currentTimeMillis() && updateListeners.isEmpty();
    }
 
    private void refreshDue() {
        this.due = System.currentTimeMillis() + 5000;
    }
 
    public void addUpdateListener(UpdateListener listener) {
        updateListeners.add(listener);
        if (destroyed) {
            destroyed = false;
            api.ensureRegistered(this);
        }
    }
 
    public String getSimpleOrProName() {
        return simpleOrProName;
    }
 
    public TradingViewAPI getApi() {
        return api;
    }
 
    public List<UpdateListener> getUpdateListeners() {
        return updateListeners;
    }
 
    public long getDue() {
        return due;
    }
 
    public void setDue(long due) {
        this.due = due;
    }
 
    public TickerData getTickerData() {
        return tickerData;
    }
 
    public void setTickerData(TickerData tickerData) {
        this.tickerData = tickerData;
    }
 
    public boolean isDestroyed() {
        return destroyed;
    }
 
    public void setDestroyed(boolean destroyed) {
        this.destroyed = destroyed;
    }
 
    public void removeUpdateListener(UpdateListener listener) {
        updateListeners.remove(listener);
    }
}