1
0
This commit is contained in:
2024-11-28 05:51:42 +03:00
parent 01cb6cb08b
commit fd21df73dd
9 changed files with 14 additions and 24 deletions

View File

@@ -11,8 +11,6 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Order {
private final UUID id = UUID.randomUUID();

View File

@@ -3,10 +3,13 @@ package ru.lionarius.impl;
import com.google.common.collect.ImmutableList;
import ru.lionarius.api.client.Client;
import ru.lionarius.api.client.ClientRepository;
import ru.lionarius.api.order.OrderList;
import ru.lionarius.api.order.Order;
import ru.lionarius.api.order.OrderList;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
public class InMemoryClientRepository implements ClientRepository {

View File

@@ -4,7 +4,6 @@ import com.lmax.disruptor.EventHandler;
import ru.lionarius.impl.CommandProcessor;
public class CommandEventHandler implements EventHandler<CommandEvent> {
private final CommandProcessor commandProcessor;
public CommandEventHandler(CommandProcessor commandProcessor) {

View File

@@ -1,6 +1,6 @@
package ru.lionarius.impl.disruptor;
import com.lmax.disruptor.*;
import com.lmax.disruptor.BusySpinWaitStrategy;
import com.lmax.disruptor.dsl.Disruptor;
import com.lmax.disruptor.dsl.ProducerType;
import ru.lionarius.api.CurrencyExchange;

View File

@@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableSet;
import ru.lionarius.api.CurrencyExchange;
import ru.lionarius.api.client.Client;
import ru.lionarius.api.client.ClientRepository;
import ru.lionarius.api.currency.Currency;
import ru.lionarius.api.currency.CurrencyPair;
import ru.lionarius.api.order.Order;
import ru.lionarius.api.order.OrderData;
@@ -24,7 +23,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
public class PlainCurrencyExchange implements CurrencyExchange {
private final ClientRepository clientRepository = new InMemoryClientRepository();
private final Map<CurrencyPair, OrderBook> orderBooks;
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final Set<CurrencyPair> allowedPairs;
@@ -67,7 +66,7 @@ public class PlainCurrencyExchange implements CurrencyExchange {
if (!allowedPairs.contains(pair))
throw new IllegalArgumentException("Pair is not allowed");
lock.writeLock().lock();
try {
var orders = clientRepository.getClientOrders(clientId).orElseThrow();

View File

@@ -1,20 +1,8 @@
package ru.lionarius.impl.queue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import ru.lionarius.api.client.ClientRepository;
import ru.lionarius.api.command.*;
import ru.lionarius.api.currency.CurrencyPair;
import ru.lionarius.api.order.Order;
import ru.lionarius.api.order.OrderData;
import ru.lionarius.api.order.message.OrderClosedMessage;
import ru.lionarius.api.command.Command;
import ru.lionarius.impl.CommandProcessor;
import ru.lionarius.impl.InMemoryClientRepository;
import ru.lionarius.impl.OrderBook;
import java.util.AbstractMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
public class CommandProcessorTask implements Runnable {

View File

@@ -15,10 +15,12 @@ import java.util.UUID;
import java.util.concurrent.*;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public abstract class ConcurrentCurrencyExchangeTest {
protected abstract CurrencyExchange createExchange(Set<CurrencyPair> pairs);
protected abstract void shutdownExchange(CurrencyExchange exchange);
private CurrencyExchange exchange;

View File

@@ -4,7 +4,7 @@ import ru.lionarius.api.CurrencyExchange;
import ru.lionarius.api.currency.CurrencyPair;
import ru.lionarius.impl.plain.PlainCurrencyExchange;
import java.util.*;
import java.util.Set;
class ConcurrentPlainCurrencyExchangeTest extends ConcurrentCurrencyExchangeTest {
@Override

View File

@@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.*;
public abstract class CurrencyExchangeTest {
protected abstract CurrencyExchange createExchange(Set<CurrencyPair> pairs);
protected abstract void shutdownExchange(CurrencyExchange exchange);
private CurrencyExchange exchange;