Skip to content
This repository was archived by the owner on Oct 30, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.binance.api.client;

import java.util.List;
import com.binance.api.client.domain.event.AggTradeEvent;
import com.binance.api.client.domain.event.AllMarketTickersEvent;
import com.binance.api.client.domain.event.CandlestickEvent;
import com.binance.api.client.domain.event.DepthEvent;
import com.binance.api.client.domain.event.UserDataUpdateEvent;
Expand All @@ -18,4 +20,6 @@ public interface BinanceApiWebSocketClient {
void onAggTradeEvent(String symbol, BinanceApiCallback<AggTradeEvent> callback);

void onUserDataUpdateEvent(String listenKey, BinanceApiCallback<UserDataUpdateEvent> callback);

void onAllMarketTickersEvent(BinanceApiCallback<List<AllMarketTickersEvent>> callback);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
package com.binance.api.client.domain.event;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class AllMarketTickersEvent {

@JsonProperty("e")
private String eventType;

@JsonProperty("E")
private long eventTime;

@JsonProperty("s")
private String symbol;

@JsonProperty("p")
private double priceChange;

@JsonProperty("P")
private double priceChangePercent;

@JsonProperty("w")
private double weightedAveragePrice;

@JsonProperty("x")
private double previousDaysClosePrice;

@JsonProperty("c")
private double currentDaysClosePrice;

@JsonProperty("Q")
private long closeTradesQuantity;

@JsonProperty("a")
private double bestAskPrice;

@JsonProperty("A")
private long bestAskQuantity;

@JsonProperty("o")
private double openPrice;

@JsonProperty("h")
private double highPrice;

@JsonProperty("l")
private double lowPrice;

@JsonProperty("v")
private long totalTradedBaseAssetVolume;

@JsonProperty("q")
private long totalTradedQuoteAssetVolume;

@JsonProperty("O")
private long statisticesOpenTime;

@JsonProperty("C")
private long statisticesCloseTime;

@JsonProperty("F")
private long firstTradeId;

@JsonProperty("L")
private long lastTradeId;

@JsonProperty("n")
private long totalNumberOfTrades;

public String getEventType() {
return eventType;
}

public void setEventType(String eventType) {
this.eventType = eventType;
}

public long getEventTime() {
return eventTime;
}

public void setEventTime(long eventTime) {
this.eventTime = eventTime;
}

public String getSymbol() {
return symbol;
}

public void setSymbol(String symbol) {
this.symbol = symbol;
}

public double getPriceChange() {
return priceChange;
}

public void setPriceChange(double priceChange) {
this.priceChange = priceChange;
}

public double getPriceChangePercent() {
return priceChangePercent;
}

public void setPriceChangePercent(double priceChangePercent) {
this.priceChangePercent = priceChangePercent;
}

public double getWeightedAveragePrice() {
return weightedAveragePrice;
}

public void setWeightedAveragePrice(double weightedAveragePrice) {
this.weightedAveragePrice = weightedAveragePrice;
}

public double getPreviousDaysClosePrice() {
return previousDaysClosePrice;
}

public void setPreviousDaysClosePrice(double previousDaysClosePrice) {
this.previousDaysClosePrice = previousDaysClosePrice;
}

public double getCurrentDaysClosePrice() {
return currentDaysClosePrice;
}

public void setCurrentDaysClosePrice(double currentDaysClosePrice) {
this.currentDaysClosePrice = currentDaysClosePrice;
}

public long getCloseTradesQuantity() {
return closeTradesQuantity;
}

public void setCloseTradesQuantity(long closeTradesQuantity) {
this.closeTradesQuantity = closeTradesQuantity;
}

public double getBestAskPrice() {
return bestAskPrice;
}

public void setBestAskPrice(double bestAskPrice) {
this.bestAskPrice = bestAskPrice;
}

public long getBestAskQuantity() {
return bestAskQuantity;
}

public void setBestAskQuantity(long bestAskQuantity) {
this.bestAskQuantity = bestAskQuantity;
}

public double getOpenPrice() {
return openPrice;
}

public void setOpenPrice(double openPrice) {
this.openPrice = openPrice;
}

public double getHighPrice() {
return highPrice;
}

public void setHighPrice(double highPrice) {
this.highPrice = highPrice;
}

public double getLowPrice() {
return lowPrice;
}

public void setLowPrice(double lowPrice) {
this.lowPrice = lowPrice;
}

public long getTotalTradedBaseAssetVolume() {
return totalTradedBaseAssetVolume;
}

public void setTotalTradedBaseAssetVolume(long totalTradedBaseAssetVolume) {
this.totalTradedBaseAssetVolume = totalTradedBaseAssetVolume;
}

public long getTotalTradedQuoteAssetVolume() {
return totalTradedQuoteAssetVolume;
}

public void setTotalTradedQuoteAssetVolume(long totalTradedQuoteAssetVolume) {
this.totalTradedQuoteAssetVolume = totalTradedQuoteAssetVolume;
}

public long getStatisticesOpenTime() {
return statisticesOpenTime;
}

public void setStatisticesOpenTime(long statisticesOpenTime) {
this.statisticesOpenTime = statisticesOpenTime;
}

public long getStatisticesCloseTime() {
return statisticesCloseTime;
}

public void setStatisticesCloseTime(long statisticesCloseTime) {
this.statisticesCloseTime = statisticesCloseTime;
}

public long getFirstTradeId() {
return firstTradeId;
}

public void setFirstTradeId(long firstTradeId) {
this.firstTradeId = firstTradeId;
}

public long getLastTradeId() {
return lastTradeId;
}

public void setLastTradeId(long lastTradeId) {
this.lastTradeId = lastTradeId;
}

public long getTotalNumberOfTrades() {
return totalNumberOfTrades;
}

public void setTotalNumberOfTrades(long totalNumberOfTrades) {
this.totalNumberOfTrades = totalNumberOfTrades;
}

@Override
public String toString() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please replace this to use the ToStringBuilder that is used in other transfer objects? Thanks.

return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
.append("eventType", eventType)
.append("eventTime", eventTime)
.append("symbol", symbol)
.append("priceChange", priceChange)
.append("priceChangePercent", priceChangePercent)
.append("weightedAveragePrice", weightedAveragePrice)
.append("previousDaysClosePrice", previousDaysClosePrice)
.append("currentDaysClosePrice", currentDaysClosePrice)
.append("closeTradesQuantity", closeTradesQuantity)
.append("bestAskPrice", bestAskPrice)
.append("bestAskQuantity", bestAskQuantity)
.append("openPrice", openPrice)
.append("highPrice", highPrice)
.append("lowPrice", lowPrice)
.append("totalTradedBaseAssetVolume", totalTradedBaseAssetVolume)
.append("totalTradedQuoteAssetVolume", totalTradedQuoteAssetVolume)
.append("statisticesOpenTime", statisticesOpenTime)
.append("statisticesCloseTime", statisticesCloseTime)
.append("firstTradeId", firstTradeId)
.append("lastTradeId", lastTradeId)
.append("totalNumberOfTrades", totalNumberOfTrades)
.toString();
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package com.binance.api.client.impl;

import java.io.Closeable;
import java.io.IOException;
import java.util.List;
import okhttp3.Dispatcher;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import com.binance.api.client.BinanceApiCallback;
import com.binance.api.client.BinanceApiWebSocketClient;
import com.binance.api.client.constant.BinanceApiConstants;
import com.binance.api.client.domain.event.AggTradeEvent;
import com.binance.api.client.domain.event.AllMarketTickersEvent;
import com.binance.api.client.domain.event.CandlestickEvent;
import com.binance.api.client.domain.event.DepthEvent;
import com.binance.api.client.domain.event.UserDataUpdateEvent;
import com.binance.api.client.domain.market.CandlestickInterval;
import okhttp3.OkHttpClient;
import okhttp3.Dispatcher;
import okhttp3.Request;

import java.io.Closeable;
import java.io.IOException;

/**
* Binance API WebSocket client implementation using OkHttp.
Expand Down Expand Up @@ -48,6 +49,11 @@ public void onUserDataUpdateEvent(String listenKey, BinanceApiCallback<UserDataU
createNewWebSocket(listenKey, new BinanceApiWebSocketListener<>(callback, UserDataUpdateEvent.class));
}

public void onAllMarketTickersEvent(BinanceApiCallback<List<AllMarketTickersEvent>> callback) {
final String channel = "!ticker@arr";
createNewWebSocket(channel, new BinanceApiWebSocketListener<List<AllMarketTickersEvent>>(callback));
}

private void createNewWebSocket(String channel, BinanceApiWebSocketListener<?> listener) {
String streamingUrl = String.format("%s/%s", BinanceApiConstants.WS_API_BASE_URL, channel);
Request request = new Request.Builder().url(streamingUrl).build();
Expand All @@ -58,4 +64,5 @@ private void createNewWebSocket(String channel, BinanceApiWebSocketListener<?> l
public void close() throws IOException {
client.dispatcher().executorService().shutdown();
}

}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.binance.api.client.impl;

import com.binance.api.client.BinanceApiCallback;
import com.binance.api.client.exception.BinanceApiException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;

import java.io.IOException;
import com.binance.api.client.BinanceApiCallback;
import com.binance.api.client.exception.BinanceApiException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
* Binance API WebSocket listener.
Expand All @@ -18,22 +18,28 @@ public class BinanceApiWebSocketListener<T> extends WebSocketListener {

private Class<T> eventClass;

private ObjectMapper mapper;
private TypeReference<T> eventTypeReference;

public BinanceApiWebSocketListener(BinanceApiCallback<T> callback, Class<T> eventClass) {
this(callback, eventClass, new ObjectMapper());
this.callback = callback;
this.eventClass = eventClass;
}

public BinanceApiWebSocketListener(BinanceApiCallback<T> callback, Class<T> eventClass, ObjectMapper mapper) {
public BinanceApiWebSocketListener(BinanceApiCallback<T> callback) {
this.callback = callback;
this.eventClass = eventClass;
this.mapper = mapper;
this.eventTypeReference = new TypeReference<T>() {};
}

@Override
public void onMessage(WebSocket webSocket, String text) {
ObjectMapper mapper = new ObjectMapper();
try {
T event = mapper.readValue(text, eventClass);
T event = null;
if (eventClass == null) {
event = mapper.readValue(text, eventTypeReference);
} else {
event = mapper.readValue(text, eventClass);
}
callback.onResponse(event);
} catch (IOException e) {
throw new BinanceApiException(e);
Expand Down
Loading