From bdeb5c7311fa833707b842326194b07bf0db5b98 Mon Sep 17 00:00:00 2001 From: gzwz <568602044@qq.com> Date: Wed, 12 Jul 2023 18:05:13 +0800 Subject: [PATCH 1/7] tcp --- src/main/resources/db/v-mock.sqlite | Bin 192512 -> 192512 bytes src/main/resources/static/sys/js/vmock.js | 10 +++ .../templates/system/url/addtcp.html | 71 ++++++++++++++++++ .../resources/templates/system/url/url.html | 3 + 4 files changed, 84 insertions(+) create mode 100644 src/main/resources/templates/system/url/addtcp.html diff --git a/src/main/resources/db/v-mock.sqlite b/src/main/resources/db/v-mock.sqlite index 263484667086670629a481b31167004307808830..92823ac60d1dc61951572e879fe074f79b3874ec 100644 GIT binary patch delta 273 zcmZp8z}@hGdxA9Ms);hrjH@;#Eac~8U|?Y6cVpmp+sq~4%@+>!5C{=Hyl8BJd^#+EQ(Y-W;VnP^~^mX?-mWSL}a zVQiFYk(!unW|U|KFULOx`3nrM}UeQ54w*ReUy>8d#WGnp#+xn;52=rI?$h zrWhKf7@8X!C8eaA8(Eqd8l{<-Tbd?Xnx-Y2B$^l+S{msYnpx->>lqm^HeXnsq{Emu a@xA0S2pi<`$=Btqn-tm<7?&w9T>t>aJ60nA delta 329 zcmZp8z}@hGdxA9MvWYUzjLSAAEad0p7hz!J3uWR9-OMH6%@^Bf#VE=kuFc7-%*pF3 z$-$w`%E8LX+Q?m&o1dKhVq5F;UCW=ZTljoJ+tZ0N42>;ez|_pb%+N3;*)%mR#n8kc zCC%JC&D0{rG%?jY*}^2vEG^k2(Zq1_Cb=o~7AdI~hUON@$wnpy1{O)?76zuK28?;1 z8>Mm?^M2&HS1~X!%oG>r08$JP7cj6gvhr5IL8_ryN}7SOnTdg+nW3qXnNd=TMM_c< z(5{qJBa1Xki$p`CG!p|WWN65k_eFXl(3 + + + + + + + +
+
+
+ +
+ + ※ URL路径以/开始,如果有Path传参情况,请用占位符{path}占位 +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/system/url/url.html b/src/main/resources/templates/system/url/url.html index 32f7722..95e3da5 100644 --- a/src/main/resources/templates/system/url/url.html +++ b/src/main/resources/templates/system/url/url.html @@ -41,6 +41,9 @@ 添加 + + 添加TCP + 修改 -- Gitee From 10a56a5e2d10564f6bc99b2737a7e147e1e37575 Mon Sep 17 00:00:00 2001 From: gzwz <568602044@qq.com> Date: Thu, 13 Jul 2023 01:14:40 +0800 Subject: [PATCH 2/7] tcp add del query --- .../vmock/biz/controller/UrlController.java | 26 +++++ src/main/java/com/vmock/biz/entity/Url.java | 12 +++ .../com/vmock/biz/enums/ProtocolTypeEnum.java | 31 ++++++ .../java/com/vmock/biz/mapper/UrlMapper.java | 2 + .../com/vmock/biz/service/IUrlService.java | 2 + .../biz/service/impl/UrlServiceImpl.java | 30 ++++-- src/main/java/com/vmock/biz/tcp/TcpConn.java | 92 ++++++++++++++++++ .../java/com/vmock/biz/tcp/TcpServer.java | 53 ++++++++++ .../vmock/biz/tcp/TcpServerStatusEnum.java | 21 ++++ src/main/resources/db/v-mock.sqlite | Bin 192512 -> 192512 bytes src/main/resources/static/sys/js/vmock.js | 11 ++- .../templates/system/log/requestdetail.html | 6 +- .../resources/templates/system/url/add.html | 1 + .../templates/system/url/addtcp.html | 14 ++- .../resources/templates/system/url/url.html | 12 ++- 15 files changed, 297 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java create mode 100644 src/main/java/com/vmock/biz/tcp/TcpConn.java create mode 100644 src/main/java/com/vmock/biz/tcp/TcpServer.java create mode 100644 src/main/java/com/vmock/biz/tcp/TcpServerStatusEnum.java diff --git a/src/main/java/com/vmock/biz/controller/UrlController.java b/src/main/java/com/vmock/biz/controller/UrlController.java index e866770..e64d9fc 100644 --- a/src/main/java/com/vmock/biz/controller/UrlController.java +++ b/src/main/java/com/vmock/biz/controller/UrlController.java @@ -5,6 +5,7 @@ import com.vmock.base.vo.Result; import com.vmock.base.vo.TableDataVo; import com.vmock.biz.entity.Url; import com.vmock.biz.service.IUrlService; +import com.vmock.biz.tcp.TcpServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -27,6 +28,8 @@ public class UrlController extends BaseController { @Autowired private IUrlService mockUrlService; + @Autowired + private TcpServer tcpServer; @GetMapping public String url() { @@ -66,6 +69,7 @@ public class UrlController extends BaseController { return PREFIX + "/add"; } + /** * 新增保存url路径 */ @@ -75,6 +79,27 @@ public class UrlController extends BaseController { return create(mockUrlService.insertMockUrl(mockUrl)); } + + /** + * 新增tcp路径 + */ + @GetMapping("/addtcp") + public String addTcp() { + return PREFIX + "/addtcp"; + } + + + /** + * 新增保存url路径 + */ + @PostMapping("/addtcp") + @ResponseBody + public Result addTcpSave(Url mockUrl) { + Result result = create(mockUrlService.insertMockUrl(mockUrl)); + tcpServer.addServer(mockUrl); + return result; + } + /** * 修改url路径 */ @@ -102,6 +127,7 @@ public class UrlController extends BaseController { @DeleteMapping @ResponseBody public Result remove(String ids) { + tcpServer.removeServer(ids); return create(mockUrlService.deleteMockUrlByIds(ids)); } diff --git a/src/main/java/com/vmock/biz/entity/Url.java b/src/main/java/com/vmock/biz/entity/Url.java index 84b6d35..61401c7 100644 --- a/src/main/java/com/vmock/biz/entity/Url.java +++ b/src/main/java/com/vmock/biz/entity/Url.java @@ -28,6 +28,18 @@ public class Url extends BaseEntity { @Excel(name = "url路径,path传参位置用{path}占位") private String url; + /** + * url路径,path传参位置用{path}占位 + */ + @Excel(name = "url路径,path传参位置用{path}占位") + private Integer port; + + /** + * url名称 + */ + @Excel(name = "url名称") + private String type; + /** * url名称 */ diff --git a/src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java b/src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java new file mode 100644 index 0000000..56ef25e --- /dev/null +++ b/src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java @@ -0,0 +1,31 @@ +package com.vmock.biz.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 协议类型枚举 + * + * @author wlz + * @since 2023年7月12日22:53:13 + */ +@Getter +@AllArgsConstructor +public enum ProtocolTypeEnum { + + /** + * 普通用户 + */ + TCP("tcp"), + + /** + * admin + */ + HTTP("http"); + + /** + * 类型值 + */ + private String code; + +} diff --git a/src/main/java/com/vmock/biz/mapper/UrlMapper.java b/src/main/java/com/vmock/biz/mapper/UrlMapper.java index 6e02158..d9f15ac 100644 --- a/src/main/java/com/vmock/biz/mapper/UrlMapper.java +++ b/src/main/java/com/vmock/biz/mapper/UrlMapper.java @@ -11,4 +11,6 @@ import com.vmock.biz.entity.Url; */ public interface UrlMapper extends BaseMapper { + + } diff --git a/src/main/java/com/vmock/biz/service/IUrlService.java b/src/main/java/com/vmock/biz/service/IUrlService.java index bfd2aa5..21c06f9 100644 --- a/src/main/java/com/vmock/biz/service/IUrlService.java +++ b/src/main/java/com/vmock/biz/service/IUrlService.java @@ -102,4 +102,6 @@ public interface IUrlService extends IService { * @param type 目标返回类型 */ void changeResponseType(Long urlId, Integer type); + + Url selectOneUrlById(String ids); } diff --git a/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java b/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java index 764b897..bb851d1 100644 --- a/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java +++ b/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java @@ -8,6 +8,7 @@ import com.vmock.base.constant.CommonConst; import com.vmock.base.utils.DataBaseUtils; import com.vmock.biz.entity.Url; import com.vmock.biz.entity.UrlLogic; +import com.vmock.biz.enums.ProtocolTypeEnum; import com.vmock.biz.mapper.UrlMapper; import com.vmock.biz.service.IUrlLogicService; import com.vmock.biz.service.IUrlService; @@ -92,13 +93,23 @@ public class UrlServiceImpl extends ServiceImpl implements IUrlS @Transactional(rollbackFor = Exception.class) @Override public boolean insertMockUrl(Url mockUrl) { - // url format - String url = this.formatUrlStr(mockUrl.getUrl()); - // logic insert - String urlLogic = this.insertUrlLogic(url); - // 保存转换后的logic - mockUrl.setLogic(urlLogic); - return this.save(mockUrl); + + if (ProtocolTypeEnum.HTTP.getCode().equals(mockUrl.getType())){ + // url format + String url = this.formatUrlStr(mockUrl.getUrl()); + // logic insert + String urlLogic = this.insertUrlLogic(url); + // 保存转换后的logic + mockUrl.setLogic(urlLogic); + return this.save(mockUrl); + }else if (ProtocolTypeEnum.TCP.getCode().equals(mockUrl.getType())){ + Integer port = mockUrl.getPort(); + + System.out.println("port = "+port); + return this.save(mockUrl); + }else { + return false; + } } /** @@ -206,6 +217,11 @@ public class UrlServiceImpl extends ServiceImpl implements IUrlS this.updateById(urlEntity); } + @Override + public Url selectOneUrlById(String id) { + return this.getOne(Wrappers.lambdaQuery().eq(Url::getUrlId, id)); + } + /** * 修改url路径 * diff --git a/src/main/java/com/vmock/biz/tcp/TcpConn.java b/src/main/java/com/vmock/biz/tcp/TcpConn.java new file mode 100644 index 0000000..1f57b2d --- /dev/null +++ b/src/main/java/com/vmock/biz/tcp/TcpConn.java @@ -0,0 +1,92 @@ +package com.vmock.biz.tcp; + +import com.vmock.biz.entity.Url; +import lombok.Getter; +import lombok.Setter; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +//@Component +//@Scope("prototype") +@Getter +@Setter +public class TcpConn { + + + private Integer port; + + private TcpServerStatusEnum status; + + private ServerSocket serverSocket ; + + ExecutorService executorService = Executors.newFixedThreadPool(5); + + private Thread masterThread ; + +// private Executors + + public TcpConn(Url item) { + try { + serverSocket = new ServerSocket(item.getPort()); + status = TcpServerStatusEnum.RUNING; + } catch (IOException e) { + System.out.println(item.getPort() +" 启动失败: "+e.getMessage()); +// throw new RuntimeException(e); + return; + } + masterThread = new Thread(new TcpMaster(serverSocket,item)); + masterThread.start(); + System.out.println(item.getPort()+" 服务启动 success thread = "+masterThread.getName()); + } + + + private class TcpMaster implements Runnable { + ServerSocket serverSocket; + Url item; + public TcpMaster(ServerSocket serverSocket, Url item) { + this.serverSocket = serverSocket; + this.item = item; + } + + @Override + public void run() { + while (status.equals(TcpServerStatusEnum.RUNING)){ + try { + Socket client = serverSocket.accept(); + executorService.submit(new tcpWorker(client)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + System.out.println(item.getPort()+"服务停止:"+status.getStatus()); + + } + } + + + private static class tcpWorker implements Runnable { + + private Socket client; + public tcpWorker(Socket client) { + this.client = client; + } + + @Override + public void run() { + System.out.println(client.getRemoteSocketAddress().toString()); + try { + OutputStream outputStream = client.getOutputStream(); + outputStream.write("hello world!".getBytes()); + outputStream.flush(); + client.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/src/main/java/com/vmock/biz/tcp/TcpServer.java b/src/main/java/com/vmock/biz/tcp/TcpServer.java new file mode 100644 index 0000000..43795d8 --- /dev/null +++ b/src/main/java/com/vmock/biz/tcp/TcpServer.java @@ -0,0 +1,53 @@ +package com.vmock.biz.tcp; + +import com.vmock.biz.entity.Url; +import com.vmock.biz.enums.ProtocolTypeEnum; +import com.vmock.biz.service.IUrlService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +@Component +public class TcpServer { + + private static ConcurrentMap serverMap = new ConcurrentHashMap(10) ; + + @Autowired + private IUrlService mockUrlService; + + @PostConstruct + public void init(){ + List urls = mockUrlService.selectMockUrlList(new Url()); + urls.stream().filter(item->(item.getType().equals(ProtocolTypeEnum.TCP.getCode()))).forEach((item)->{ + serverMap.put(item.getPort(),new TcpConn(item)); + }); + System.out.println("TCP server num = "+ serverMap.size()); + } + + public void removeServer(String ids) { + Url url = mockUrlService.selectOneUrlById(ids); + if (null != url){ + TcpConn tcpConn = serverMap.get(url.getPort()); + tcpConn.setStatus(TcpServerStatusEnum.STOP); + serverMap.remove(url.getPort()); + try { + tcpConn.getServerSocket().close(); + System.out.println(url.getPort()+" 服务移出!"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + public void addServer(Url item) { + if (null != item){ + serverMap.put(item.getPort(),new TcpConn(item)); + } + } +} diff --git a/src/main/java/com/vmock/biz/tcp/TcpServerStatusEnum.java b/src/main/java/com/vmock/biz/tcp/TcpServerStatusEnum.java new file mode 100644 index 0000000..a23feea --- /dev/null +++ b/src/main/java/com/vmock/biz/tcp/TcpServerStatusEnum.java @@ -0,0 +1,21 @@ +package com.vmock.biz.tcp; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum TcpServerStatusEnum { + + RUNING(1,"runing"), + + STOP(0,"stop"); + + ; + + private Integer code; + + private String status; + + +} diff --git a/src/main/resources/db/v-mock.sqlite b/src/main/resources/db/v-mock.sqlite index 92823ac60d1dc61951572e879fe074f79b3874ec..b5f1d5a1676e24569ba89eac07a39e08e610f392 100644 GIT binary patch delta 324 zcmZp8z}@hGdxEs!5e5bZeIQl>VtEDz7MF=S#;ive^nw#MrY!PjNoL?r-YjSk$uHk1 z#VEia%OR@T7|zeZ$;!#fz^R{Fk(gVMlbTUdQZTt8-fr`Oc*g``o-+(=taljre7G&R zI5{HNXR_YeY$$M)m5=8PW3y#b4!gLlEMuGNWO?Rt7Z+DI$55XT1$BLO9WG9#g8ZTq zB?Se)5Lb8CAO)DDfsO)DuB5UcRY@VlH6jEqp#-v6Y4SYguS}epn`a(3W@TYuU~JfY z;Y=|jCtFhv8_-V-44Zwop$h&KQKzy1Gz#ufoykU=~^3^bmB6&M@^{L2)WE&u@MVtEDz7PE;u#;mIt^sGN_Oj+d5lFq=NzFE*9mS3__ zjFFE)R<$vjpM#T?la+x}KeZw;w;(5Va#Oq=6ED~11M!Xt!a!5l*k>~E`S6_Kw&3FA zh+v<&*-)UL&4oFGU0h$Eu{FOWF)1gtn1O*goL$_|kg>H8B2bu<6kn2>TM!TC#v2+H zV~Frfc3_laGBldJX2GP*GmjgyZWduSVcv8>RDt~*|1SP`{wJGdK3MWI-kBWsze0w) ziH%v7GdDjuJHE6i2k0&iAZCzk;$=2xoV@UaX!HO7+yDP(Y!TpP0gCegF^FabdbWUn InF7-V097SX{Qv*} diff --git a/src/main/resources/static/sys/js/vmock.js b/src/main/resources/static/sys/js/vmock.js index 2946cda..60c0384 100644 --- a/src/main/resources/static/sys/js/vmock.js +++ b/src/main/resources/static/sys/js/vmock.js @@ -888,8 +888,8 @@ var table = { $.modal.open("添加" + table.options.modalName, $.operate.addUrl(id)) }, addtcp: function(id) { - console.log(id); table.set(); + console.log("table.options.modalName = "+table.options.modalName); $.modal.open("添加tcp" + table.options.modalName, $.operate.addTcp(id)) }, addTab: function(id) { @@ -906,11 +906,11 @@ var table = { return url }, addTcp: function(id) { - var url = $.common.isEmpty(id) ? table.options.createUrl.replace("{id}", "") : table.options.createUrl.replace("{id}", id); - console.log("url"+url); + console.log("url:"+url); + var url = $.common.isEmpty(id) ? table.options.createTcp.replace("{id}", "") : table.options.createTcp.replace("{id}", id); return url }, - edit: function(id) { + edit: function(id,type) { table.set(); if ($.common.isEmpty(id) && table.options.type == table_type.bootstrapTreeTable) { var row = $("#" + table.options.id).bootstrapTreeTable('getSelections')[0]; @@ -918,6 +918,9 @@ var table = { $.modal.alertWarning("请至少选择一条记录"); return } + debugger + console.log("id = "+id) + console.log("type = "+type) var url = table.options.updateUrl.replace("{id}", row[table.options.uniqueId]); $.modal.open("修改" + table.options.modalName, url) } else { diff --git a/src/main/resources/templates/system/log/requestdetail.html b/src/main/resources/templates/system/log/requestdetail.html index a2d35d1..dc8bdd2 100644 --- a/src/main/resources/templates/system/log/requestdetail.html +++ b/src/main/resources/templates/system/log/requestdetail.html @@ -71,8 +71,10 @@
-

-

+                
+                
+                

+
diff --git a/src/main/resources/templates/system/url/add.html b/src/main/resources/templates/system/url/add.html index ad1c172..c7a1017 100644 --- a/src/main/resources/templates/system/url/add.html +++ b/src/main/resources/templates/system/url/add.html @@ -16,6 +16,7 @@ ※ URL路径以/开始,如果有Path传参情况,请用占位符{path}占位 +
diff --git a/src/main/resources/templates/system/url/addtcp.html b/src/main/resources/templates/system/url/addtcp.html index ad1c172..22073c9 100644 --- a/src/main/resources/templates/system/url/addtcp.html +++ b/src/main/resources/templates/system/url/addtcp.html @@ -8,14 +8,24 @@
-
+ + +
+ +
+ + ※ 理论上 1-65535之间 +
+
@@ -61,7 +71,7 @@ function submitHandler() { if ($.validate.form()) { - $.operate.save(prefix + "/add", $('#form-url-add').serialize()); + $.operate.save(prefix + "/addtcp", $('#form-url-add').serialize()); } } diff --git a/src/main/resources/templates/system/url/url.html b/src/main/resources/templates/system/url/url.html index 95e3da5..342738c 100644 --- a/src/main/resources/templates/system/url/url.html +++ b/src/main/resources/templates/system/url/url.html @@ -72,7 +72,9 @@ uniqueId: "urlId", detailUrl: prefix + "/{id}", createUrl: prefix + "/add", + createTcp: prefix + "/addtcp", updateUrl: prefix + "/edit/{id}", + updateTCP: prefix + "/edit/{id}", removeUrl: prefix, exportUrl: prefix + "/export", modalName: "url路径", @@ -83,10 +85,18 @@ field: 'name', title: '名称' }, + { + field: 'type', + title: '协议类型' + }, { field: 'url', title: 'URL路径' }, + { + field: 'port', + title: '端口' + }, { field: 'responseType', title: '响应模式', @@ -108,7 +118,7 @@ actions.push(` 返回体 `); actions.push(` 日志 `); actions.push(`详情 `); - actions.push('编辑 '); + actions.push('编辑 '); actions.push('删除'); return actions.join(''); } -- Gitee From e79d2bea7349e9bd2901a956bb56d0f4d64416b1 Mon Sep 17 00:00:00 2001 From: gzwz <568602044@qq.com> Date: Fri, 14 Jul 2023 09:45:26 +0800 Subject: [PATCH 3/7] tcp server mock --- pom.xml | 19 +-- .../biz/controller/ResponseController.java | 11 ++ .../vmock/biz/controller/UrlController.java | 17 +++ src/main/java/com/vmock/biz/entity/Url.java | 2 + .../vmock/biz/service/IResponseService.java | 7 ++ .../com/vmock/biz/service/IUrlService.java | 8 +- .../biz/service/impl/ResponseServiceImpl.java | 7 ++ .../biz/service/impl/UrlServiceImpl.java | 19 ++- .../biz/{enums => tcp}/ProtocolTypeEnum.java | 2 +- src/main/java/com/vmock/biz/tcp/TcpConn.java | 102 +++++++++++++--- .../java/com/vmock/biz/tcp/TcpServer.java | 30 +++-- src/main/resources/application.yml | 109 +++++++++++++++++- src/main/resources/banner.txt | 10 +- src/main/resources/logback.xml | 2 +- src/main/resources/static/sys/js/vmock.js | 28 +++-- .../resources/templates/system/url/edit.html | 1 + .../templates/system/url/edittcp.html | 87 ++++++++++++++ .../resources/templates/system/url/url.html | 2 +- 18 files changed, 400 insertions(+), 63 deletions(-) rename src/main/java/com/vmock/biz/{enums => tcp}/ProtocolTypeEnum.java (92%) create mode 100644 src/main/resources/templates/system/url/edittcp.html diff --git a/pom.xml b/pom.xml index a200575..b0b5902 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.vmock - v-mock + com.gysnh + mock 1.0.0 jar - V-Mock + Mock-Service - V-Mock 轻量级接口模拟 + 农商科金mock service org.springframework.boot @@ -26,8 +26,8 @@ 5.1.4 1.5.3 1.1.14 - 1.18.10 - 3.17 + 1.18.24 + 5.2.2 3.2.0 3.31.1 5.0.6 @@ -47,8 +47,11 @@ mybatis-plus-boot-starter ${mybatis.plus.version} - - + + mysql + mysql-connector-java + runtime + org.xerial sqlite-jdbc diff --git a/src/main/java/com/vmock/biz/controller/ResponseController.java b/src/main/java/com/vmock/biz/controller/ResponseController.java index 6fa1a5e..a8f7d3b 100644 --- a/src/main/java/com/vmock/biz/controller/ResponseController.java +++ b/src/main/java/com/vmock/biz/controller/ResponseController.java @@ -4,8 +4,11 @@ import com.vmock.base.utils.ExcelUtil; import com.vmock.base.vo.Result; import com.vmock.base.vo.TableDataVo; import com.vmock.biz.entity.Response; +import com.vmock.biz.entity.Url; import com.vmock.biz.enums.ResponseTypeEnum; import com.vmock.biz.service.IResponseService; +import com.vmock.biz.service.IUrlService; +import com.vmock.biz.tcp.TcpServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -28,6 +31,10 @@ public class ResponseController extends BaseController { @Autowired private IResponseService mockResponseService; + @Autowired + private TcpServer tcpServer; + @Autowired + private IUrlService mockUrlService; @GetMapping public String response(String urlId, Integer type, ModelMap mmap) { @@ -118,6 +125,10 @@ public class ResponseController extends BaseController { @ResponseBody public Result changeMain(@PathVariable(name = "responseId") Long responseId, @RequestParam Integer main) { mockResponseService.changeMain(responseId, main); + Response resp = mockResponseService.selectResponseById(responseId); + Url url = mockUrlService.selectOneUrlById(String.valueOf(resp.getUrlId())); + tcpServer.removeServer(String.valueOf(url.getUrlId())); + tcpServer.addServer(url); return Result.success(); } diff --git a/src/main/java/com/vmock/biz/controller/UrlController.java b/src/main/java/com/vmock/biz/controller/UrlController.java index e64d9fc..a21458f 100644 --- a/src/main/java/com/vmock/biz/controller/UrlController.java +++ b/src/main/java/com/vmock/biz/controller/UrlController.java @@ -110,6 +110,13 @@ public class UrlController extends BaseController { return PREFIX + "/edit"; } + @GetMapping("/edittcp/{urlId}") + public String edittcp(@PathVariable("urlId") Long urlId, ModelMap mmap) { + Url mockUrl = mockUrlService.getById(urlId); + mmap.put("mockUrl", mockUrl); + return PREFIX + "/edittcp"; + } + /** * 修改保存url路径 */ @@ -118,9 +125,19 @@ public class UrlController extends BaseController { @PostMapping("/edit") @ResponseBody public Result editSave(Url mockUrl) { + tcpServer.removeServer(String.valueOf(mockUrl.getUrlId())); + tcpServer.addServer(mockUrl); return create(mockUrlService.updateMockUrl(mockUrl)); } + @PostMapping("/edittcp") + @ResponseBody + public Result edittcpSave(Url mockUrl) { + tcpServer.removeServer(String.valueOf(mockUrl.getUrlId())); + tcpServer.addServer(mockUrl); + return create(mockUrlService.updateTcp(mockUrl)); + } + /** * 删除url */ diff --git a/src/main/java/com/vmock/biz/entity/Url.java b/src/main/java/com/vmock/biz/entity/Url.java index 61401c7..0cebf93 100644 --- a/src/main/java/com/vmock/biz/entity/Url.java +++ b/src/main/java/com/vmock/biz/entity/Url.java @@ -16,6 +16,8 @@ import lombok.Data; @TableName("mock_url") public class Url extends BaseEntity { + + /** * 主键 */ diff --git a/src/main/java/com/vmock/biz/service/IResponseService.java b/src/main/java/com/vmock/biz/service/IResponseService.java index e16fbe1..ffc5b78 100644 --- a/src/main/java/com/vmock/biz/service/IResponseService.java +++ b/src/main/java/com/vmock/biz/service/IResponseService.java @@ -36,4 +36,11 @@ public interface IResponseService extends IService { * @return MockResponse */ Response selectMainResponse(Long urlId); + + /** + * 根据返回信息id查询返回体 + * @param responseId + * @return + */ + Response selectResponseById(Long responseId); } diff --git a/src/main/java/com/vmock/biz/service/IUrlService.java b/src/main/java/com/vmock/biz/service/IUrlService.java index 21c06f9..095eea5 100644 --- a/src/main/java/com/vmock/biz/service/IUrlService.java +++ b/src/main/java/com/vmock/biz/service/IUrlService.java @@ -63,7 +63,6 @@ public interface IUrlService extends IService { /** * 处理url为logic - * * @param url 入参url * @return 处理好的logic字段 */ @@ -71,7 +70,6 @@ public interface IUrlService extends IService { /** * 处理url格式 - * * @param url url格式 * @return 简单处理后的url */ @@ -79,7 +77,6 @@ public interface IUrlService extends IService { /** * url unique check - * * @param url url path * @param urlId has id, for edit page * @return true:唯一url, false 不唯一 @@ -88,20 +85,19 @@ public interface IUrlService extends IService { /** * 根据逻辑创建正则查url - * * @param requestUrlLogic logic string * @return mockUrl entity */ Url getUrlByRegexp(String requestUrlLogic); - /** * 修改返回类型 - * * @param urlId url主键 * @param type 目标返回类型 */ void changeResponseType(Long urlId, Integer type); Url selectOneUrlById(String ids); + + boolean updateTcp(Url mockUrl); } diff --git a/src/main/java/com/vmock/biz/service/impl/ResponseServiceImpl.java b/src/main/java/com/vmock/biz/service/impl/ResponseServiceImpl.java index 8bff750..5b5d7a0 100644 --- a/src/main/java/com/vmock/biz/service/impl/ResponseServiceImpl.java +++ b/src/main/java/com/vmock/biz/service/impl/ResponseServiceImpl.java @@ -85,4 +85,11 @@ public class ResponseServiceImpl extends ServiceImpl i // limit .last(CommonConst.LIMIT_ONE)); } + + @Override + public Response selectResponseById(Long responseId) { + return this.getOne(Wrappers.lambdaQuery() + .eq(Response::getResponseId, responseId) + .last(CommonConst.LIMIT_ONE)); + } } diff --git a/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java b/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java index bb851d1..6ebd5b4 100644 --- a/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java +++ b/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java @@ -8,7 +8,7 @@ import com.vmock.base.constant.CommonConst; import com.vmock.base.utils.DataBaseUtils; import com.vmock.biz.entity.Url; import com.vmock.biz.entity.UrlLogic; -import com.vmock.biz.enums.ProtocolTypeEnum; +import com.vmock.biz.tcp.ProtocolTypeEnum; import com.vmock.biz.mapper.UrlMapper; import com.vmock.biz.service.IUrlLogicService; import com.vmock.biz.service.IUrlService; @@ -155,7 +155,6 @@ public class UrlServiceImpl extends ServiceImpl implements IUrlS /** * url unique check - * * @param url url path * @param urlId, for edit page */ @@ -239,6 +238,22 @@ public class UrlServiceImpl extends ServiceImpl implements IUrlS return this.updateById(mockUrl); } + /** + * 更新tcp + * @param mockUrl + * @return + */ + @Override + public boolean updateTcp(Url mockUrl) { + // url处理 + Integer port = mockUrl.getPort(); + if (port > 0 && port < 65536){ + return this.updateById(mockUrl); + }else { + return false; + } + } + /** * 删除url路径对象 * diff --git a/src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java b/src/main/java/com/vmock/biz/tcp/ProtocolTypeEnum.java similarity index 92% rename from src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java rename to src/main/java/com/vmock/biz/tcp/ProtocolTypeEnum.java index 56ef25e..c940ad2 100644 --- a/src/main/java/com/vmock/biz/enums/ProtocolTypeEnum.java +++ b/src/main/java/com/vmock/biz/tcp/ProtocolTypeEnum.java @@ -1,4 +1,4 @@ -package com.vmock.biz.enums; +package com.vmock.biz.tcp; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/vmock/biz/tcp/TcpConn.java b/src/main/java/com/vmock/biz/tcp/TcpConn.java index 1f57b2d..70ef2f4 100644 --- a/src/main/java/com/vmock/biz/tcp/TcpConn.java +++ b/src/main/java/com/vmock/biz/tcp/TcpConn.java @@ -1,20 +1,29 @@ package com.vmock.biz.tcp; +import com.vmock.biz.entity.Response; import com.vmock.biz.entity.Url; +import com.vmock.biz.service.IResponseService; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; +import java.net.SocketException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; //@Component //@Scope("prototype") @Getter @Setter +@Slf4j public class TcpConn { @@ -24,28 +33,39 @@ public class TcpConn { private ServerSocket serverSocket ; - ExecutorService executorService = Executors.newFixedThreadPool(5); - private Thread masterThread ; - + private Response response; + private Url item; + private IResponseService responseService; // private Executors - - public TcpConn(Url item) { + public TcpConn(Url item, IResponseService responseService) { + this.responseService = responseService; + this.item = item; try { serverSocket = new ServerSocket(item.getPort()); status = TcpServerStatusEnum.RUNING; } catch (IOException e) { - System.out.println(item.getPort() +" 启动失败: "+e.getMessage()); -// throw new RuntimeException(e); + log.info(item.getPort() +" 启动失败: "+e.getMessage()); return; } - masterThread = new Thread(new TcpMaster(serverSocket,item)); - masterThread.start(); - System.out.println(item.getPort()+" 服务启动 success thread = "+masterThread.getName()); + this.masterThread = new Thread(new TcpMaster(serverSocket,item),"boss-thread-"+(item.getPort())); + this.masterThread.start(); + log.info(item.getPort()+" 服务启动 success thread = "+masterThread.getName()); } + private class Workthrad implements ThreadFactory{ + private int workthradnum = 0 ; + public Workthrad(int workthradnum){ + this.workthradnum = workthradnum; + } + @Override + public Thread newThread(Runnable r) { + return new Thread(r,Thread.currentThread().getName()+"-work-thread-"+(++workthradnum)); + } + } private class TcpMaster implements Runnable { + private int workthradnum = 0; ServerSocket serverSocket; Url item; public TcpMaster(ServerSocket serverSocket, Url item) { @@ -55,15 +75,20 @@ public class TcpConn { @Override public void run() { - while (status.equals(TcpServerStatusEnum.RUNING)){ + ExecutorService executorService = Executors.newFixedThreadPool(5,new Workthrad(workthradnum)); + Response response = responseService.selectMainResponse(item.getUrlId()); + while (TcpServerStatusEnum.RUNING.equals(status)){ try { Socket client = serverSocket.accept(); - executorService.submit(new tcpWorker(client)); + executorService.submit(new tcpWorker(client,response)); + }catch(SocketException e1){ + log.warn(serverSocket.getLocalPort()+" 服务关闭: {}",e1.getMessage()); } catch (IOException e) { + log.error(serverSocket.getLocalPort()+" 服务关闭异常: {}",e.getMessage()); throw new RuntimeException(e); } } - System.out.println(item.getPort()+"服务停止:"+status.getStatus()); + log.info(item.getPort()+" 服务停止:"+status.getStatus()); } } @@ -72,20 +97,63 @@ public class TcpConn { private static class tcpWorker implements Runnable { private Socket client; - public tcpWorker(Socket client) { + private Response response ; + public tcpWorker(Socket client,Response response) { this.client = client; + this.response = response; } @Override public void run() { - System.out.println(client.getRemoteSocketAddress().toString()); + log.info(client.getRemoteSocketAddress().toString()); + OutputStream outputStream = null; + InputStream inputStream = null; + ByteArrayOutputStream outByte = null; try { - OutputStream outputStream = client.getOutputStream(); - outputStream.write("hello world!".getBytes()); + byte [] buff = new byte[1024]; + int len = 0; + inputStream = client.getInputStream(); + outByte = new ByteArrayOutputStream(); + while ( ( len = inputStream.read(buff)) > 0 ){ + outByte.write(buff,0,len); + if (len < buff.length) { + break; + } + } + log.info("收到报文:[ {} ]",outByte.toString()); + outputStream = client.getOutputStream(); + if (response == null || outByte.toString().contains("/favicon.ico")) { + String resp = "hello world!"; + log.info("返回报文:[ {} ]",resp); + outputStream.write(resp.getBytes()); + }else { + byte[] resBytes = response.getContent().getBytes(); + String headlens = StringUtils.leftPad(String.valueOf(resBytes.length), 10, "0"); + log.info("headlen =[ {} ]",headlens); +// String resp = headlens + response.getContent(); + String resp = response.getContent(); + log.info("返回报文:[ {} ]",resp); + outputStream.write(resp.getBytes()); + } outputStream.flush(); client.close(); } catch (IOException e) { + log.warn("outputStream closed",e); throw new RuntimeException(e); + }finally { + try { + if (inputStream != null) { + inputStream.close(); + } + if (outputStream != null) { + outputStream.close(); + } + if (outByte != null) { + outByte.close(); + } + } catch (IOException e) { + log.error("关闭流错误!",e); + } } } } diff --git a/src/main/java/com/vmock/biz/tcp/TcpServer.java b/src/main/java/com/vmock/biz/tcp/TcpServer.java index 43795d8..62e852f 100644 --- a/src/main/java/com/vmock/biz/tcp/TcpServer.java +++ b/src/main/java/com/vmock/biz/tcp/TcpServer.java @@ -1,18 +1,21 @@ package com.vmock.biz.tcp; +import com.vmock.biz.entity.Response; import com.vmock.biz.entity.Url; -import com.vmock.biz.enums.ProtocolTypeEnum; +import com.vmock.biz.service.IResponseService; import com.vmock.biz.service.IUrlService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.io.IOException; +import java.net.ServerSocket; import java.util.List; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +@Slf4j @Component public class TcpServer { @@ -21,24 +24,30 @@ public class TcpServer { @Autowired private IUrlService mockUrlService; + @Autowired + private IResponseService mockResponseService; + @PostConstruct public void init(){ List urls = mockUrlService.selectMockUrlList(new Url()); urls.stream().filter(item->(item.getType().equals(ProtocolTypeEnum.TCP.getCode()))).forEach((item)->{ - serverMap.put(item.getPort(),new TcpConn(item)); + serverMap.put(item.getPort(),new TcpConn(item, mockResponseService)); }); - System.out.println("TCP server num = "+ serverMap.size()); + log.info("TCP server num = "+ serverMap.size()); } - public void removeServer(String ids) { - Url url = mockUrlService.selectOneUrlById(ids); - if (null != url){ + public void removeServer(String id) { + Url url = mockUrlService.selectOneUrlById(id); + if (null != url && ProtocolTypeEnum.TCP.getCode().equals(url.getType())){ TcpConn tcpConn = serverMap.get(url.getPort()); tcpConn.setStatus(TcpServerStatusEnum.STOP); serverMap.remove(url.getPort()); try { - tcpConn.getServerSocket().close(); - System.out.println(url.getPort()+" 服务移出!"); + ServerSocket ss = tcpConn.getServerSocket(); + if (ss != null) { + tcpConn.getServerSocket().close(); + } + log.info(url.getPort()+" 服务移出!"); } catch (IOException e) { throw new RuntimeException(e); } @@ -47,7 +56,8 @@ public class TcpServer { public void addServer(Url item) { if (null != item){ - serverMap.put(item.getPort(),new TcpConn(item)); + Response response = mockResponseService.selectMainResponse(item.getUrlId()); + serverMap.put(item.getPort(),new TcpConn(item, mockResponseService)); } } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 38716df..89460cc 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,101 @@ +#server: +# # 端口 +# port: 80 +# servlet: +# # 访问路径 +# context-path: / +# tomcat: +# # tomcat的URI编码 +# uri-encoding: UTF-8 +# # tomcat最大线程数 +# max-threads: 400 +# # tomcat初始化的线程数 +# min-spare-threads: 30 +# +## 日志配置 +#logging: +# level: +# com.vmock: debug +# org.springframework: warn +# +## Spring配置 +#spring: +# # 模板引擎 +# thymeleaf: +# mode: HTML +# encoding: utf-8 +# # 禁用缓存 +# cache: false +# jackson: +# time-zone: GMT+8 +# date-format: yyyy-MM-dd HH:mm:ss +# profiles: +# active: druid +# datasource: +# type: com.alibaba.druid.pool.DruidDataSource +# driverClassName: org.sqlite.JDBC +# druid: +# # 数据源 +# url: jdbc:sqlite::resource:db/v-mock.sqlite +# # 初始连接数 +# initialSize: 5 +# # 最小连接池数量 +# minIdle: 5 +# # 最大连接池数量 +# maxActive: 10 +# # 配置获取连接等待超时的时间 +# maxWait: 30000 +# # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 +# timeBetweenEvictionRunsMillis: 60000 +# # 配置一个连接在池中最小生存的时间,单位是毫秒 +# minEvictableIdleTimeMillis: 300000 +# # 配置一个连接在池中最大生存的时间,单位是毫秒 +# maxEvictableIdleTimeMillis: 900000 +# # 配置检测连接是否有效 +# validationQuery: SELECT 1 +# testWhileIdle: true +# webStatFilter: +# enabled: false +# statViewServlet: +# enabled: false +# filter: +# stat: +# enabled: true +# # 慢SQL记录 +# log-slow-sql: true +# slow-sql-millis: 1000 +# merge-sql: true +# wall: +# config: +# multi-statement-allow: true +## MyBatis plus +#mybatis-plus: +# # package name range +# typeAliasesPackage: com.vmock.biz.entity +# # 配置mapper的扫描,找到所有的mapper.xml映射文件 +# mapperLocations: classpath:mybatis/*Mapper.xml +# # 全局配置 +# Configuration: +# # 全局映射器启用缓存 +# cacheEnabled: true +# # 允许 JDBC 支持自动生成主键 +# useGeneratedKeys: false +# # 默认的执行器 +# defaultExecutorType: REUSE +# logImpl: org.apache.ibatis.logging.slf4j.Slf4jImpl +# global-config: +# # banner print -> off +# banner: false +# # logic delete config +# db-config: +# # already delete value -> 1 +# logic-delete-value: 1 +# # not delete value -> 0 +# logic-not-delete-value: 0 + server: # 端口 - port: 80 + port: 8089 servlet: # 访问路径 context-path: / @@ -33,10 +128,17 @@ spring: active: druid datasource: type: com.alibaba.druid.pool.DruidDataSource - driverClassName: org.sqlite.JDBC + # driverClassName: org.sqlite.JDBC + + # url: jdbc:mysql://120.77.38.34:13306/smlh?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8 + # driver-class-name: com.mysql.cj.jdbc.Driver druid: # 数据源 - url: jdbc:sqlite::resource:db/v-mock.sqlite + # url: jdbc:sqlite::resource:db/v-mock.sqlite + url: jdbc:mysql://172.31.214.117:13306/mock?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8 + password: mysql@2023 + username: root + driver-class-name: com.mysql.cj.jdbc.Driver # 初始连接数 initialSize: 5 # 最小连接池数量 @@ -68,6 +170,7 @@ spring: wall: config: multi-statement-allow: true + # MyBatis plus mybatis-plus: # package name range diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt index fda3fb2..c31f097 100644 --- a/src/main/resources/banner.txt +++ b/src/main/resources/banner.txt @@ -1,7 +1,7 @@ ------------------------------------------------------------------------------------------ -___ __ _____ ____ ____ | | __ -\ \/ / ______ / \ / _ \_/ ___\| |/ / - \ / /_____/ | Y Y ( <_> ) \___| < Power By Spring Boot ${spring-boot.version} - \_/ |__|_| /\____/ \___ >__|_ \ - \/ \/ \/ + _____ ____ ____ | | __ + / \ / _ \_/ ___\| |/ / + | Y Y ( <_> ) \___| < Power By Spring Boot ${spring-boot.version} + |__|_| /\____/ \___ >__|_ \ + \/ \/ \/ ------------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 002312c..ec39c83 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + diff --git a/src/main/resources/static/sys/js/vmock.js b/src/main/resources/static/sys/js/vmock.js index 60c0384..a98e508 100644 --- a/src/main/resources/static/sys/js/vmock.js +++ b/src/main/resources/static/sys/js/vmock.js @@ -910,7 +910,7 @@ var table = { var url = $.common.isEmpty(id) ? table.options.createTcp.replace("{id}", "") : table.options.createTcp.replace("{id}", id); return url }, - edit: function(id,type) { + edit: function(id,type){ table.set(); if ($.common.isEmpty(id) && table.options.type == table_type.bootstrapTreeTable) { var row = $("#" + table.options.id).bootstrapTreeTable('getSelections')[0]; @@ -918,18 +918,23 @@ var table = { $.modal.alertWarning("请至少选择一条记录"); return } - debugger - console.log("id = "+id) - console.log("type = "+type) - var url = table.options.updateUrl.replace("{id}", row[table.options.uniqueId]); + var url; + if (type === "http"){ + url = table.options.updateUrl.replace("{id}", row[table.options.uniqueId]); + }else if (type === "tcp"){ + url = table.options.updateTcp.replace("{id}", row[table.options.uniqueId]); + } + $.modal.open("修改" + table.options.modalName, url) } else { - $.modal.open("修改" + table.options.modalName, $.operate.editUrl(id)) + console.log("id = "+id) + console.log("type = "+type) + $.modal.open("修改" + table.options.modalName, $.operate.editUrl(id,type)) } }, editTab: function(id) { table.set(); - $.modal.openTab("修改" + table.options.modalName, $.operate.editUrl(id)) + $.modal.openTab("修改" + table.options.modalName, $.operate.editUrl(id,null)) }, editFull: function(id) { table.set(); @@ -942,10 +947,15 @@ var table = { } $.modal.openFull("修改" + table.options.modalName, url) }, - editUrl: function(id) { + editUrl: function(id,type) { var url = "/404.html"; if ($.common.isNotEmpty(id)) { - url = table.options.updateUrl.replace("{id}", id) + if (type === "http"){ + url = table.options.updateUrl.replace("{id}", id); + }else if (type === "tcp"){ + url = table.options.updateTcp.replace("{id}", id); + } + // url = table.options.updateUrl.replace("{id}", id) } else { var id = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId); if (id.length == 0) { diff --git a/src/main/resources/templates/system/url/edit.html b/src/main/resources/templates/system/url/edit.html index 1e79fbb..5471d91 100644 --- a/src/main/resources/templates/system/url/edit.html +++ b/src/main/resources/templates/system/url/edit.html @@ -15,6 +15,7 @@ ※ URL路径以/开始,如果有Path传参情况,请用占位符{path}占位
+
diff --git a/src/main/resources/templates/system/url/edittcp.html b/src/main/resources/templates/system/url/edittcp.html new file mode 100644 index 0000000..e1dbc17 --- /dev/null +++ b/src/main/resources/templates/system/url/edittcp.html @@ -0,0 +1,87 @@ + + + + + + +
+ + + + +
+ +
+ + ※ 理论上 1-65535之间 +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/system/url/url.html b/src/main/resources/templates/system/url/url.html index 342738c..038d566 100644 --- a/src/main/resources/templates/system/url/url.html +++ b/src/main/resources/templates/system/url/url.html @@ -74,7 +74,7 @@ createUrl: prefix + "/add", createTcp: prefix + "/addtcp", updateUrl: prefix + "/edit/{id}", - updateTCP: prefix + "/edit/{id}", + updateTcp: prefix + "/edittcp/{id}", removeUrl: prefix, exportUrl: prefix + "/export", modalName: "url路径", -- Gitee From adc118c5d13ad10bad13f9d068948a3bb075eb74 Mon Sep 17 00:00:00 2001 From: gzwz <568602044@qq.com> Date: Fri, 14 Jul 2023 10:34:03 +0800 Subject: [PATCH 4/7] tcp server mock --- .../vmock/biz/controller/UrlController.java | 5 +++++ .../com/vmock/biz/service/IUrlService.java | 3 +++ .../biz/service/impl/UrlLogicServiceImpl.java | 3 +++ .../biz/service/impl/UrlServiceImpl.java | 11 +++++++++++ src/main/resources/static/favicon.ico | Bin 53575 -> 3768 bytes src/main/resources/static/gyns-log.png | Bin 0 -> 3768 bytes src/main/resources/static/vmock.png | Bin 66191 -> 3768 bytes .../templates/system/log/requestdetail.html | 10 +++++----- .../resources/templates/system/url/add.html | 2 +- .../templates/system/url/addtcp.html | 14 +++++++------- .../templates/system/url/edittcp.html | 12 +++++++----- 11 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/static/gyns-log.png diff --git a/src/main/java/com/vmock/biz/controller/UrlController.java b/src/main/java/com/vmock/biz/controller/UrlController.java index a21458f..4d5f83a 100644 --- a/src/main/java/com/vmock/biz/controller/UrlController.java +++ b/src/main/java/com/vmock/biz/controller/UrlController.java @@ -158,6 +158,11 @@ public class UrlController extends BaseController { return mockUrlService.isUniqueUrl(url, urlId); } + @GetMapping("/checkPort") + @ResponseBody + public Boolean checkPort(Integer port, Long urlId) { + return mockUrlService.isUniquePort(port, urlId); + } /** * 详情页 diff --git a/src/main/java/com/vmock/biz/service/IUrlService.java b/src/main/java/com/vmock/biz/service/IUrlService.java index 095eea5..76b3c82 100644 --- a/src/main/java/com/vmock/biz/service/IUrlService.java +++ b/src/main/java/com/vmock/biz/service/IUrlService.java @@ -83,6 +83,8 @@ public interface IUrlService extends IService { */ boolean isUniqueUrl(String url, Long urlId); + Boolean isUniquePort(Integer checkPort, Long urlId); + /** * 根据逻辑创建正则查url * @param requestUrlLogic logic string @@ -100,4 +102,5 @@ public interface IUrlService extends IService { Url selectOneUrlById(String ids); boolean updateTcp(Url mockUrl); + } diff --git a/src/main/java/com/vmock/biz/service/impl/UrlLogicServiceImpl.java b/src/main/java/com/vmock/biz/service/impl/UrlLogicServiceImpl.java index 7b39981..28af7f9 100644 --- a/src/main/java/com/vmock/biz/service/impl/UrlLogicServiceImpl.java +++ b/src/main/java/com/vmock/biz/service/impl/UrlLogicServiceImpl.java @@ -38,6 +38,9 @@ public class UrlLogicServiceImpl extends ServiceImpl i public List insertByUrl(String url) { // 根据斜线分割 插入逻辑表 String[] subUrls = url.split("\\/"); + if (subUrls.length == 0) { + return new ArrayList(); + } List mockUrlLogics = new ArrayList<>(); // 做成集合批量插入 // db sub_url是 UNIQUE,并 ON CONFLICT IGNORE,不会重复。 diff --git a/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java b/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java index 6ebd5b4..b76b71c 100644 --- a/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java +++ b/src/main/java/com/vmock/biz/service/impl/UrlServiceImpl.java @@ -170,6 +170,17 @@ public class UrlServiceImpl extends ServiceImpl implements IUrlS return count == 0; } + @Override + public Boolean isUniquePort(Integer checkPort, Long urlId){ + // format url + int count = this.count(Wrappers.lambdaQuery() + // url + .eq(Url::getPort, checkPort) + // id + .notIn(urlId != null, Url::getUrlId, urlId)); + return count == 0; + } + /** * 根据逻辑创建正则查url * diff --git a/src/main/resources/static/favicon.ico b/src/main/resources/static/favicon.ico index 54d3d267da786afd82d9c7b302f119bd7b731878..d1aed610021e758eb4c63bcc4f9c13776808b877 100644 GIT binary patch literal 3768 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 R=NG;$ooTMrtM&o${{(%e9y$O3 literal 53575 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 diff --git a/src/main/resources/static/gyns-log.png b/src/main/resources/static/gyns-log.png new file mode 100644 index 0000000000000000000000000000000000000000..d1aed610021e758eb4c63bcc4f9c13776808b877 GIT binary patch literal 3768 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 R=NG;$ooTMrtM&o${{(%e9y$O3 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/vmock.png b/src/main/resources/static/vmock.png index 55f26c1c423345f694a84bf8c4126753f045b98d..d1aed610021e758eb4c63bcc4f9c13776808b877 100644 GIT binary patch literal 3768 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 R=NG;$ooTMrtM&o${{(%e9y$O3 literal 66191 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

S*4sx%`fPe?+LwlS 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 M07*qoM6N<$g13b4zyJUM diff --git a/src/main/resources/templates/system/log/requestdetail.html b/src/main/resources/templates/system/log/requestdetail.html index dc8bdd2..3dce79a 100644 --- a/src/main/resources/templates/system/log/requestdetail.html +++ b/src/main/resources/templates/system/log/requestdetail.html @@ -54,7 +54,8 @@

@@ -71,10 +72,9 @@
- - -

- +

+

diff --git a/src/main/resources/templates/system/url/add.html b/src/main/resources/templates/system/url/add.html index c7a1017..8859031 100644 --- a/src/main/resources/templates/system/url/add.html +++ b/src/main/resources/templates/system/url/add.html @@ -12,7 +12,7 @@
+ placeholder="例:/v1/{path}/category/{path}/product" value="/testpath"/> ※ URL路径以/开始,如果有Path传参情况,请用占位符{path}占位
diff --git a/src/main/resources/templates/system/url/addtcp.html b/src/main/resources/templates/system/url/addtcp.html index 22073c9..0141200 100644 --- a/src/main/resources/templates/system/url/addtcp.html +++ b/src/main/resources/templates/system/url/addtcp.html @@ -21,7 +21,7 @@
+ placeholder="例:8081" value="8080"/> ※ 理论上 1-65535之间
@@ -46,13 +46,13 @@ $("#form-url-add").validate({ focusCleanup: true, rules: { - url: { + port: { maxlength: 500, remote: { - url: prefix + `/check`, + url: prefix + `/checkPort`, data : { - "url": function() { - return $.common.trim($("[name='url']").val()); + "port": function() { + return $.common.trim($("[name='port']").val()); } }, dataType: "json", @@ -63,8 +63,8 @@ } }, messages: { - "url": { - remote: "URL已存在" + "port": { + remote: "端口已存在" } } }); diff --git a/src/main/resources/templates/system/url/edittcp.html b/src/main/resources/templates/system/url/edittcp.html index e1dbc17..d85ab7b 100644 --- a/src/main/resources/templates/system/url/edittcp.html +++ b/src/main/resources/templates/system/url/edittcp.html @@ -41,18 +41,20 @@