将消息传递方式改为文件传输, 以便于 docker 容器之间传输

This commit is contained in:
flykhan 2023-03-11 18:44:49 +08:00
parent 2e9ab75bdf
commit b313f11eb4
3 changed files with 64 additions and 10 deletions

View File

@ -8,7 +8,12 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID; import java.util.UUID;
import java.util.function.Supplier;
@Component @Component
public class Consumer extends Thread { public class Consumer extends Thread {
@ -41,11 +46,19 @@ public class Consumer extends Thread {
} }
} }
/*
// Code 中的 Bot 类名后面," implements com.kob.botrunningsystem.utils.BotInterface" 之前加上 uid // Code 中的 Bot 类名后面," implements com.kob.botrunningsystem.utils.BotInterface" 之前加上 uid
private String addUid(String code, String uid) { private String addUid(String code, String uid) {
int k = code.indexOf(" implements com.kob.botrunningsystem.utils.BotInterface"); int k = code.indexOf(" implements com.kob.botrunningsystem.utils.BotInterface");
return code.substring(0, k) + uid + code.substring(k); return code.substring(0, k) + uid + code.substring(k);
} }
*/
// Code 中的 Bot 类名后面," implements com.kob.botrunningsystem.utils.BotInterface" 之前加上 uid
private String addUid(String code, String uid) {
int k = code.indexOf(" implements java.util.function.Supplier<Integer>");
return code.substring(0, k) + uid + code.substring(k);
}
@Override @Override
public void run() { public void run() {
@ -56,14 +69,37 @@ public class Consumer extends Thread {
// Reflect 来自 JOOR 依赖: 可以动态的编译 java 代码 // Reflect 来自 JOOR 依赖: 可以动态的编译 java 代码
// 重名类只会编译一遍,为了每次新线程都重新编译, // 重名类只会编译一遍,为了每次新线程都重新编译,
// 在类名后加一个随机字符串 UUID(每次返回一个不一样的ID) // 在类名后加一个随机字符串 UUID(每次返回一个不一样的ID)
/*
BotInterface botInterface = Reflect.compile( BotInterface botInterface = Reflect.compile(
"com.kob.botrunningsystem.utils.Bot" + uid, "com.kob.botrunningsystem.utils.Bot" + uid,
addUid(bot.getBotCode(), uid) addUid(bot.getBotCode(), uid)
).create().get(); // compile(编译) 完这个类之后 create(创建) 一个类, get(获取) 到这个类 ).create().get(); // compile(编译) 完这个类之后 create(创建) 一个类, get(获取) 到这个类
*/
// 替换接口类型:修改为文件传输形式
Supplier<Integer> botInterface = Reflect.compile(
"com.kob.botrunningsystem.utils.Bot" + uid,
addUid(bot.getBotCode(), uid)
).create().get(); // compile(编译) 完这个类之后 create(创建) 一个类, get(获取) 到这个类
// 将微服务之间的数据包通过文件传输,便于在 docker 容器之间进行数据交互
File file = new File("input.txt"); // 创建输出文件
try(PrintWriter fileOut = new PrintWriter(file)){
fileOut.println(bot.getInput()); // bot.getInput() 输出出去
fileOut.flush(); // 清空缓冲区
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
/*
// 存储获取到的方向 // 存储获取到的方向
Integer direction = botInterface.nextMove(bot.getInput()); Integer direction = botInterface.nextMove(bot.getInput());
System.out.println("move-direction: " + bot.getUserId() + " " + direction); // 根据动态编译结果返回输入 System.out.println("move-direction: " + bot.getUserId() + " " + direction); // 根据动态编译结果返回输入
*/
// 同步修改为文件传输
Integer direction = botInterface.get();
System.out.println("move-direction: " + bot.getUserId() + " " + direction); // 根据动态编译结果返回输入
// 打包信息 // 打包信息
MultiValueMap<String, String> data = new LinkedMultiValueMap<>(); MultiValueMap<String, String> data = new LinkedMultiValueMap<>();

View File

@ -1,12 +1,18 @@
// Bot 自动化代码示例 // Bot 自动化代码示例: 用于写前端 Bot 代码的辅助类, 在后端不参与运行
package com.kob.botrunningsystem.utils; package com.kob.botrunningsystem.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Scanner;
public class Bot implements com.kob.botrunningsystem.utils.BotInterface { //public class Bot implements com.kob.botrunningsystem.utils.BotInterface {
// 修改接口
public class Bot implements java.util.function.Supplier<Integer> {
static class Cell { static class Cell {
public int x, y; public int x, y;
public Cell(int x, int y) { public Cell(int x, int y) {
this.x = x; this.x = x;
this.y = y; this.y = y;
@ -38,7 +44,7 @@ public class Bot implements com.kob.botrunningsystem.utils.BotInterface {
return res; return res;
} }
@Override // @Override
public Integer nextMove(String input) { public Integer nextMove(String input) {
String[] strs = input.split("#"); String[] strs = input.split("#");
int rows = 18; int rows = 18;
@ -72,4 +78,15 @@ public class Bot implements com.kob.botrunningsystem.utils.BotInterface {
return 0; return 0;
} }
@Override
public Integer get() {
File file = new File("input.txt");
try {
Scanner sc = new Scanner(file);
return nextMove(sc.next()); // 读入字符串
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
} }

1
backendcloud/input.txt Normal file
View File

@ -0,0 +1 @@
11111111111111100000000000011100001001100110010010000101110000000000011100010000000110000000000001100000001000111000000000001110100001001001100110010000111000000000000111111111111111#1#12#(22222300303221221221)#11#1#(00000100000111111111)