From a786dee6f61956a12b77e0118ad151d1b376fbaa Mon Sep 17 00:00:00 2001 From: AlexeyRogS Date: Wed, 4 Mar 2020 23:56:25 +0300 Subject: [PATCH] Lecture05 --- .../mm/controller/ConnectionController.java | 24 ++++++++++++-- .../ru/atom/mm/service/GameRepository.java | 1 + .../java/ru/atom/mm/service/MatchMaker.java | 1 + .../java/ru/atom/thread/join/BombTest.java | 2 +- .../atom/thread/practice/EventProcessor.java | 31 +++++++++++++++++-- .../thread/practice/EventProcessorTest.java | 1 - .../ru/atom/thread/practice/EventQueue.java | 3 ++ 7 files changed, 55 insertions(+), 8 deletions(-) diff --git a/lecture05/src/main/java/ru/atom/mm/controller/ConnectionController.java b/lecture05/src/main/java/ru/atom/mm/controller/ConnectionController.java index 17cf04d52a..8440f4a06a 100644 --- a/lecture05/src/main/java/ru/atom/mm/controller/ConnectionController.java +++ b/lecture05/src/main/java/ru/atom/mm/controller/ConnectionController.java @@ -1,18 +1,23 @@ package ru.atom.mm.controller; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import ru.atom.mm.model.Connection; import ru.atom.mm.service.ConnectionQueue; +import ru.atom.mm.service.GameRepository; + +import java.util.ArrayList; +import java.util.List; @Controller @@ -24,6 +29,8 @@ public class ConnectionController { @Autowired private ConnectionQueue connectionQueue; + private ArrayList allConnections = new ArrayList(); + /** * curl test * @@ -40,6 +47,7 @@ public void connect(@RequestParam("id") long id, log.info("New connection id={} name={}", id, name); connectionQueue.getQueue().offer(new Connection(id, name)); + allConnections.add(new Connection(id, name)); } /** @@ -47,8 +55,18 @@ public void connect(@RequestParam("id") long id, * * curl -i localhost:8080/connection/list' */ + @RequestMapping( + path = "list", + method = RequestMethod.GET, + produces = MediaType.TEXT_PLAIN_VALUE) + @ResponseBody public String list() { - throw new UnsupportedOperationException(); + log.info("Connection Controller list requested"); + if (allConnections.isEmpty()) { + return "[]"; + } else { + return allConnections.toString(); + } } diff --git a/lecture05/src/main/java/ru/atom/mm/service/GameRepository.java b/lecture05/src/main/java/ru/atom/mm/service/GameRepository.java index bfdf8b6175..5e53192efb 100644 --- a/lecture05/src/main/java/ru/atom/mm/service/GameRepository.java +++ b/lecture05/src/main/java/ru/atom/mm/service/GameRepository.java @@ -1,5 +1,6 @@ package ru.atom.mm.service; +import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; import ru.atom.mm.model.GameSession; diff --git a/lecture05/src/main/java/ru/atom/mm/service/MatchMaker.java b/lecture05/src/main/java/ru/atom/mm/service/MatchMaker.java index 03d2980ea8..538d771d10 100644 --- a/lecture05/src/main/java/ru/atom/mm/service/MatchMaker.java +++ b/lecture05/src/main/java/ru/atom/mm/service/MatchMaker.java @@ -41,6 +41,7 @@ public void run() { candidates.add( connectionQueue.getQueue().poll(10_000, TimeUnit.SECONDS) ); + } catch (InterruptedException e) { log.warn("Timeout reached"); } diff --git a/lecture05/src/test/java/ru/atom/thread/join/BombTest.java b/lecture05/src/test/java/ru/atom/thread/join/BombTest.java index 639c8acd9a..0d214dc169 100644 --- a/lecture05/src/test/java/ru/atom/thread/join/BombTest.java +++ b/lecture05/src/test/java/ru/atom/thread/join/BombTest.java @@ -8,7 +8,7 @@ /** * Created by sergey on 3/14/17. */ -@Ignore + public class BombTest { private static final Logger log = LogManager.getLogger(BombTest.class); diff --git a/lecture05/src/test/java/ru/atom/thread/practice/EventProcessor.java b/lecture05/src/test/java/ru/atom/thread/practice/EventProcessor.java index 5c09da31fb..66e78ee479 100644 --- a/lecture05/src/test/java/ru/atom/thread/practice/EventProcessor.java +++ b/lecture05/src/test/java/ru/atom/thread/practice/EventProcessor.java @@ -1,5 +1,7 @@ package ru.atom.thread.practice; +import org.springframework.beans.factory.annotation.Autowired; + import java.util.List; /** @@ -8,14 +10,37 @@ */ public class EventProcessor { public static void produceEvents(List eventProducers) { - throw new UnsupportedOperationException();//TODO eventProducers here + for (EventProducer producer : eventProducers) { + int index = producer.getClass().getName().lastIndexOf('.') + 1; + if (producer.getClass().getName().substring(index).equals("GoodEventProducer")) { + GoodEventProducer currProducer = (GoodEventProducer) producer; + currProducer.run(); + } else if (producer.getClass().getName().substring(index).equals("BadEventProducer")) { + BadEventProducer currProducer = (BadEventProducer) producer; + currProducer.run(); + } else { + throw new Error("AnimeError"); + } + } } public static long countTotalNumberOfGoodEvents() { - throw new UnsupportedOperationException();//TODO + long result = 0; + for (Event event : EventQueue.getInstance()) { + if (event.getEventType() == Event.EventType.GOOD) { + result += 1; + } + } + return result; } public static long countTotalNumberOfBadEvents() { - throw new UnsupportedOperationException();//TODO + long result = 0; + for (Event event : EventQueue.getInstance()) { + if (event.getEventType() == Event.EventType.BAD) { + result += 1; + } + } + return result; } } diff --git a/lecture05/src/test/java/ru/atom/thread/practice/EventProcessorTest.java b/lecture05/src/test/java/ru/atom/thread/practice/EventProcessorTest.java index 9913f183e0..96b10171d3 100644 --- a/lecture05/src/test/java/ru/atom/thread/practice/EventProcessorTest.java +++ b/lecture05/src/test/java/ru/atom/thread/practice/EventProcessorTest.java @@ -10,7 +10,6 @@ * @author apomosov * @since 15.03.17 */ -@Ignore public class EventProcessorTest { @Test public void process() { diff --git a/lecture05/src/test/java/ru/atom/thread/practice/EventQueue.java b/lecture05/src/test/java/ru/atom/thread/practice/EventQueue.java index a58f1dc1fe..da91afe99d 100644 --- a/lecture05/src/test/java/ru/atom/thread/practice/EventQueue.java +++ b/lecture05/src/test/java/ru/atom/thread/practice/EventQueue.java @@ -1,5 +1,8 @@ package ru.atom.thread.practice; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resources; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue;