diff --git a/clients/java/wcferry-mvn/README.MD b/clients/java/wcferry-mvn/README.MD index 25fc235..8bc07d9 100644 --- a/clients/java/wcferry-mvn/README.MD +++ b/clients/java/wcferry-mvn/README.MD @@ -86,6 +86,7 @@ wcferry-mvn │ │ │ └─WcferryApplication.java 启动类 │ │ │resources 数据库脚本 │ │ │ ├─libs 本程序内置依赖包 +│ │ │ ├─proto proto文件 │ │ │ ├─win32-x86-64 依赖程序 │ │ │ ├─application.yml 本程序主配置文件 │ │ │ └─logback-spring.xml 日志配置文件 @@ -110,6 +111,13 @@ wcferry: dll-path: /dll/sdk.dll ``` +#### 生成proto文件 + +本程序已经集成了生成proto文件的maven插件,直接install即可生成proto文件,且会在打包程序中去除 src/main/resources/proto +下面的内容,只保留实体类中的文件 + +默认install会重新根据 生成实体,如果不想被替换,请删除 src/main/resources/proto 下对应的文件即可 + ### 提交规范 本模块希望大家使用统一提交格式,便于区分 diff --git a/clients/java/wcferry-mvn/pom.xml b/clients/java/wcferry-mvn/pom.xml index f691a7a..16f0a96 100644 --- a/clients/java/wcferry-mvn/pom.xml +++ b/clients/java/wcferry-mvn/pom.xml @@ -61,4 +61,54 @@ + + + + kr.motd.maven + os-maven-plugin + 1.5.0.Final + + + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + 0.5.0 + + + + com.google.protobuf:protoc:3.22.2:exe:${os.detected.classifier} + + + ${project.basedir}/src/main/resources/proto + + src/main/java + grpc-java + + false + + + + + compile + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + **/*.proto + + + + + + diff --git a/clients/java/wcferry-mvn/src/main/java/com/iamteer/config/ProtobufConfig.java b/clients/java/wcferry-mvn/src/main/java/com/iamteer/config/ProtobufConfig.java new file mode 100644 index 0000000..28ca635 --- /dev/null +++ b/clients/java/wcferry-mvn/src/main/java/com/iamteer/config/ProtobufConfig.java @@ -0,0 +1,35 @@ +package com.iamteer.config; + +import java.util.Collections; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +/** + * 配置类-protobuf + * + * @author chandler + * @date 2024-09-26 21:35 + */ +@Configuration +public class ProtobufConfig { + + /** + * protobuf 序列化 + */ + @Bean + ProtobufHttpMessageConverter protobufHttpMessageConverter() { + return new ProtobufHttpMessageConverter(); + } + + /** + * protobuf 反序列化 + */ + @Bean + RestTemplate restTemplate(ProtobufHttpMessageConverter protobufHttpMessageConverter) { + return new RestTemplate(Collections.singletonList(protobufHttpMessageConverter)); + } + +} diff --git a/clients/java/wcferry-mvn/src/main/resources/proto/.gitkeep b/clients/java/wcferry-mvn/src/main/resources/proto/.gitkeep new file mode 100644 index 0000000..a10d4fe --- /dev/null +++ b/clients/java/wcferry-mvn/src/main/resources/proto/.gitkeep @@ -0,0 +1,3 @@ +# Ignore everything in this directory +* +# Except this file !.gitkeep \ No newline at end of file diff --git a/clients/java/wcferry-mvn/src/main/resources/proto/wcf.proto b/clients/java/wcferry-mvn/src/main/resources/proto/wcf.proto new file mode 100644 index 0000000..5427ff0 --- /dev/null +++ b/clients/java/wcferry-mvn/src/main/resources/proto/wcf.proto @@ -0,0 +1,236 @@ +syntax = "proto3"; + +package wcf; +option java_package = "com.iamteer.entity"; + +enum Functions { + FUNC_RESERVED = 0x00; + FUNC_IS_LOGIN = 0x01; + FUNC_GET_SELF_WXID = 0x10; + FUNC_GET_MSG_TYPES = 0x11; + FUNC_GET_CONTACTS = 0x12; + FUNC_GET_DB_NAMES = 0x13; + FUNC_GET_DB_TABLES = 0x14; + FUNC_GET_USER_INFO = 0x15; + FUNC_GET_AUDIO_MSG = 0x16; + FUNC_SEND_TXT = 0x20; + FUNC_SEND_IMG = 0x21; + FUNC_SEND_FILE = 0x22; + FUNC_SEND_XML = 0x23; + FUNC_SEND_EMOTION = 0x24; + FUNC_SEND_RICH_TXT = 0x25; + FUNC_SEND_PAT_MSG = 0x26; + FUNC_FORWARD_MSG = 0x27; + FUNC_ENABLE_RECV_TXT = 0x30; + FUNC_DISABLE_RECV_TXT = 0x40; + FUNC_EXEC_DB_QUERY = 0x50; + FUNC_ACCEPT_FRIEND = 0x51; + FUNC_RECV_TRANSFER = 0x52; + FUNC_REFRESH_PYQ = 0x53; + FUNC_DOWNLOAD_ATTACH = 0x54; + FUNC_GET_CONTACT_INFO = 0x55; + FUNC_REVOKE_MSG = 0x56; + FUNC_REFRESH_QRCODE = 0x57; + FUNC_DECRYPT_IMAGE = 0x60; + FUNC_EXEC_OCR = 0x61; + FUNC_ADD_ROOM_MEMBERS = 0x70; + FUNC_DEL_ROOM_MEMBERS = 0x71; + FUNC_INV_ROOM_MEMBERS = 0x72; +} + +message Request +{ + Functions func = 1; + oneof msg + { + Empty empty = 2; // 无参数 + string str = 3; // 字符串 + TextMsg txt = 4; // 发送文本消息结构 + PathMsg file = 5; // 发送图片、文件消息结构 + DbQuery query = 6; // 数据库查询参数结构 + Verification v = 7; // 通过好友验证参数结构 + MemberMgmt m = 8; // 群成员管理,添加、删除、邀请 + XmlMsg xml = 9; // XML参数结构 + DecPath dec = 10; // 解密图片参数结构 + Transfer tf = 11; // 接收转账参数结构 + uint64 ui64 = 12 [ jstype = JS_STRING ]; // 64 位整数,通用 + bool flag = 13; // 布尔值 + AttachMsg att = 14; // 下载图片、视频、文件参数结构 + AudioMsg am = 15; // 保存语音参数结构 + RichText rt = 16; // 发送卡片消息结构 + PatMsg pm = 17; // 发送拍一拍参数结构 + ForwardMsg fm = 18; // 转发消息参数结构 + } +} + +message Response +{ + Functions func = 1; + oneof msg + { + int32 status = 2; // Int 状态,通用 + string str = 3; // 字符串 + WxMsg wxmsg = 4; // 微信消息 + MsgTypes types = 5; // 消息类型 + RpcContacts contacts = 6; // 联系人 + DbNames dbs = 7; // 数据库列表 + DbTables tables = 8; // 表列表 + DbRows rows = 9; // 行列表 + UserInfo ui = 10; // 个人信息 + OcrMsg ocr = 11; // OCR 结果 + }; +} + +message Empty { } + +message WxMsg +{ + bool is_self = 1; // 是否自己发送的 + bool is_group = 2; // 是否群消息 + uint64 id = 3 [ jstype = JS_STRING ]; // 消息 id + uint32 type = 4; // 消息类型 + uint32 ts = 5; // 消息类型 + string roomid = 6; // 群 id(如果是群消息的话) + string content = 7; // 消息内容 + string sender = 8; // 消息发送者 + string sign = 9; // Sign + string thumb = 10; // 缩略图 + string extra = 11; // 附加内容 + string xml = 12; // 消息 xml +} + +message TextMsg +{ + string msg = 1; // 要发送的消息内容 + string receiver = 2; // 消息接收人,当为群时可@ + string aters = 3; // 要@的人列表,逗号分隔 +} + +message PathMsg +{ + string path = 1; // 要发送的图片的路径 + string receiver = 2; // 消息接收人 +} + +message XmlMsg +{ + string receiver = 1; // 消息接收人 + string content = 2; // xml 内容 + string path = 3; // 图片路径 + int32 type = 4; // 消息类型 +} + +message MsgTypes { map types = 1; } + +message RpcContact +{ + string wxid = 1; // 微信 id + string code = 2; // 微信号 + string remark = 3; // 备注 + string name = 4; // 微信昵称 + string country = 5; // 国家 + string province = 6; // 省/州 + string city = 7; // 城市 + int32 gender = 8; // 性别 +} +message RpcContacts { repeated RpcContact contacts = 1; } + +message DbNames { repeated string names = 1; } + +message DbTable +{ + string name = 1; // 表名 + string sql = 2; // 建表 SQL +} +message DbTables { repeated DbTable tables = 1; } + +message DbQuery +{ + string db = 1; // 目标数据库 + string sql = 2; // 查询 SQL +} + +message DbField +{ + int32 type = 1; // 字段类型 + string column = 2; // 字段名称 + bytes content = 3; // 字段内容 +} +message DbRow { repeated DbField fields = 1; } +message DbRows { repeated DbRow rows = 1; } + +message Verification +{ + string v3 = 1; // 加密的用户名 + string v4 = 2; // Ticket + int32 scene = 3; // 添加方式:17 名片,30 扫码 +} + +message MemberMgmt +{ + string roomid = 1; // 要加的群ID + string wxids = 2; // 要加群的人列表,逗号分隔 +} + +message UserInfo +{ + string wxid = 1; // 微信ID + string name = 2; // 昵称 + string mobile = 3; // 手机号 + string home = 4; // 文件/图片等父路径 +} + +message DecPath +{ + string src = 1; // 源路径 + string dst = 2; // 目标路径 +} + +message Transfer +{ + string wxid = 1; // 转账人 + string tfid = 2; // 转账id transferid + string taid = 3; // Transaction id +} + +message AttachMsg +{ + uint64 id = 1 [ jstype = JS_STRING ]; // 消息 id + string thumb = 2; // 消息中的 thumb + string extra = 3; // 消息中的 extra +} + +message AudioMsg +{ + uint64 id = 1 [ jstype = JS_STRING ]; // 语音消息 id + string dir = 2; // 存放目录 +} + +message RichText +{ + string name = 1; // 显示名字 + string account = 2; // 公众号 id + string title = 3; // 标题 + string digest = 4; // 摘要 + string url = 5; // 链接 + string thumburl = 6; // 缩略图 + string receiver = 7; // 接收人 +} + +message PatMsg +{ + string roomid = 1; // 群 id + string wxid = 2; // wxid +} + +message OcrMsg +{ + int32 status = 1; // 状态 + string result = 2; // 结果 +} + +message ForwardMsg +{ + uint64 id = 1 [ jstype = JS_STRING ]; // 待转发消息 ID + string receiver = 2; // 转发接收目标,群为 roomId,个人为 wxid +}