diff --git a/example/java/example/pom.xml b/example/java/example/pom.xml
index 0cc6dff..bde9666 100644
--- a/example/java/example/pom.xml
+++ b/example/java/example/pom.xml
@@ -24,17 +24,17 @@
com.fasterxml.jackson.core
jackson-databind
- 2.9.9
+ 2.11.1
com.squareup.okhttp3
okhttp
- 3.4.2
+ 4.8.0
- com.squareup.okhttp3
- okhttp-ws
- 3.4.2
+ com.neovisionaries
+ nv-websocket-client
+ 2.9
diff --git a/example/java/example/src/main/java/io/bitmax/api/Authorization.java b/example/java/example/src/main/java/io/bitmax/api/Authorization.java
index 388f80c..03dd8f1 100644
--- a/example/java/example/src/main/java/io/bitmax/api/Authorization.java
+++ b/example/java/example/src/main/java/io/bitmax/api/Authorization.java
@@ -10,7 +10,6 @@
public class Authorization {
private String apiKey;
- private String secretKey;
private Mac hmac;
private byte[] hmacKey;
private SecretKeySpec keySpec;
@@ -20,7 +19,6 @@ public class Authorization {
*/
public Authorization(String apiKey, String secretKey) {
this.apiKey = apiKey;
- this.secretKey = secretKey;
hmacKey = Base64.getDecoder().decode(secretKey);
try {
@@ -35,14 +33,29 @@ public Authorization(String apiKey, String secretKey) {
/**
* @return authorization headers
- * @param url path for generating specific signature
+ * @param path path for generating specific signature
* @param timestamp milliseconds since UNIX epoch in UTC
*/
- public Map getHeaderMap(String url, long timestamp) {
+ public Map getHeaderMap(String path, long timestamp) {
Map headers = new HashMap<>();
headers.put("x-auth-key", apiKey);
- headers.put("x-auth-signature", generateSig(url, timestamp));
- headers.put("x-auth-timestamp", timestamp + "");
+ headers.put("x-auth-signature", generateSig(path, timestamp));
+ headers.put("x-auth-timestamp", String.valueOf(timestamp));
+ return headers;
+ }
+
+ /**
+ * @return authorization headers
+ * @param path path for generating specific signature
+ * @param timestamp milliseconds since UNIX epoch in UTC
+ * @param coid generated unique orderId
+ */
+ public Map getHeaderMap(String path, long timestamp, String coid) {
+ Map headers = new HashMap<>();
+ headers.put("x-auth-key", apiKey);
+ headers.put("x-auth-signature", generateSig(path, timestamp, coid));
+ headers.put("x-auth-timestamp", String.valueOf(timestamp));
+ headers.put("x-auth-coid", coid);
return headers;
}
@@ -50,8 +63,15 @@ public Map getHeaderMap(String url, long timestamp) {
* @return signature, signed using sha256 using the base64-decoded secret key
*/
private String generateSig(String url, long timestamp) {
- String prehash = timestamp + "+" + url;
- byte[] encoded = Base64.getEncoder().encode(hmac.doFinal(prehash.getBytes(StandardCharsets.UTF_8)));
- return new String(encoded);
+ String preHash = timestamp + "+" + url;
+ return new String(Base64.getEncoder().encode(hmac.doFinal(preHash.getBytes(StandardCharsets.UTF_8))));
+ }
+
+ /**
+ * @return signature, signed using sha256 using the base64-decoded secret key
+ */
+ private String generateSig(String url, long timestamp, String coid) {
+ String preHash = timestamp + "+" + url + "+" + coid;
+ return new String(Base64.getEncoder().encode(hmac.doFinal(preHash.getBytes(StandardCharsets.UTF_8))));
}
}
\ No newline at end of file
diff --git a/example/java/example/src/main/java/io/bitmax/api/Mapper.java b/example/java/example/src/main/java/io/bitmax/api/Mapper.java
index 4d7750e..2dd2f35 100644
--- a/example/java/example/src/main/java/io/bitmax/api/Mapper.java
+++ b/example/java/example/src/main/java/io/bitmax/api/Mapper.java
@@ -8,11 +8,11 @@
* Converts json to java object and vice versa
*/
-public class Mapper {
+public class Mapper {
private static ObjectMapper mapper = new ObjectMapper();
/**
- * @param json string in json-format
+ * @param json string in json-format
* @param clazz class of object for converting from json to java object
* @return an object with type and data from json
*/
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClient.java b/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClient.java
index 9ab0094..3143aaa 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClient.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClient.java
@@ -1,8 +1,8 @@
package io.bitmax.api.rest.client;
import io.bitmax.api.Mapper;
-import io.bitmax.api.rest.messages.responses.BarHist;
-import io.bitmax.api.rest.messages.responses.Product;
+import io.bitmax.api.rest.messages.responses.RestBarHist;
+import io.bitmax.api.rest.messages.responses.RestProduct;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -33,7 +33,7 @@ public BitMaxRestApiClient() {
* @param interval bars interval
* @param limit max bars count
*/
- public BarHist[] getCandlestickBars(String symbol, Interval interval, int limit) {
+ public RestBarHist[] getCandlestickBars(String symbol, Interval interval, int limit) {
long[] between = getFrom(interval, limit);
String params = "?symbol=" + symbol + "&interval="+interval+"&from=" + between[0] + "&to=" + between[1];
@@ -44,7 +44,7 @@ public BarHist[] getCandlestickBars(String symbol, Interval interval, int limit)
.build()
).execute();
- return Mapper.asObject(result.body().string(), BarHist[].class);
+ return Mapper.asObject(result.body().string(), RestBarHist[].class);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
@@ -54,7 +54,7 @@ public BarHist[] getCandlestickBars(String symbol, Interval interval, int limit)
/**
* @return Each market summary data record contains current information about every product.
*/
- public Product[] getProducts() {
+ public RestProduct[] getProducts() {
try {
Response result = client.newCall(new Request.Builder()
.url(URL + API + PATH_PRODUCTS)
@@ -62,7 +62,7 @@ public Product[] getProducts() {
.build()
).execute();
- return Mapper.asObject(result.body().string(), Product[].class);
+ return Mapper.asObject(result.body().string(), RestProduct[].class);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClientAccount.java b/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClientAccount.java
index 3c03c8e..43119c5 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClientAccount.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/client/BitMaxRestApiClientAccount.java
@@ -2,12 +2,12 @@
import io.bitmax.api.Authorization;
import io.bitmax.api.Mapper;
-import io.bitmax.api.rest.messages.responses.OpenOrdersList;
-import io.bitmax.api.rest.messages.responses.OrderDetails;
-import io.bitmax.api.rest.messages.responses.UserInfo;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
+import io.bitmax.api.rest.messages.requests.RestCancelOrderRequest;
+import io.bitmax.api.rest.messages.responses.RestOpenOrdersList;
+import io.bitmax.api.rest.messages.responses.RestOrderDetails;
+import io.bitmax.api.rest.messages.responses.RestUserInfo;
+import io.bitmax.api.rest.messages.requests.RestPlaceOrderRequest;
+import okhttp3.*;
import java.util.Map;
@@ -31,8 +31,9 @@ public BitMaxRestApiClientAccount(String apiKey, String secret) {
/**
* @return 'UserInfo' object that contains 'userGroup' field
+ * @throws RuntimeException throws if something wrong (e.g. not correct response)
*/
- public UserInfo getUserInfo() {
+ public RestUserInfo getUserInfo() {
Map headers = authClient.getHeaderMap(PATH_INFO, System.currentTimeMillis());
Request.Builder builder = new Request.Builder()
@@ -43,20 +44,14 @@ public UserInfo getUserInfo() {
builder.header(entry.getKey(), entry.getValue());
}
- try {
- Response response = client.newCall(builder.build()).execute();
-
- return Mapper.asObject(response.body().string(), UserInfo.class);
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
+ return executeRequest(builder.build(), RestUserInfo.class);
}
/**
* @return list of open orders
+ * @throws RuntimeException throws if something wrong (e.g. not correct response)
*/
- public OpenOrdersList getOpenOrders() {
+ public RestOpenOrdersList getOpenOrders() {
Map headers = authClient.getHeaderMap(PATH_ORDERS, System.currentTimeMillis());
Request.Builder builder = new Request.Builder()
@@ -67,10 +62,49 @@ public OpenOrdersList getOpenOrders() {
builder.header(entry.getKey(), entry.getValue());
}
- try {
- Response response = client.newCall(builder.build()).execute();
+ return executeRequest(builder.build(), RestOpenOrdersList.class);
+ }
+
+ /**
+ * @param coid id of expected order
+ * @return detailed info about specific order
+ * @throws RuntimeException throws if something wrong (e.g. not correct response)
+ */
+ public RestOrderDetails getOrder(String coid) {
+ Map headers = authClient.getHeaderMap(PATH_ORDER, System.currentTimeMillis());
+
+ Request.Builder builder = new Request.Builder()
+ .url(URL + accountGroup + '/' + API + PATH_ORDER + '/' + coid)
+ .get();
+
+ for (Map.Entry entry : headers.entrySet()) {
+ builder.header(entry.getKey(), entry.getValue());
+ }
+
+ return executeRequest(builder.build(), RestOrderDetails.class);
+ }
- return Mapper.asObject(response.body().string(), OpenOrdersList.class);
+ /**
+ * @param order is object which contains information about order
+ * @return Response - object which contains information about result place order request
+ * @throws RuntimeException throws if something wrong (order was not published)
+ */
+ public Response placeOrder(RestPlaceOrderRequest order) {
+ long timestamp = System.currentTimeMillis();
+ Map headers = authClient.getHeaderMap(PATH_ORDER, timestamp, order.getCoid());
+
+ RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), Mapper.asString(order));
+
+ Request.Builder builder = new Request.Builder()
+ .url(URL + accountGroup + '/' + API + PATH_ORDER)
+ .post(body);
+
+ for (Map.Entry entry : headers.entrySet()) {
+ builder.header(entry.getKey(), entry.getValue());
+ }
+
+ try {
+ return client.newCall(builder.build()).execute();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
@@ -78,24 +112,35 @@ public OpenOrdersList getOpenOrders() {
}
/**
- * @return detailed info about specific order
- * @param coid id of expected order
+ * @param order is object which contains information about order
+ * @return Response - object which contains information about result cancel order request
+ * @throws RuntimeException throws if something wrong (order was not cancelled)
*/
- public OrderDetails getOrder(String coid) {
- Map headers = authClient.getHeaderMap(PATH_ORDER, System.currentTimeMillis());
+ public Response cancelOrder(RestCancelOrderRequest order) {
+ long timestamp = System.currentTimeMillis();
+ Map headers = authClient.getHeaderMap(PATH_ORDER, timestamp, order.getCoid());
+
+ RequestBody body = RequestBody.create(MediaType.parse("application/json"), Mapper.asString(order));
Request.Builder builder = new Request.Builder()
- .url(URL + accountGroup + '/' + API + PATH_ORDER + '/' + coid)
- .get();
+ .url(URL + accountGroup + '/' + API + PATH_ORDER)
+ .delete(body);
for (Map.Entry entry : headers.entrySet()) {
builder.header(entry.getKey(), entry.getValue());
}
try {
- Response response = client.newCall(builder.build()).execute();
+ return client.newCall(builder.build()).execute();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
- return Mapper.asObject(response.body().string(), OrderDetails.class);
+ private T executeRequest(Request request, Class clazz) {
+ try {
+ return Mapper.asObject(client.newCall(request).execute().body().string(), clazz);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/requests/RestCancelOrderRequest.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/requests/RestCancelOrderRequest.java
new file mode 100644
index 0000000..8a8f2d3
--- /dev/null
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/requests/RestCancelOrderRequest.java
@@ -0,0 +1,73 @@
+package io.bitmax.api.rest.messages.requests;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+* Cancel an Order with Rest
+* */
+public class RestCancelOrderRequest {
+
+ /**
+ * milliseconds since UNIX epoch in UTC
+ */
+ @JsonProperty("time")
+ private long time;
+
+ /**
+ * a 32-character unique client order Id
+ */
+ @JsonProperty("coid")
+ private String coid;
+
+ /**
+ * a 32-character unique client cancel order Id
+ */
+ @JsonProperty("origCoid")
+ private String origCoid;
+
+ /**
+ * symbol
+ */
+ @JsonProperty("symbol")
+ private String symbol;
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public String getCoid() {
+ return coid;
+ }
+
+ public void setCoid(String coid) {
+ this.coid = coid;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getOrigCoid() {
+ return origCoid;
+ }
+
+ public void setOrigCoid(String origCoid) {
+ this.origCoid = origCoid;
+ }
+
+ @Override
+ public String toString() {
+ return "RestCancelOrderRequest:\n\ttime: " + time +
+ "\n\tcoid: " + coid +
+ "\n\tsymbol: " + symbol +
+ "\n\torigCoid: " + origCoid;
+ }
+}
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/requests/RestPlaceOrderRequest.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/requests/RestPlaceOrderRequest.java
new file mode 100644
index 0000000..daed66a
--- /dev/null
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/requests/RestPlaceOrderRequest.java
@@ -0,0 +1,148 @@
+package io.bitmax.api.rest.messages.requests;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+* Place a New Order with Rest
+* */
+public class RestPlaceOrderRequest {
+
+ /**
+ * milliseconds since UNIX epoch in UTC
+ */
+ @JsonProperty("time")
+ private long time;
+
+ /**
+ * a 32-character unique client order Id
+ */
+ @JsonProperty("coid")
+ private String coid;
+
+ /**
+ * symbol
+ */
+ @JsonProperty("symbol")
+ private String symbol;
+
+ /**
+ * order price
+ */
+ @JsonProperty("orderPrice")
+ private String orderPrice;
+
+ /**
+ * order quantity
+ */
+ @JsonProperty("orderQty")
+ private String orderQty;
+
+ /**
+ * order type, you shall specify one of the following: "limit", "market", "stop_market", "stop_limit".
+ */
+ @JsonProperty("orderType")
+ private String orderType;
+
+ /**
+ * order side "buy" or "sell"
+ */
+ @JsonProperty("side")
+ private String side;
+
+ /**
+ * Optional, if true, the order will either be posted to the limit order book or be cancelled, i.e. the order cannot take liquidity; default value is false
+ */
+ @JsonProperty("postOnly")
+ private boolean postOnly = false;
+
+ /**
+ * optional, stop price of the order. This field is required for stop market orders and stop limit orders.
+ */
+ @JsonProperty("stopPrice")
+ private String stopPrice = "";
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public String getCoid() {
+ return coid;
+ }
+
+ public void setCoid(String coid) {
+ this.coid = coid;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getOrderPrice() {
+ return orderPrice;
+ }
+
+ public void setOrderPrice(String orderPrice) {
+ this.orderPrice = orderPrice;
+ }
+
+ public String getOrderQty() {
+ return orderQty;
+ }
+
+ public void setOrderQty(String orderQty) {
+ this.orderQty = orderQty;
+ }
+
+ public String getOrderType() {
+ return orderType;
+ }
+
+ public void setOrderType(String orderType) {
+ this.orderType = orderType;
+ }
+
+ public String getSide() {
+ return side;
+ }
+
+ public void setSide(String side) {
+ this.side = side;
+ }
+
+ public boolean isPostOnly() {
+ return postOnly;
+ }
+
+ public void setPostOnly(boolean postOnly) {
+ this.postOnly = postOnly;
+ }
+
+ public String getStopPrice() {
+ return stopPrice;
+ }
+
+ public void setStopPrice(String stopPrice) {
+ this.stopPrice = stopPrice;
+ }
+
+ @Override
+ public String toString() {
+ return "RestPlaceOrderRequest:\n\ttime: " + time +
+ "\n\tcoid: " + coid +
+ "\n\tsymbol: " + symbol +
+ "\n\torderPrice: " + orderPrice +
+ "\n\torderQty: " + orderQty +
+ "\n\torderType: " + orderType +
+ "\n\tside: " + side +
+ "\n\tpostOnly: " + postOnly +
+ "\n\tstopPrice: " + stopPrice;
+ }
+}
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/BarHist.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestBarHist.java
similarity index 99%
rename from example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/BarHist.java
rename to example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestBarHist.java
index 6d40236..bd3e7d0 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/BarHist.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestBarHist.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class BarHist {
+public class RestBarHist {
/**
* message
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/OpenOrdersList.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestOpenOrdersList.java
similarity index 88%
rename from example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/OpenOrdersList.java
rename to example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestOpenOrdersList.java
index 5ac842b..4e72b48 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/OpenOrdersList.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestOpenOrdersList.java
@@ -6,7 +6,7 @@
import java.util.Arrays;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class OpenOrdersList {
+public class RestOpenOrdersList {
/**
* response code
@@ -30,7 +30,7 @@ public class OpenOrdersList {
* array with data about every open Order
*/
@JsonProperty("data")
- private Order[] data;
+ private RestPlaceOrderResponse[] data;
public int getCode() {
return code;
@@ -56,11 +56,11 @@ public void setEmail(String email) {
this.email = email;
}
- public Order[] getData() {
+ public RestPlaceOrderResponse[] getData() {
return data;
}
- public void setData(Order[] data) {
+ public void setData(RestPlaceOrderResponse[] data) {
this.data = data;
}
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/OrderDetails.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestOrderDetails.java
similarity index 88%
rename from example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/OrderDetails.java
rename to example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestOrderDetails.java
index b0d349b..7d2bb8b 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/OrderDetails.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestOrderDetails.java
@@ -3,10 +3,8 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.Arrays;
-
@JsonIgnoreProperties(ignoreUnknown = true)
-public class OrderDetails {
+public class RestOrderDetails {
/**
* response code
@@ -30,7 +28,7 @@ public class OrderDetails {
* data about open Order
*/
@JsonProperty("data")
- private Order data;
+ private RestPlaceOrderResponse data;
public int getCode() {
return code;
@@ -56,11 +54,11 @@ public void setEmail(String email) {
this.email = email;
}
- public Order getData() {
+ public RestPlaceOrderResponse getData() {
return data;
}
- public void setData(Order data) {
+ public void setData(RestPlaceOrderResponse data) {
this.data = data;
}
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/Order.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestPlaceOrderResponse.java
similarity index 99%
rename from example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/Order.java
rename to example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestPlaceOrderResponse.java
index 73b01cc..f120a7b 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/Order.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestPlaceOrderResponse.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Order {
+public class RestPlaceOrderResponse {
/**
* time
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/Product.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestProduct.java
similarity index 99%
rename from example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/Product.java
rename to example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestProduct.java
index 08f4659..585404c 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/Product.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestProduct.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Product {
+public class RestProduct {
@JsonProperty("symbol")
private String symbol;
diff --git a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/UserInfo.java b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestUserInfo.java
similarity index 94%
rename from example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/UserInfo.java
rename to example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestUserInfo.java
index 61a291f..42a72c8 100644
--- a/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/UserInfo.java
+++ b/example/java/example/src/main/java/io/bitmax/api/rest/messages/responses/RestUserInfo.java
@@ -2,7 +2,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
-public class UserInfo {
+public class RestUserInfo {
/**
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/BitMaxApiWebSocketListener.java b/example/java/example/src/main/java/io/bitmax/api/websocket/BitMaxApiWebSocketListener.java
index c88fcaf..f0da9a9 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/BitMaxApiWebSocketListener.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/BitMaxApiWebSocketListener.java
@@ -1,38 +1,28 @@
package io.bitmax.api.websocket;
+import com.neovisionaries.ws.client.*;
import io.bitmax.api.Mapper;
import io.bitmax.api.websocket.client.BitMaxApiCallback;
import io.bitmax.api.websocket.messages.responses.*;
-import io.bitmax.api.websocket.messages.requests.Subscribe;
-import okhttp3.*;
-import okhttp3.ws.WebSocket;
-import okhttp3.ws.WebSocketCall;
-import okhttp3.ws.WebSocketListener;
-import okio.Buffer;
-
-import java.io.IOException;
+import io.bitmax.api.websocket.messages.requests.WebSocketSubscribe;
+
import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
-import static okhttp3.ws.WebSocket.TEXT;
-
/**
* Represents a Listener of webSocket channels
*/
-public class BitMaxApiWebSocketListener implements WebSocketListener {
+public class BitMaxApiWebSocketListener {
/**
* WebSocket executor service, execute webSocket tasks such as open/close channel and send message
*/
- private final ExecutorService executor = Executors.newSingleThreadExecutor();
+ private WebSocket webSocket;
/**
- * WebSocket executor service, execute webSocket tasks such as open/close channel and send message
+ * The timeout value in milliseconds for socket connection.
*/
- private WebSocket webSocket;
+ private static final int TIMEOUT = 5000;
/**
* patterns to determine type of message
@@ -47,150 +37,124 @@ public class BitMaxApiWebSocketListener implements WebSocketListener {
/**
* callBacks or every message type
*/
- private BitMaxApiCallback summaryCallback;
- private BitMaxApiCallback depthCallback;
- private BitMaxApiCallback marketTradesCallback;
- private BitMaxApiCallback barCallback;
- private BitMaxApiCallback orderCallback;
-
- /**
- * message for subscribe to channels
- */
- private Subscribe message;
+ private BitMaxApiCallback summaryCallback;
+ private BitMaxApiCallback depthCallback;
+ private BitMaxApiCallback marketTradesCallback;
+ private BitMaxApiCallback barCallback;
+ private BitMaxApiCallback orderCallback;
/**
* Initialize listener for authorized user
*/
- public BitMaxApiWebSocketListener(Subscribe message, Map headersMap, String url) {
- this.message = message;
+ public BitMaxApiWebSocketListener(WebSocketSubscribe message, Map headersMap, String url, int timeout) {
- OkHttpClient client = new OkHttpClient.Builder()
- .readTimeout(0, TimeUnit.MILLISECONDS)
- .build();
+ try {
+ webSocket = new WebSocketFactory()
+ .setConnectionTimeout(timeout)
+ .createSocket(url)
+ .addListener(new WebSocketAdapter() {
+ public void onTextMessage(WebSocket websocket, String message) {
+ onMessage(message);
+ }
- Request request = new Request.Builder()
- .url(url)
- .headers(Headers.of(headersMap))
- .build();
+ public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame,
+ WebSocketFrame clientCloseFrame, boolean closedByServer) {
+ System.out.println("Socket Disconnected!");
+ }
+ })
+ .addExtension(WebSocketExtension.PERMESSAGE_DEFLATE);
- WebSocketCall.create(client, request).enqueue(this);
- }
+ headersMap.forEach((key, val) -> webSocket.addHeader(key, val));
- /**
- * Initialize listener for common messages
- */
- public BitMaxApiWebSocketListener(Subscribe message, String url) {
- this.message = message;
-
- OkHttpClient client = new OkHttpClient.Builder()
- .readTimeout(0, TimeUnit.MILLISECONDS)
- .build();
+ webSocket.connect();
- Request request = new Request.Builder()
- .url(url)
- .build();
+ if (message != null) send(message);
- WebSocketCall.create(client, request).enqueue(this);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
-
- @Override
- public void onOpen(final WebSocket webSocket, Response response) {
- executor.execute(() -> {
- try {
- this.webSocket = webSocket;
- webSocket.sendMessage(RequestBody.create(TEXT, Mapper.asString(message)));
- } catch (IOException e) {
- System.err.println("Unable to send messages: " + e.getMessage());
- }
- });
+ /**
+ * Initialize listener for common messages
+ */
+ public BitMaxApiWebSocketListener(WebSocketSubscribe message, String url) {
+
+ try {
+ webSocket = new WebSocketFactory()
+ .setConnectionTimeout(TIMEOUT)
+ .createSocket(url)
+ .addListener(new WebSocketAdapter() {
+ public void onTextMessage(WebSocket websocket, String message) {
+ onMessage(message);
+ }
+
+ public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame,
+ WebSocketFrame clientCloseFrame, boolean closedByServer) {
+ System.out.println("Socket Disconnected!");
+ }
+ })
+ .addExtension(WebSocketExtension.PERMESSAGE_DEFLATE);
+
+ webSocket.connect();
+
+ if (message != null) send(message);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
-
public void send(Object message) {
- executor.execute(() -> {
- try {
- webSocket.sendMessage(RequestBody.create(TEXT, Mapper.asString(message)));
- } catch (IOException e) {
- System.err.println("Unable to send messages: " + e.getMessage());
- }
- });
+ webSocket.sendText(Mapper.asString(message));
}
+ private void onMessage(String message) {
- @Override
- public void onMessage(ResponseBody message) throws IOException {
- String text;
- if (message.contentType() == TEXT) {
- text = message.string();
- } else {
- text = message.source().readByteString().hex();
- }
- message.close();
-
- if (pongPattern.matcher(text).find()) return;
- else if (summaryPattern.matcher(text).find()) {
+ if (summaryPattern.matcher(message).find()) {
if (summaryCallback != null) {
- summaryCallback.onResponse(Mapper.asObject(text, Summary.class));
- return;
+ summaryCallback.onResponse(Mapper.asObject(message, WebSocketSummary.class));
}
- } else if (depthPattern.matcher(text).find()) {
+ } else if (depthPattern.matcher(message).find()) {
if (depthCallback != null) {
- depthCallback.onResponse(Mapper.asObject(text, Depth.class));
- return;
+ depthCallback.onResponse(Mapper.asObject(message, WebSocketDepth.class));
}
- } else if (marketTradesPattern.matcher(text).find()) {
+ } else if (marketTradesPattern.matcher(message).find()) {
if (marketTradesCallback != null) {
- marketTradesCallback.onResponse(Mapper.asObject(text, MarketTrades.class));
- return;
+ marketTradesCallback.onResponse(Mapper.asObject(message, WebSocketMarketTrades.class));
}
- } else if (barPattern.matcher(text).find()) {
+ } else if (barPattern.matcher(message).find()) {
if (barCallback != null) {
- barCallback.onResponse(Mapper.asObject(text, Bar.class));
- return;
+ barCallback.onResponse(Mapper.asObject(message, WebSocketBar.class));
}
- } else if (orderPattern.matcher(text).find()) {
+ } else if (orderPattern.matcher(message).find()) {
if (orderCallback != null) {
- orderCallback.onResponse(Mapper.asObject(text, Order.class));
- return;
+ orderCallback.onResponse(Mapper.asObject(message, WebSocketOrder.class));
}
}
- System.out.println("Warn! Not found callback for message: " + text);
- }
-
- @Override
- public void onPong(Buffer payload) {
- }
-
- @Override
- public void onClose(int code, String reason) {
- System.out.println("CLOSE: " + code + " " + reason);
- executor.shutdown();
}
- @Override
- public void onFailure(IOException e, Response response) {
- e.printStackTrace();
- executor.shutdown();
+ public void close() {
+ webSocket.disconnect();
}
- public void setSummaryCallback(BitMaxApiCallback summaryCallback) {
+ public void setSummaryCallback(BitMaxApiCallback summaryCallback) {
this.summaryCallback = summaryCallback;
}
- public void setDepthCallback(BitMaxApiCallback depthCallback) {
+ public void setDepthCallback(BitMaxApiCallback depthCallback) {
this.depthCallback = depthCallback;
}
- public void setMarketTradesCallback(BitMaxApiCallback marketTradesCallback) {
+ public void setMarketTradesCallback(BitMaxApiCallback marketTradesCallback) {
this.marketTradesCallback = marketTradesCallback;
}
- public void setBarCallback(BitMaxApiCallback barCallback) {
+ public void setBarCallback(BitMaxApiCallback barCallback) {
this.barCallback = barCallback;
}
- public void setOrderCallback(BitMaxApiCallback orderCallback) {
+ public void setOrderCallback(BitMaxApiCallback orderCallback) {
this.orderCallback = orderCallback;
}
}
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/CancelOrder.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketCancelOrder.java
similarity index 93%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/CancelOrder.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketCancelOrder.java
index 2a70e9b..7d769ec 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/CancelOrder.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketCancelOrder.java
@@ -5,7 +5,7 @@
/**
* Cancel an Order with WebSocket
*/
-public class CancelOrder {
+public class WebSocketCancelOrder {
/**
* message type
@@ -79,7 +79,7 @@ public void setSymbol(String symbol) {
@Override
public String toString() {
- return "CancelOrder:\n\tmessageType: " + messageType +
+ return "WebSocketCancelOrder:\n\tmessageType: " + messageType +
"\n\ttime: " + time +
"\n\tcoid: " + coid +
"\n\tsymbol: " + symbol +
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/PlaceOrder.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketPlaceOrder.java
similarity index 97%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/PlaceOrder.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketPlaceOrder.java
index 144fa84..55a9f46 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/PlaceOrder.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketPlaceOrder.java
@@ -5,7 +5,7 @@
/**
* Place a New Order with WebSocket
* */
-public class PlaceOrder {
+public class WebSocketPlaceOrder {
/**
* message type
@@ -163,7 +163,7 @@ public void setTimeInForce(String timeInForce) {
@Override
public String toString() {
- return "PlaceOrder:\n\tmessageType: " + messageType +
+ return "WebSocketPlaceOrder:\n\tmessageType: " + messageType +
"\n\ttime: " + time +
"\n\tcoid: " + coid +
"\n\tsymbol: " + symbol +
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/Subscribe.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketSubscribe.java
similarity index 60%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/Subscribe.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketSubscribe.java
index fec8309..b1d0051 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/Subscribe.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/requests/WebSocketSubscribe.java
@@ -5,7 +5,7 @@
/**
* Subscribe to webSocket
*/
-public class Subscribe {
+public class WebSocketSubscribe {
/**
* message type
@@ -19,18 +19,6 @@ public class Subscribe {
@JsonProperty("marketDepthLevel")
private int marketDepthLevel;
- /**
- * max number of recent trades to be included in the first market trades message
- */
- @JsonProperty("recentTradeMaxCount")
- private int recentTradeMaxCount;
-
- /**
- * optional, set to true if you don't want to receive summary messages, default false
- */
- @JsonProperty("skipSummary")
- private boolean skipSummary = false;
-
/**
* optional, set to true if you don't want to receive bar messages, default false
*/
@@ -53,22 +41,6 @@ public void setMarketDepthLevel(int marketDepthLevel) {
this.marketDepthLevel = marketDepthLevel;
}
- public int getRecentTradeMaxCount() {
- return recentTradeMaxCount;
- }
-
- public void setRecentTradeMaxCount(int recentTradeMaxCount) {
- this.recentTradeMaxCount = recentTradeMaxCount;
- }
-
- public boolean isSkipSummary() {
- return skipSummary;
- }
-
- public void setSkipSummary(boolean skipSummary) {
- this.skipSummary = skipSummary;
- }
-
public boolean isSkipBars() {
return skipBars;
}
@@ -81,8 +53,6 @@ public void setSkipBars(boolean skipBars) {
public String toString() {
return "Subscribe:\n\tmessageType: " + messageType +
"\n\tmarketDepthLevel: " + marketDepthLevel +
- "\n\trecentTradeMaxCount: " + recentTradeMaxCount +
- "\n\tskipSummary: " + skipSummary +
"\n\tskipBars: " + skipBars;
}
}
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Bar.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketBar.java
similarity index 99%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Bar.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketBar.java
index 8368859..fcc7350 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Bar.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketBar.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Bar {
+public class WebSocketBar {
/**
* product symbol
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Depth.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketDepth.java
similarity index 98%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Depth.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketDepth.java
index 7494e6c..ca77c3e 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Depth.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketDepth.java
@@ -6,7 +6,7 @@
import java.util.Arrays;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Depth {
+public class WebSocketDepth {
/**
* symbol
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/MarketTrades.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketMarketTrades.java
similarity index 82%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/MarketTrades.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketMarketTrades.java
index d0184ce..3d6ce3d 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/MarketTrades.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketMarketTrades.java
@@ -6,7 +6,7 @@
import java.util.Arrays;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class MarketTrades {
+public class WebSocketMarketTrades {
/**
* symbol
@@ -18,7 +18,7 @@ public class MarketTrades {
* array of objects with info about every trade
*/
@JsonProperty("trades")
- private Trade[] trades;
+ private WebSocketTrade[] trades;
public String getSymbol() {
return symbol;
@@ -28,11 +28,11 @@ public void setSymbol(String symbol) {
this.symbol = symbol;
}
- public Trade[] getTrades() {
+ public WebSocketTrade[] getTrades() {
return trades;
}
- public void setTrades(Trade[] trades) {
+ public void setTrades(WebSocketTrade[] trades) {
this.trades = trades;
}
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Order.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketOrder.java
similarity index 82%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Order.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketOrder.java
index 53fa710..d81ea9e 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Order.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketOrder.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Order {
+public class WebSocketOrder {
/**
* client order id, (needed to cancel order)
@@ -310,30 +310,30 @@ public void setOrderType(String orderType) {
@Override
public String toString() {
- return "\n\tOrder:\n\t\tcoid: " + coid +
- "\n\t\torigCoid: " + origCoid +
- "\n\t\tsymbol: " + symbol +
- "\n\t\texecId: " + execId +
- "\n\t\torderType: " + orderType +
- "\n\t\tlastQuantity: " + lastQuantity +
- "\n\t\tbitmaxComission: " + bitmaxComission +
- "\n\t\tbitmaxBalance: " + bitmaxBalance +
- "\n\t\ttimestamp: " + timestamp +
- "\n\t\tlimitPrice: " + limitPrice +
- "\n\t\tstopPrice: " + stopPrice +
- "\n\t\torderQuantity: " + orderQuantity +
- "\n\t\tfilledQuantity: " + filledQuantity +
- "\n\t\taveragePrice: " + averagePrice +
- "\n\t\tbaseAssetTotalBalance: " + baseAssetTotalBalance +
- "\n\t\tbaseAssetPendingBalance: " + baseAssetPendingBalance +
- "\n\t\tquoteAssetTotalBalance: " + quoteAssetTotalBalance +
- "\n\t\tquoteAssetPendingBalance: " + quoteAssetPendingBalance +
- "\n\t\tfee: " + fee +
- "\n\t\tfeeAsset: " + feeAsset +
- "\n\t\tside: " + side +
- "\n\t\torderStatus: " + orderStatus +
- "\n\t\tcategory: " + category +
- "\n\t\terrorCode: " + errorCode +
- "\n\t\tinstruction: " + instruction;
+ return "\nOrder:\n\tcoid: " + coid +
+ "\n\torigCoid: " + origCoid +
+ "\n\tsymbol: " + symbol +
+ "\n\texecId: " + execId +
+ "\n\torderType: " + orderType +
+ "\n\tlastQuantity: " + lastQuantity +
+ "\n\tbitmaxComission: " + bitmaxComission +
+ "\n\tbitmaxBalance: " + bitmaxBalance +
+ "\n\ttimestamp: " + timestamp +
+ "\n\tlimitPrice: " + limitPrice +
+ "\n\tstopPrice: " + stopPrice +
+ "\n\torderQuantity: " + orderQuantity +
+ "\n\tfilledQuantity: " + filledQuantity +
+ "\n\taveragePrice: " + averagePrice +
+ "\n\tbaseAssetTotalBalance: " + baseAssetTotalBalance +
+ "\n\tbaseAssetPendingBalance: " + baseAssetPendingBalance +
+ "\n\tquoteAssetTotalBalance: " + quoteAssetTotalBalance +
+ "\n\tquoteAssetPendingBalance: " + quoteAssetPendingBalance +
+ "\n\tfee: " + fee +
+ "\n\tfeeAsset: " + feeAsset +
+ "\n\tside: " + side +
+ "\n\torderStatus: " + orderStatus +
+ "\n\tcategory: " + category +
+ "\n\terrorCode: " + errorCode +
+ "\n\tinstruction: " + instruction;
}
}
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Summary.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketSummary.java
similarity index 98%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Summary.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketSummary.java
index 6edcb98..db23789 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Summary.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketSummary.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Summary {
+public class WebSocketSummary {
/**
* symbol
diff --git a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Trade.java b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketTrade.java
similarity index 97%
rename from example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Trade.java
rename to example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketTrade.java
index 9711f94..3435dd9 100644
--- a/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/Trade.java
+++ b/example/java/example/src/main/java/io/bitmax/api/websocket/messages/responses/WebSocketTrade.java
@@ -5,7 +5,7 @@
@JsonIgnoreProperties(ignoreUnknown = true)
-public class Trade {
+public class WebSocketTrade {
/**
* price
diff --git a/example/java/example/src/test/java/io/bitmax/api/examples/account/rest/OrderExample.java b/example/java/example/src/test/java/io/bitmax/api/examples/account/rest/OrderExample.java
new file mode 100644
index 0000000..135ac4c
--- /dev/null
+++ b/example/java/example/src/test/java/io/bitmax/api/examples/account/rest/OrderExample.java
@@ -0,0 +1,56 @@
+package io.bitmax.api.examples.account.rest;
+
+import io.bitmax.api.rest.client.BitMaxRestApiClientAccount;
+import io.bitmax.api.rest.messages.requests.RestCancelOrderRequest;
+import io.bitmax.api.rest.messages.requests.RestPlaceOrderRequest;
+import okhttp3.Response;
+
+import java.io.IOException;
+
+public class OrderExample {
+ public static void main(String[] args) throws IOException, InterruptedException {
+ String apiKey = "";
+ String secret = "";
+
+ BitMaxRestApiClientAccount restClient = new BitMaxRestApiClientAccount(apiKey, secret);
+
+ long time = System.currentTimeMillis();
+
+ String placeCoid = "coid_" + time;
+
+ RestPlaceOrderRequest restPlaceOrderRequest = new RestPlaceOrderRequest();
+ restPlaceOrderRequest.setTime(time);
+ restPlaceOrderRequest.setSymbol("EOS/ETH");
+ restPlaceOrderRequest.setCoid(placeCoid);
+ restPlaceOrderRequest.setOrderPrice("0.01");
+ restPlaceOrderRequest.setOrderQty("4.0");
+ restPlaceOrderRequest.setOrderType("limit");
+ restPlaceOrderRequest.setSide("buy");
+
+ System.out.println(restPlaceOrderRequest);
+
+ Response placeOrderResponse = restClient.placeOrder(restPlaceOrderRequest);
+
+ System.out.println(placeOrderResponse.body().string());
+
+
+ // waiting before order will be placed
+ Thread.sleep(1500);
+
+ long time2 = System.currentTimeMillis();
+
+ String cancelCoid = "coid_" + time2;
+
+ RestCancelOrderRequest restCancelOrderRequest = new RestCancelOrderRequest();
+ restCancelOrderRequest.setTime(time);
+ restCancelOrderRequest.setSymbol("EOS/ETH");
+ restCancelOrderRequest.setCoid(cancelCoid);
+ restCancelOrderRequest.setOrigCoid(placeCoid);
+
+ System.out.println(restCancelOrderRequest);
+
+ Response cancelOrderResponse = restClient.cancelOrder(restCancelOrderRequest);
+
+ System.out.println(cancelOrderResponse.body().string());
+ }
+}
diff --git a/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/AccountExample.java b/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/AccountExample.java
index e71447d..a759453 100644
--- a/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/AccountExample.java
+++ b/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/AccountExample.java
@@ -3,7 +3,7 @@
import io.bitmax.api.Authorization;
import io.bitmax.api.websocket.BitMaxApiWebSocketListener;
import io.bitmax.api.rest.client.BitMaxRestApiClientAccount;
-import io.bitmax.api.websocket.messages.requests.Subscribe;
+import io.bitmax.api.websocket.messages.requests.WebSocketSubscribe;
import java.util.Map;
@@ -18,16 +18,15 @@ public static void main(String[] args) {
String url = "wss://bitmax.io/" + accountGroup + "/api/stream/ETH-BTC";
- Subscribe subscribeMessage = new Subscribe();
+ WebSocketSubscribe subscribeMessage = new WebSocketSubscribe();
subscribeMessage.setMessageType("subscribe");
subscribeMessage.setMarketDepthLevel(200);
- subscribeMessage.setRecentTradeMaxCount(200);
try {
Authorization authClient = new Authorization(apiKey, secret);
Map headers = authClient.getHeaderMap("api/stream", System.currentTimeMillis());
- BitMaxApiWebSocketListener listener = new BitMaxApiWebSocketListener(subscribeMessage, headers, url);
+ BitMaxApiWebSocketListener listener = new BitMaxApiWebSocketListener(subscribeMessage, headers, url, 5000);
listener.setSummaryCallback(response -> System.out.println("\n" + response));
listener.setDepthCallback(response -> System.out.println("\n" + response));
@@ -35,8 +34,12 @@ public static void main(String[] args) {
listener.setMarketTradesCallback(response -> System.out.println("\n" + response));
listener.setOrderCallback(response -> System.out.println("\n" + response));
+ Thread.sleep(10000);
+
+ listener.close();
+
} catch (Exception e) {
- System.out.println(e.toString());
+ e.printStackTrace();
}
}
}
diff --git a/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/OrderExample.java b/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/OrderExample.java
index cfe7eae..85263e5 100644
--- a/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/OrderExample.java
+++ b/example/java/example/src/test/java/io/bitmax/api/examples/account/socket/OrderExample.java
@@ -3,9 +3,9 @@
import io.bitmax.api.Authorization;
import io.bitmax.api.rest.client.BitMaxRestApiClientAccount;
import io.bitmax.api.websocket.BitMaxApiWebSocketListener;
-import io.bitmax.api.websocket.messages.requests.CancelOrder;
-import io.bitmax.api.websocket.messages.requests.PlaceOrder;
-import io.bitmax.api.websocket.messages.requests.Subscribe;
+import io.bitmax.api.websocket.messages.requests.WebSocketCancelOrder;
+import io.bitmax.api.websocket.messages.requests.WebSocketPlaceOrder;
+import io.bitmax.api.websocket.messages.requests.WebSocketSubscribe;
import java.util.Map;
@@ -20,17 +20,15 @@ public static void main(String[] args) {
String url = "wss://bitmax.io/" + accountGroup + "/api/stream/EOS-ETH";
- Subscribe subscribeMessage = new Subscribe();
+ WebSocketSubscribe subscribeMessage = new WebSocketSubscribe();
subscribeMessage.setMessageType("subscribe");
subscribeMessage.setMarketDepthLevel(200);
- subscribeMessage.setRecentTradeMaxCount(200);
try {
Authorization authClient = new Authorization(apiKey, secret);
Map headers = authClient.getHeaderMap("api/stream", System.currentTimeMillis());
- BitMaxApiWebSocketListener listener = new BitMaxApiWebSocketListener(subscribeMessage, headers, url);
-
+ BitMaxApiWebSocketListener listener = new BitMaxApiWebSocketListener(null, headers, url, 10000);
listener.setOrderCallback(response -> System.out.println("\n" + response));
// waiting before webSocket setUp
@@ -40,12 +38,12 @@ public static void main(String[] args) {
String placeCoid = "coid_" + time1;
- PlaceOrder placeOrder = new PlaceOrder();
+ WebSocketPlaceOrder placeOrder = new WebSocketPlaceOrder();
placeOrder.setMessageType("newOrderRequest");
placeOrder.setTime(time1);
placeOrder.setSymbol("EOS/ETH");
placeOrder.setCoid(placeCoid);
- placeOrder.setOrderPrice("0.02");
+ placeOrder.setOrderPrice("0.008");
placeOrder.setOrderQty("5.0");
placeOrder.setOrderType("limit");
placeOrder.setSide("buy");
@@ -59,7 +57,7 @@ public static void main(String[] args) {
String cancelCoid = "coid_" + time2;
- CancelOrder cancelOrder = new CancelOrder();
+ WebSocketCancelOrder cancelOrder = new WebSocketCancelOrder();
cancelOrder.setMessageType("cancelOrderRequest");
cancelOrder.setTime(time2);
cancelOrder.setCoid(cancelCoid);
@@ -68,8 +66,13 @@ public static void main(String[] args) {
listener.send(cancelOrder);
+ // waiting before order will be cancelled
+ Thread.sleep(1500);
+
+ listener.close();
+
} catch (Exception e) {
- System.out.println(e.toString());
+ e.printStackTrace();
}
}
}
diff --git a/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/BarHistExample.java b/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/BarHistExample.java
index 1e73570..68fe4cb 100644
--- a/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/BarHistExample.java
+++ b/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/BarHistExample.java
@@ -2,7 +2,7 @@
import io.bitmax.api.rest.client.BitMaxRestApiClient;
import io.bitmax.api.rest.client.Interval;
-import io.bitmax.api.rest.messages.responses.BarHist;
+import io.bitmax.api.rest.messages.responses.RestBarHist;
import java.util.Arrays;
@@ -10,7 +10,7 @@ public class BarHistExample {
public static void main(String[] args) {
BitMaxRestApiClient restClient = new BitMaxRestApiClient();
- BarHist[] bars = restClient.getCandlestickBars("EOS/ETH", Interval.FIFTEEN_MINUTES, 200);
+ RestBarHist[] bars = restClient.getCandlestickBars("EOS/ETH", Interval.FIFTEEN_MINUTES, 200);
String barsStr = Arrays.toString(bars);
System.out.println(barsStr);
diff --git a/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/ProductExample.java b/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/ProductExample.java
index 4dbdb78..b55b858 100644
--- a/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/ProductExample.java
+++ b/example/java/example/src/test/java/io/bitmax/api/examples/common/rest/ProductExample.java
@@ -1,7 +1,7 @@
package io.bitmax.api.examples.common.rest;
import io.bitmax.api.rest.client.BitMaxRestApiClient;
-import io.bitmax.api.rest.messages.responses.Product;
+import io.bitmax.api.rest.messages.responses.RestProduct;
import java.util.Arrays;
@@ -9,7 +9,7 @@ public class ProductExample {
public static void main(String[] args) {
BitMaxRestApiClient restClient = new BitMaxRestApiClient();
- Product[] products = restClient.getProducts();
+ RestProduct[] products = restClient.getProducts();
String barsStr = Arrays.toString(products);
System.out.println(barsStr);
diff --git a/example/java/example/src/test/java/io/bitmax/api/examples/common/socket/PublicExample.java b/example/java/example/src/test/java/io/bitmax/api/examples/common/socket/PublicExample.java
index 8deb9bc..0bb7773 100644
--- a/example/java/example/src/test/java/io/bitmax/api/examples/common/socket/PublicExample.java
+++ b/example/java/example/src/test/java/io/bitmax/api/examples/common/socket/PublicExample.java
@@ -1,17 +1,16 @@
package io.bitmax.api.examples.common.socket;
import io.bitmax.api.websocket.BitMaxApiWebSocketListener;
-import io.bitmax.api.websocket.messages.requests.Subscribe;
+import io.bitmax.api.websocket.messages.requests.WebSocketSubscribe;
public class PublicExample {
public static void main(String[] args) {
String url = "wss://bitmax.io/api/public/EOS-ETH";
- Subscribe subscribeMessage = new Subscribe();
+ WebSocketSubscribe subscribeMessage = new WebSocketSubscribe();
subscribeMessage.setMessageType("subscribe");
subscribeMessage.setMarketDepthLevel(200);
- subscribeMessage.setRecentTradeMaxCount(200);
try {
BitMaxApiWebSocketListener listener = new BitMaxApiWebSocketListener(subscribeMessage, url);
@@ -20,8 +19,13 @@ public static void main(String[] args) {
listener.setBarCallback(response -> System.out.println("\n" + response));
listener.setMarketTradesCallback(response -> System.out.println("\n" + response));
listener.setDepthCallback(response -> System.out.println("\n" + response));
+
+ Thread.sleep(10000);
+
+ listener.close();
+
} catch (Exception e) {
- System.out.println(e.toString());
+ e.printStackTrace();
}
}
}