From 4e69f4d56120c1ad2335b689370e25d2dc1fbe4c Mon Sep 17 00:00:00 2001 From: Mark Struchkov Date: Thu, 23 May 2019 13:26:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BE=D1=81=D0=BC?= =?UTF-8?q?=D1=8B=D1=81=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20Subscribe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- .../distribution/AbstractBasketSubscribe.java | 53 ++++++++++++++++++ .../core/distribution/AccountSubscribe.java | 23 ++++++++ .../core/distribution/EventDistributor.java | 35 +++++------- .../core/distribution/MailSubscriber.java | 55 ++++--------------- .../vkbot/core/sender/MailSenderVk.java | 4 +- 6 files changed, 106 insertions(+), 68 deletions(-) create mode 100644 src/main/java/org/sadtech/vkbot/core/distribution/AbstractBasketSubscribe.java create mode 100644 src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java diff --git a/pom.xml b/pom.xml index ce1a15b..b0b0bd0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.sadtech.vkbot vkbot-core - 0.2.0-RELEASE + 0.2.1-SNAPSHOT jar @@ -23,7 +23,7 @@ - 0.6.0-RELEASE + 0.6.1-SNAPSHOT 0.5.13-SNAPSHOT 1.2.17 diff --git a/src/main/java/org/sadtech/vkbot/core/distribution/AbstractBasketSubscribe.java b/src/main/java/org/sadtech/vkbot/core/distribution/AbstractBasketSubscribe.java new file mode 100644 index 0000000..30947fc --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/distribution/AbstractBasketSubscribe.java @@ -0,0 +1,53 @@ +package org.sadtech.vkbot.core.distribution; + +import java.util.Set; + +public abstract class AbstractBasketSubscribe implements EventSubscribe { + + private Set basketSubscribes; + private AbstractBasketSubscribe prioritySubscribe; + + public Set getBasketSubscribes() { + return basketSubscribes; + } + + public void setBasketSubscribes(Set basketSubscribes) { + this.basketSubscribes = basketSubscribes; + } + + public AbstractBasketSubscribe getPrioritySubscribe() { + return prioritySubscribe; + } + + public void setPrioritySubscribe(AbstractBasketSubscribe prioritySubscribe) { + this.prioritySubscribe = prioritySubscribe; + } + + protected abstract boolean check(S object); + + private boolean goNextSubscribe(S object) { + boolean flag = false; + if (prioritySubscribe != null && prioritySubscribe.check(object)) { + prioritySubscribe.update(object); + flag = true; + } else if (basketSubscribes != null) { + for (AbstractBasketSubscribe basketSubscribe : basketSubscribes) { + if (basketSubscribe.check(object)) { + basketSubscribe.update(object); + } else { + flag = true; + } + } + } + return flag; + } + + @Override + public void update(S object) { + if (!goNextSubscribe(object)) { + processing(object); + } + } + + public abstract void processing(S object); +} diff --git a/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java b/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java new file mode 100644 index 0000000..790b61f --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java @@ -0,0 +1,23 @@ +package org.sadtech.vkbot.core.distribution; + +import com.vk.api.sdk.objects.messages.Message; +import org.sadtech.bot.core.service.AccountService; + +public class AccountSubscribe extends AbstractBasketSubscribe { + + private final AccountService accountService; + + public AccountSubscribe(AccountService accountService) { + this.accountService = accountService; + } + + @Override + protected boolean check(Message userMessage) { + return userMessage.getAttachments().size() > 0 && "Денежный перевод".equals(userMessage.getAttachments().get(0).getLink().getCaption()); + } + + @Override + public void processing(Message object) { + accountService.pay(0); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/distribution/EventDistributor.java b/src/main/java/org/sadtech/vkbot/core/distribution/EventDistributor.java index 051f3bb..5fbc61b 100644 --- a/src/main/java/org/sadtech/vkbot/core/distribution/EventDistributor.java +++ b/src/main/java/org/sadtech/vkbot/core/distribution/EventDistributor.java @@ -4,15 +4,11 @@ import com.google.gson.JsonObject; import org.apache.log4j.Logger; import org.sadtech.bot.core.service.RawEventService; -import java.util.HashMap; -import java.util.Map; - -public class EventDistributor implements Runnable { +public class EventDistributor extends AbstractBasketSubscribe implements Runnable { private static final Logger log = Logger.getLogger(EventDistributor.class); private final RawEventService rawEventService; - private final Map eventDistributionMap = new HashMap<>(); public EventDistributor(RawEventService rawEventService) { this.rawEventService = rawEventService; @@ -21,28 +17,27 @@ public class EventDistributor implements Runnable { public void update() { while (true) { - try { - if (rawEventService.getJsonObjects().peek() != null) { - JsonObject event = rawEventService.getJsonObjects().poll(); - log.info("Главный дистрибьютор отправил событие дальше"); - if (eventDistributionMap.containsKey(event.get("type").getAsString())) { - eventDistributionMap.get(event.get("type").getAsString()).update(event.getAsJsonObject("object")); - } - } - } catch (Exception e) { - log.error(e.getStackTrace()); - break; + if (rawEventService.getJsonObjects().peek() != null) { + JsonObject event = rawEventService.getJsonObjects().poll(); + log.info("Главный дистрибьютор отправил событие дальше"); + super.update(event); } } } - public void setEventDistributionMap(String key, EventSubscribe eventSubscribe) { - this.eventDistributionMap.put(key, eventSubscribe); - } - @Override public void run() { log.info("EventDistributor запущен"); update(); } + + @Override + protected boolean check(JsonObject object) { + return false; + } + + @Override + public void processing(JsonObject object) { + + } } diff --git a/src/main/java/org/sadtech/vkbot/core/distribution/MailSubscriber.java b/src/main/java/org/sadtech/vkbot/core/distribution/MailSubscriber.java index b4aeadf..c582499 100644 --- a/src/main/java/org/sadtech/vkbot/core/distribution/MailSubscriber.java +++ b/src/main/java/org/sadtech/vkbot/core/distribution/MailSubscriber.java @@ -11,68 +11,37 @@ import org.sadtech.bot.core.domain.attachment.Attachment; import org.sadtech.bot.core.domain.attachment.AudioMessage; import org.sadtech.bot.core.service.MailService; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.time.Instant; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.TimeZone; -public class MailSubscriber implements EventSubscribe { +public class MailSubscriber extends AbstractBasketSubscribe { private static final Logger log = Logger.getLogger(MailSubscriber.class); private final MailService mailService; - private Set admins = new HashSet<>(); - private final Map> eventDistributionMap = new HashMap<>(); public MailSubscriber(MailService mailService) { this.mailService = mailService; } - public void setAdmins(Set admins) { - this.admins = admins; - } - - public Set getAdmins() { - return admins; + @Override + protected boolean check(JsonObject object) { + String type = object.get("type").getAsString(); + return "message_new".equals(type); } @Override - public void update(JsonObject object) { - log.info("Дистрибьютор получил событие - сообщение"); + public void processing(JsonObject object) { Gson gson = new Gson(); - Message userMessage = gson.fromJson(object, Message.class); + Message userMessage = gson.fromJson(object.getAsJsonObject("object"), Message.class); log.info(userMessage); - - if (userMessage.getPeerId() > 2000000000) { - if (eventDistributionMap.containsKey("chat")) { - eventDistributionMap.get("chat").update(userMessage); - } - } else { - if (admins.contains(userMessage.getPeerId()) && eventDistributionMap.containsKey("terminal")) { - log.info("Сообщение отправлено в репозиторий команд"); - eventDistributionMap.get("terminal").update(userMessage); - } else { - log.info("Сообщение отправленно на добавление в репозиторий"); - mailService.add(createMaail(userMessage)); - } - } + mailService.add(createMail(userMessage)); } - public byte[] getBytes(InputStream inputStream) throws IOException { - ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); - int bufferSize = 1024; - byte[] buffer = new byte[bufferSize]; - - int len = 0; - while ((len = inputStream.read(buffer)) != -1) { - byteBuffer.write(buffer, 0, len); - } - return byteBuffer.toByteArray(); - } - - private Mail createMaail(Message message) { + private Mail createMail(Message message) { Mail mail = new Mail(); mail.setMessage(message.getText()); mail.setDate(LocalDateTime.ofInstant(Instant.ofEpochSecond(message.getDate()), TimeZone.getDefault().toZoneId())); diff --git a/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java b/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java index 6b3e8d9..09bb80b 100644 --- a/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java +++ b/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java @@ -9,7 +9,7 @@ import com.vk.api.sdk.objects.messages.Keyboard; import com.vk.api.sdk.queries.messages.MessagesSendQuery; import org.apache.log4j.Logger; import org.sadtech.bot.core.domain.BoxAnswer; -import org.sadtech.bot.core.sender.Sent; +import org.sadtech.bot.core.service.sender.Sent; import org.sadtech.vkbot.core.VkConnect; import org.sadtech.vkbot.core.VkInsertData; import org.sadtech.vkbot.core.convert.KeyBoardConvert; @@ -68,8 +68,6 @@ public class MailSenderVk implements Sent { } - - private void sendMessage(MessagesSendQuery messages) { try { messages.execute();