From 7a7ca0034e753ff0aa394dc112c4aeacc4c19ecf Mon Sep 17 00:00:00 2001 From: welsir <1824379011@qq.com> Date: Mon, 25 Sep 2023 15:44:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E6=A8=A1=E5=9D=97=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=AF=B9=E5=88=87=E7=89=87=E7=9A=84=E6=8E=A5=E5=8F=97?= =?UTF-8?q?=E5=92=8C=E5=AF=B9=E5=BA=94=E8=B4=A6=E5=8F=B7=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E5=B8=83=EF=BC=8C=E6=9C=AA=E7=BB=8F=E6=95=B4?= =?UTF-8?q?=E7=90=86=E5=92=8C=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chopperbot-account/pom.xml | 6 ++ .../main/java/org/example/api/AccountApi.java | 6 +- .../example/core/account/AccountCenter.java | 1 + .../core/account/Impl/AccountOperator.java | 9 +- .../org/example/core/exchange/Exchange.java | 33 +++++++- .../example/core/guard/VideoPushGuard.java | 80 +++--------------- .../example/core/mapper/AccountMapper.java | 6 +- .../java/org/example/pojo/AccountType.java | 4 +- .../java/org/example/pojo/VideoQueue.java | 25 ++---- database.db | Bin 77824 -> 77824 bytes 10 files changed, 75 insertions(+), 95 deletions(-) diff --git a/chopperbot-account/pom.xml b/chopperbot-account/pom.xml index c857d12..6fef77a 100644 --- a/chopperbot-account/pom.xml +++ b/chopperbot-account/pom.xml @@ -74,5 +74,11 @@ 20210307 compile + + org.example + chopperbot-publish + 1.0-SNAPSHOT + compile + diff --git a/chopperbot-account/src/main/java/org/example/api/AccountApi.java b/chopperbot-account/src/main/java/org/example/api/AccountApi.java index 33914d9..547c36a 100644 --- a/chopperbot-account/src/main/java/org/example/api/AccountApi.java +++ b/chopperbot-account/src/main/java/org/example/api/AccountApi.java @@ -2,8 +2,6 @@ package org.example.api; import org.example.core.account.Impl.AccountOperator; import org.example.pojo.Account; -import org.springframework.stereotype.Controller; -import org.springframework.util.Assert; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -31,4 +29,8 @@ public class AccountApi { return accountOperator.getAllUsers(platformId); } + @PostMapping("/editUser") + public void editUser(@RequestBody Account account){ + accountOperator.editUser(account); + } } diff --git a/chopperbot-account/src/main/java/org/example/core/account/AccountCenter.java b/chopperbot-account/src/main/java/org/example/core/account/AccountCenter.java index e2ba001..866eb83 100644 --- a/chopperbot-account/src/main/java/org/example/core/account/AccountCenter.java +++ b/chopperbot-account/src/main/java/org/example/core/account/AccountCenter.java @@ -15,4 +15,5 @@ public interface AccountCenter { List getAllUsers(int id); + void editUser(Account account); } diff --git a/chopperbot-account/src/main/java/org/example/core/account/Impl/AccountOperator.java b/chopperbot-account/src/main/java/org/example/core/account/Impl/AccountOperator.java index 36da592..7ce679c 100644 --- a/chopperbot-account/src/main/java/org/example/core/account/Impl/AccountOperator.java +++ b/chopperbot-account/src/main/java/org/example/core/account/Impl/AccountOperator.java @@ -5,6 +5,7 @@ import org.example.core.factory.PlatformFactory; import org.example.core.mapper.AccountMapper; import org.example.pojo.Account; import org.springframework.stereotype.Component; +import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.List; @@ -26,6 +27,12 @@ public class AccountOperator implements AccountCenter { @Override public List getAllUsers(int id) { - return accountMapper.getUserByPlatform(id); + return accountMapper.selectUserByPlatform(id); + } + + @Override + public void editUser(Account account) { + int i = accountMapper.updateById(account); + Assert.isTrue(i==1,"Update user fail!Please try again or check the wrong!"); } } diff --git a/chopperbot-account/src/main/java/org/example/core/exchange/Exchange.java b/chopperbot-account/src/main/java/org/example/core/exchange/Exchange.java index a6d2b44..6b67604 100644 --- a/chopperbot-account/src/main/java/org/example/core/exchange/Exchange.java +++ b/chopperbot-account/src/main/java/org/example/core/exchange/Exchange.java @@ -1,8 +1,13 @@ package org.example.core.exchange; +import org.example.api.BilibiliPublishApi; import org.example.pojo.VideoQueue; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * @Description @@ -12,7 +17,30 @@ import java.util.*; public class Exchange { private final Map> bindings = new HashMap<>(); + ScheduledExecutorService task; public Exchange() { + task = Executors.newScheduledThreadPool(1); + } + + public void startListening() { + // 每5秒轮询一次消息队列 + // 检查消息队列并提取消息 + task.scheduleAtFixedRate(this::checkAndProcessMessages, 0, 5, TimeUnit.SECONDS); + } + + private void checkAndProcessMessages() { + // 在这里检查消息队列,提取消息并调用publish方法 + for (String routingKey : bindings.keySet()) { + if (bindings.containsKey(routingKey)) { + List queues = bindings.get(routingKey); + for (VideoQueue queue : queues) { + Object message = queue.dequeue(); + if (message != null) { + BilibiliPublishApi.PublishVideo("xxx","xxx",queue.getCookies().toString(),"xxx"); + } + } + } + } } public void bind(VideoQueue queue, String routingKey) { @@ -23,10 +51,7 @@ public class Exchange { public void publish(String routingKey, Object message) { if (this.bindings.containsKey(routingKey)) { List queues = this.bindings.get(routingKey); - Iterator var4 = queues.iterator(); - - while(var4.hasNext()) { - VideoQueue queue = (VideoQueue)var4.next(); + for (VideoQueue queue : queues) { queue.enqueue(message); } } diff --git a/chopperbot-account/src/main/java/org/example/core/guard/VideoPushGuard.java b/chopperbot-account/src/main/java/org/example/core/guard/VideoPushGuard.java index 27efd43..77e4040 100644 --- a/chopperbot-account/src/main/java/org/example/core/guard/VideoPushGuard.java +++ b/chopperbot-account/src/main/java/org/example/core/guard/VideoPushGuard.java @@ -1,30 +1,15 @@ package org.example.core.guard; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.example.pojo.VideoType; import org.example.core.exchange.Exchange; import org.example.core.mapper.AccountMapper; -import org.example.core.mapper.AccountTypeMapper; import org.example.plugin.GuardPlugin; -import org.example.pojo.Account; -import org.example.pojo.AccountType; -import org.example.pojo.Video; -import org.example.pojo.VideoQueue; +import org.example.pojo.*; import javax.annotation.Resource; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * @Description @@ -34,13 +19,10 @@ import java.util.regex.Pattern; public class VideoPushGuard extends GuardPlugin { private Exchange exchange; - private static final String ACCOUNT_PATH = "config/Account/account.json"; private BlockingQueue receiveVideo; @Resource private AccountMapper accountMapper; - @Resource - private AccountTypeMapper accountTypeMapper; public VideoPushGuard(String module, String pluginName, List needPlugins, boolean isAutoStart) { @@ -49,45 +31,17 @@ public class VideoPushGuard extends GuardPlugin { @Override public boolean init() { + //两件事情 一注册队列;二启动队列监听 exchange = new Exchange(); - try { - - List accountList = accountMapper.selectList(null); - - for (Account account : accountList) { - List accountTypes = accountTypeMapper.selectList(new QueryWrapper().eq("uid",account.getId())); - + List accountList = accountMapper.selectList(null); + for (Account account : accountList) { + List accountTypes = accountMapper.selectTypeByUid(account.getUid()); + for (AccountType accountType : accountTypes) { + exchange.bind(new VideoQueue(PlatformType.getPlatform(account.getPlatformId()) + "-" + account.getUid(), account.isCompleteMatch(),account.getCookie()), accountType.getType()); } - - - String jsonData = Files.readString(Path.of(ACCOUNT_PATH)); - JSONObject jsonObject = JSON.parseObject(jsonData); - - for (Map.Entry platformEntry : jsonObject.entrySet()) { - String platform = platformEntry.getKey(); - JSONObject platformData = (JSONObject) platformEntry.getValue(); - - System.out.println("Platform: " + platform); - System.out.println("platformData: " + platformData); - - String types = getStringValueOrDefault(platformData, "type", ""); - boolean isMatch = getBooleanValueOrDefault(platformData, "isMatch", false); - - Pattern pattern = Pattern.compile("\"([^\"]+)\""); - Matcher matcher = pattern.matcher(types); - - while (matcher.find()) { - String type = matcher.group(1); - for (String queueName : platformData.keySet()) { - exchange.bind(new VideoQueue(platform + "-" + queueName, isMatch), type); - } - } - } - receiveVideo = new ArrayBlockingQueue<>(1024); - return true; - } catch (IOException e) { - throw new RuntimeException(e); } + receiveVideo = new ArrayBlockingQueue<>(1024); + return true; } @Override @@ -95,13 +49,12 @@ public class VideoPushGuard extends GuardPlugin { try { Object videoMsg = receiveVideo.poll(5, TimeUnit.SECONDS); if (videoMsg instanceof Video) { - Video video = (Video)videoMsg; - Iterator iterator = video.getVideoType().iterator(); - while(iterator.hasNext()) { - VideoType videoType = iterator.next(); + Video video = (Video) videoMsg; + for (VideoType videoType : video.getVideoType()) { exchange.publish(videoType.toString(), video.getMessage()); } } + exchange.startListening(); } catch (InterruptedException e) { throw new RuntimeException(e); } @@ -110,13 +63,4 @@ public class VideoPushGuard extends GuardPlugin { public void sendVideo(Object msg) { receiveVideo.offer(msg); } - private String getStringValueOrDefault(JSONObject jsonObject, String key, String defaultValue) { - Object value = jsonObject.get(key); - return value != null ? value.toString() : defaultValue; - } - - private boolean getBooleanValueOrDefault(JSONObject jsonObject, String key, boolean defaultValue) { - Object value = jsonObject.get(key); - return value != null ? (boolean) value : defaultValue; - } } diff --git a/chopperbot-account/src/main/java/org/example/core/mapper/AccountMapper.java b/chopperbot-account/src/main/java/org/example/core/mapper/AccountMapper.java index ef3dc42..1794a64 100644 --- a/chopperbot-account/src/main/java/org/example/core/mapper/AccountMapper.java +++ b/chopperbot-account/src/main/java/org/example/core/mapper/AccountMapper.java @@ -3,6 +3,7 @@ package org.example.core.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Select; import org.example.pojo.Account; +import org.example.pojo.AccountType; import java.util.List; @@ -14,6 +15,9 @@ import java.util.List; public interface AccountMapper extends BaseMapper { @Select("select * from account a join platform pf on a.platformId=pf.id where pf.id = #{id}") - List getUserByPlatform(int id); + List selectUserByPlatform(int id); + + @Select("select * from account_type where uid=#{id}") + List selectTypeByUid(Long id); } diff --git a/chopperbot-account/src/main/java/org/example/pojo/AccountType.java b/chopperbot-account/src/main/java/org/example/pojo/AccountType.java index a5b4a07..3d68ef8 100644 --- a/chopperbot-account/src/main/java/org/example/pojo/AccountType.java +++ b/chopperbot-account/src/main/java/org/example/pojo/AccountType.java @@ -18,6 +18,6 @@ import java.util.List; @TableName(value = "account_type") public class AccountType { - private String uid; - private List videoTypes; + private Long uid; + private String type; } diff --git a/chopperbot-account/src/main/java/org/example/pojo/VideoQueue.java b/chopperbot-account/src/main/java/org/example/pojo/VideoQueue.java index 6410d52..19294dc 100644 --- a/chopperbot-account/src/main/java/org/example/pojo/VideoQueue.java +++ b/chopperbot-account/src/main/java/org/example/pojo/VideoQueue.java @@ -1,35 +1,30 @@ package org.example.pojo; +import lombok.Data; +import org.openqa.selenium.Cookie; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @Description * @Author welsir * @Date 2023/9/4 22:09 */ +@Data public class VideoQueue { private String name; private List messages; - private List type; private boolean isStrongMatch; + private Set cookies; - public List getType() { - return this.type; - } - - public void setType(List type) { - this.type = type; - } - - public VideoQueue() { - } - - public VideoQueue(String name, boolean isStrongMatch) { + public VideoQueue(String name, boolean isStrongMatch,Set cookies) { this.name = name; this.messages = new ArrayList<>(); this.isStrongMatch = isStrongMatch; + this.cookies = cookies; } public void enqueue(Object message) { @@ -44,10 +39,6 @@ public class VideoQueue { return this.messages.isEmpty(); } - public boolean shouldReceiveMessage(List videoType) { - return (new HashSet(videoType)).equals(new HashSet(this.type)); - } - public String toString() { return "[name:" + this.name + ",message:{" + this.messages + "},isMatch:" + this.isStrongMatch; } diff --git a/database.db b/database.db index 95c79f4524902011b7b2ef97cde1fc806ecb843a..c9b8dc515ddc2280708397a7bec901437f8a82b6 100644 GIT binary patch delta 203 zcmZp8z|!!5WrDPzDgy(9FcdQbY5j>h#*C^H6I6KE6WP}A^s-s82CzNftSBJNvUxGf zbVg40{R~C=`izbIlh?ASPi|zDS2k8s(BR@!D$Pt$;`H5P--bFfW5z$!3VfmMF8F1w}(`+kO#;`;iGP1YreNja&-g*i#_o7b>eGcqb|e!=d? z!oqWqL1(fRk0)zMWkIUI(Av#=~N+1y>P7sevldoX%L3UM+#N_1s(!3JZ W<_|pEKkzWh3p28A7ZhOpzz+cK