├── target
└── .gitignore
├── src
├── main
│ ├── webapp
│ │ ├── index.jsp
│ │ └── WEB-INF
│ │ │ └── web.xml
│ └── java
│ │ └── com
│ │ └── mbcu
│ │ └── mmm
│ │ ├── sequences
│ │ ├── counters
│ │ │ ├── Counter.java
│ │ │ └── Yuki.java
│ │ ├── LogNum.java
│ │ ├── state
│ │ │ ├── StateProvider.java
│ │ │ └── State.java
│ │ ├── Base.java
│ │ ├── Tester.java
│ │ ├── Balancer.java
│ │ ├── Emailer.java
│ │ ├── Txd.java
│ │ ├── Txc.java
│ │ ├── Dataapi.java
│ │ ├── Starter.java
│ │ └── Orderbook.java
│ │ ├── models
│ │ ├── Base.java
│ │ ├── internal
│ │ │ ├── LastAmount.java
│ │ │ ├── Intervals.java
│ │ │ ├── PartialOrder.java
│ │ │ ├── Credentials.java
│ │ │ ├── TRLOrder.java
│ │ │ ├── BefAf.java
│ │ │ ├── AgBalance.java
│ │ │ ├── LedgerEvent.java
│ │ │ ├── LastBuySellTuple.java
│ │ │ ├── NameIssuer.java
│ │ │ ├── Cpair.java
│ │ │ ├── Config.java
│ │ │ ├── BotConfig.java
│ │ │ └── RLOrder.java
│ │ ├── request
│ │ │ ├── TeeEx.java
│ │ │ ├── AccountInfo.java
│ │ │ ├── Request.java
│ │ │ ├── AccountOffers.java
│ │ │ ├── Submit.java
│ │ │ ├── BookOffers.java
│ │ │ └── Subscribe.java
│ │ └── dataapi
│ │ │ ├── AccountBalance.java
│ │ │ └── Balance.java
│ │ ├── rx
│ │ ├── RxBusProvider.java
│ │ ├── BusBase.java
│ │ └── RxBus.java
│ │ ├── notice
│ │ ├── Content.java
│ │ └── SenderSES.java
│ │ ├── main
│ │ ├── Main.java
│ │ └── WebSocketClient.java
│ │ ├── api
│ │ └── ApiManager.java
│ │ ├── utils
│ │ ├── GsonUtils.java
│ │ ├── MyLogger.java
│ │ ├── MyUtils.java
│ │ └── Mock.java
│ │ └── helpers
│ │ └── TAccountOffer.java
└── test
│ └── java
│ └── com
│ ├── ripple
│ └── core
│ │ └── coretypes
│ │ └── CurrencyTest.java
│ └── mbcu
│ └── mmm
│ ├── sequences
│ ├── NotifierTest.java
│ └── counters
│ │ └── YukiTest.java
│ └── utils
│ └── UtilsTest.java
├── .gitignore
├── config-sample.txt
├── pom.xml
├── README.md
└── docs
├── PARSING_PATTERN.md
└── VERSIONS.md
/target/.gitignore:
--------------------------------------------------------------------------------
1 | /classes/
2 | /test-classes/
3 |
--------------------------------------------------------------------------------
/src/main/webapp/index.jsp:
--------------------------------------------------------------------------------
1 |
2 |
3 | Hello World!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/sequences/counters/Counter.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.sequences.counters;
2 |
3 | import com.mbcu.mmm.models.internal.RLOrder;
4 |
5 | public interface Counter {
6 |
7 | public void onCounterReady(RLOrder counter);
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/models/Base.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.models;
2 |
3 | import com.mbcu.mmm.utils.GsonUtils;
4 |
5 | public abstract class Base {
6 |
7 | protected String stringify(Object object) {
8 | return GsonUtils.toJson(object);
9 | }
10 |
11 | public abstract String stringify();
12 | }
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/rx/RxBusProvider.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.rx;
2 |
3 | public class RxBusProvider {
4 | private static RxBus BUS = null;
5 |
6 | private RxBusProvider() {
7 | // No instances.
8 | }
9 |
10 | public static RxBus getInstance() {
11 | if (BUS == null) {
12 | BUS = new RxBus();
13 | }
14 | return BUS;
15 | }
16 | }
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/rx/BusBase.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.rx;
2 |
3 | import com.mbcu.mmm.utils.GsonUtils;
4 |
5 | public class BusBase {
6 |
7 | @Override
8 | public String toString() {
9 | StringBuilder sb = new StringBuilder(this.getClass().getName());
10 | sb.append("\n");
11 | sb.append(GsonUtils.toJson(this));
12 | return sb.toString();
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/notice/Content.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.notice;
2 |
3 | public class Content {
4 |
5 | public static String body(String account, String pair, String error) {
6 | StringBuilder sb = new StringBuilder(account);
7 | sb.append("\n");
8 | sb.append(pair);
9 | sb.append("\n");
10 | sb.append(error);
11 | return sb.toString();
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/models/internal/LastAmount.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.models.internal;
2 |
3 | import java.math.BigDecimal;
4 |
5 | public class LastAmount {
6 |
7 | public final BigDecimal unitPrice;
8 | public final BigDecimal qty;
9 |
10 | public LastAmount(BigDecimal unitPrice, BigDecimal qty) {
11 | super();
12 | this.unitPrice = unitPrice;
13 | this.qty = qty;
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/sequences/LogNum.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.sequences;
2 |
3 | public enum LogNum {
4 |
5 | CANCELED_UNFUNDED ("Offer canceled, no longer funded"),
6 | CANCELED_OFFERCANCEL("Canceled by OfferCancel");
7 |
8 | private final String text;
9 |
10 | private LogNum(final String text) {
11 | this.text = text;
12 | }
13 |
14 | @Override
15 | public String toString() {
16 | return text;
17 | }
18 |
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/sequences/state/StateProvider.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.sequences.state;
2 |
3 | import com.mbcu.mmm.models.internal.Config;
4 |
5 | public class StateProvider {
6 |
7 | private static State STATE = null;
8 |
9 | private StateProvider() {
10 | // No instances.
11 | }
12 |
13 | public static State getInstance(Config config) {
14 | if (STATE == null) {
15 | STATE = State.newInstance(config);
16 | }
17 | return STATE;
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/models/request/TeeEx.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.models.request;
2 |
3 | public class TeeEx extends Request {
4 |
5 | private final String transaction;
6 |
7 | public TeeEx(String transaction) {
8 | super(Command.TX);
9 | this.transaction = transaction;
10 | }
11 |
12 | @Override
13 | public String stringify() {
14 | return super.stringify(this);
15 | }
16 |
17 | public static TeeEx newInstance(String hash) {
18 | return new TeeEx(hash);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/test/java/com/ripple/core/coretypes/CurrencyTest.java:
--------------------------------------------------------------------------------
1 | package com.ripple.core.coretypes;
2 |
3 | import static org.junit.Assert.assertEquals;
4 |
5 | import org.junit.Test;
6 |
7 | public class CurrencyTest {
8 |
9 | @Test
10 | public void fromString() {
11 | Currency currency = Currency.fromString("JPY");
12 | assertEquals(currency.toString(), "JPY");
13 |
14 | }
15 |
16 | @Test
17 | public void testXRPCode() {
18 | assertEquals(Currency.XRP.toString(), "XRP");
19 |
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/models/internal/Intervals.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.models.internal;
2 |
3 | public class Intervals {
4 |
5 | int balancer;
6 | int accountBalance;
7 |
8 | public int getBalancer() {
9 | return balancer;
10 | }
11 |
12 | public void setBalancer(int balancer) {
13 | this.balancer = balancer;
14 | }
15 |
16 | public int getAccountBalance() {
17 | return accountBalance;
18 | }
19 |
20 | public void setAccountBalance(int accountBalance) {
21 | this.accountBalance = accountBalance;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/models/internal/PartialOrder.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.models.internal;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.ripple.core.coretypes.Amount;
7 |
8 | public class PartialOrder {
9 |
10 | private final List parts = new ArrayList<>();
11 |
12 |
13 | public void add (RLOrder part){
14 | parts.add(part);
15 | }
16 |
17 | public Amount sum(){
18 | return parts.stream()
19 | .map(RLOrder::getQuantity)
20 | .reduce((x, y) -> x.add(y))
21 | .get();
22 | }
23 |
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/mbcu/mmm/rx/RxBus.java:
--------------------------------------------------------------------------------
1 | package com.mbcu.mmm.rx;
2 |
3 | import com.jakewharton.rxrelay2.PublishRelay;
4 | import com.jakewharton.rxrelay2.Relay;
5 |
6 | import io.reactivex.Observable;
7 |
8 | public final class RxBus {
9 | private final Relay