├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── YeIM-Uni-Server.postman_collection.json
├── database.sql
├── pom.xml
└── src
├── main
├── java
│ └── cn
│ │ └── wzjun1
│ │ └── yeimServer
│ │ ├── .DS_Store
│ │ ├── YeimServerApplication.java
│ │ ├── annotation
│ │ └── UserAuthorization.java
│ │ ├── config
│ │ ├── PrefixRedisSerializer.java
│ │ ├── RedisConfig.java
│ │ ├── WebConfig.java
│ │ └── WebSocketConfig.java
│ │ ├── constant
│ │ ├── AddFriendType.java
│ │ ├── ConversationType.java
│ │ ├── FriendApplyStatus.java
│ │ ├── GroupApplyStatus.java
│ │ ├── JoinGroupMode.java
│ │ ├── MessageStatus.java
│ │ ├── MessageType.java
│ │ └── StatusCode.java
│ │ ├── controller
│ │ ├── ConversatioController.java
│ │ ├── FriendController.java
│ │ ├── GroupController.java
│ │ ├── GroupUserController.java
│ │ ├── MessageController.java
│ │ ├── UploadController.java
│ │ └── UserController.java
│ │ ├── domain
│ │ ├── Conversation.java
│ │ ├── ConversationV0.java
│ │ ├── Friend.java
│ │ ├── FriendApply.java
│ │ ├── FriendApplyV0.java
│ │ ├── FriendV0.java
│ │ ├── Group.java
│ │ ├── GroupApply.java
│ │ ├── GroupMessage.java
│ │ ├── GroupUser.java
│ │ ├── Message.java
│ │ ├── User.java
│ │ ├── UserBlackList.java
│ │ └── UserBlackListV0.java
│ │ ├── dto
│ │ ├── friend
│ │ │ ├── AddFriendDTO.java
│ │ │ ├── DeleteFriendDTO.java
│ │ │ └── UpdateFriendDTO.java
│ │ ├── group
│ │ │ ├── GroupCreateDTO.java
│ │ │ ├── GroupEditDTO.java
│ │ │ └── GroupUserAddDTO.java
│ │ ├── message
│ │ │ └── MessageSaveDTO.java
│ │ └── user
│ │ │ ├── UserBlackListAddDTO.java
│ │ │ ├── UserRegisterDTO.java
│ │ │ ├── UserTokenDTO.java
│ │ │ └── UserUpdateDTO.java
│ │ ├── exception
│ │ ├── FileUploadException.java
│ │ ├── FrequencyLimitException.java
│ │ ├── LoginExpireException.java
│ │ ├── ParamsException.java
│ │ ├── conversation
│ │ │ └── ConversationNotFoundException.java
│ │ ├── friend
│ │ │ ├── ApplyNeedException.java
│ │ │ ├── DuplicateException.java
│ │ │ ├── FriendApplyNotFoundException.java
│ │ │ └── FriendNotFoundException.java
│ │ ├── group
│ │ │ ├── GroupAllMuteException.java
│ │ │ ├── GroupDuplicateException.java
│ │ │ ├── GroupMuteException.java
│ │ │ ├── GroupNoEntryException.java
│ │ │ ├── GroupNotFoundException.java
│ │ │ ├── GroupOnlyDissolveException.java
│ │ │ ├── GroupPermissionDeniedException.java
│ │ │ ├── GroupUserInsertLimitException.java
│ │ │ └── NoGroupUserException.java
│ │ ├── message
│ │ │ ├── IdException.java
│ │ │ ├── MessageRejectedException.java
│ │ │ └── ToUserIdNotFoundException.java
│ │ └── user
│ │ │ ├── ExpireException.java
│ │ │ ├── SignException.java
│ │ │ ├── UserDuplicateException.java
│ │ │ ├── UserFriendDenyException.java
│ │ │ ├── UserFriendDuplicateException.java
│ │ │ └── UserNotFoundException.java
│ │ ├── handler
│ │ └── GlobalExceptionHandler.java
│ │ ├── interceptor
│ │ ├── LoginUserContext.java
│ │ └── UserAuthorizationInterceptor.java
│ │ ├── mapper
│ │ ├── ConversationMapper.java
│ │ ├── FriendApplyMapper.java
│ │ ├── FriendMapper.java
│ │ ├── GroupApplyMapper.java
│ │ ├── GroupMapper.java
│ │ ├── GroupMessageMapper.java
│ │ ├── GroupUserMapper.java
│ │ ├── MessageMapper.java
│ │ ├── UserBlackListMapper.java
│ │ └── UserMapper.java
│ │ ├── pojo
│ │ ├── YeIMPushConfig.java
│ │ └── push
│ │ │ └── GtConfig.java
│ │ ├── result
│ │ ├── Result.java
│ │ └── vo
│ │ │ └── AddUserToGroupResultVO.java
│ │ ├── service
│ │ ├── AsyncService.java
│ │ ├── ConversationService.java
│ │ ├── FriendApplyService.java
│ │ ├── FriendService.java
│ │ ├── GroupApplyService.java
│ │ ├── GroupMessageService.java
│ │ ├── GroupService.java
│ │ ├── GroupUserService.java
│ │ ├── MessageService.java
│ │ ├── OnlineChannel.java
│ │ ├── PushService.java
│ │ ├── UploadService.java
│ │ ├── UserBlackListService.java
│ │ ├── UserService.java
│ │ └── impl
│ │ │ ├── AsyncServiceImpl.java
│ │ │ ├── ConversationServiceImpl.java
│ │ │ ├── FriendApplyServiceImpl.java
│ │ │ ├── FriendServiceImpl.java
│ │ │ ├── GroupApplyServiceImpl.java
│ │ │ ├── GroupMessageServiceImpl.java
│ │ │ ├── GroupServiceImpl.java
│ │ │ ├── GroupUserServiceImpl.java
│ │ │ ├── MessageServiceImpl.java
│ │ │ ├── OnlineChannelimpl.java
│ │ │ ├── PushServiceImpl.java
│ │ │ ├── UploadServiceImpl.java
│ │ │ ├── UserBlackListServiceImpl.java
│ │ │ └── UserServiceImpl.java
│ │ ├── socket
│ │ └── WebSocket.java
│ │ └── utils
│ │ ├── Common.java
│ │ ├── JavaCvUtil.java
│ │ ├── MD5Util.java
│ │ ├── RedisUtil.java
│ │ └── SpringUtils.java
└── resources
│ ├── application-dev.properties
│ ├── application-prod.properties
│ ├── application.properties
│ ├── config
│ ├── dev
│ │ ├── database.properties
│ │ ├── redis.properties
│ │ ├── yeim.properties
│ │ └── yeim
│ │ │ ├── push.properties
│ │ │ └── storage.properties
│ └── prod
│ │ ├── database.properties
│ │ ├── redis.properties
│ │ ├── yeim.properties
│ │ └── yeim
│ │ ├── push.properties
│ │ └── storage.properties
│ ├── mapper
│ ├── ConversationMapper.xml
│ ├── FriendApplyMapper.xml
│ ├── FriendMapper.xml
│ ├── GroupApplyMapper.xml
│ ├── GroupMapper.xml
│ ├── GroupMessageMapper.xml
│ ├── GroupUserMapper.xml
│ ├── MessageMapper.xml
│ ├── UserBlackListMapper.xml
│ └── UserMapper.xml
│ └── spy.properties
└── test
└── java
└── cn
└── wzjun1
└── yeimServer
└── YeimServerApplicationTests.java
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # ignore
2 | *.idea
3 | target
4 | .DS_Store
5 | .gitattributes
6 | src/main/java/cn/wzjun1/yeimServer/.DS_Store
7 | *.log
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | YeIM-Uni-Server
4 |
5 |
6 | YeIM-Uni-SDK服务端
7 |
8 |
9 | 查看文档
10 | | 备用文档
11 |
12 |
13 |
14 |
15 | `此为社区开源项目,用于学习交流使用,禁止用于非法途径。如作他用所造成的一切法律责任均不由作者承担。`
16 |
17 | - 注:不是聊天项目!不是聊天项目!不是聊天项目!只是SDK,通过使用SDK里的一系列接口可实现聊天,跟环信、融云、腾讯云即时通信等等类似的一种可实现聊天的IMSDK。
18 |
19 | [YeIM-Uni-SDK](https://github.com/wzJun1/YeIM-Uni-SDK)是可以`私有化部署`的`全开源`即时通讯`js-sdk`,仅需集成 SDK 即可轻松实现聊天能力,支持Web、[uni-app](https://uniapp.dcloud.net.cn/)接入使用,满足通信需要。
20 |
21 | 支持私聊和群聊,支持发送的消息类型:文字消息、图片消息、语音消息、视频消息、位置消息、自定义消息。
22 |
23 | [YeIM-Uni-Server](https://github.com/wzJun1/YeIM-Uni-Server)是[YeIM-Uni-SDK](https://github.com/wzJun1/YeIM-Uni-SDK)的配套服务端。
24 |
25 | 因此[YeIM-Uni-SDK](https://github.com/wzJun1/YeIM-Uni-SDK)必须搭配[YeIM-Uni-Server](https://github.com/wzJun1/YeIM-Uni-Server)服务端,开箱即用。
26 |
27 | ## 支持哪些端?
28 |
29 | `YeIM-Uni-SDK`由`JavaScript`构建,支持Web端、uni-app端的项目接入使用。
30 |
31 | 当项目在uni环境打包,SDK将使用`uni-app API`,否则使用JS相关API,详情可查看源码。
32 |
33 | 作为通用JSSDK,`YeIM-Uni-SDK`支持包括不限于H5(uni和非uni环境均可)、Android APP、iOS APP、微信小程序、字节小程序、支付宝小程序、百度小程序(仅限uni环境)等平台项目。
34 |
35 | ## 使用文档
36 |
37 | 查看文档
38 | | 备用文档
39 |
40 | ## 反馈与共建
41 |
42 | - 普通交流QQ群:[391276294](https://qm.qq.com/cgi-bin/qm/qr?k=hEQnVRj3c1B0gDpD2QJrD7UIfWMzCUuM&jump_from=webapi&authKey=kbrD7NHXGIPaiVb2puw+vJeRCIQSXVhIci7eFvFLBH/UjGt+hrdOk4upK731S+1+)
43 |
44 | ## 基于YeIM-Uni-SDK的演示案例
45 |
46 | ### 代码
47 |
48 | [下载基于YeIM-Uni-SDK的演示案例源码](https://ext.dcloud.net.cn/plugin?id=10266)
49 |
50 | ### Android App Demo
51 |
52 |
53 |
54 | ### Electron 桌面端 Demo
55 |
56 | [https://github.com/wzJun1/YeIM-Uni-SDK-Electron-Demo](https://github.com/wzJun1/YeIM-Uni-SDK-Electron-Demo)
57 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 | cn.wzjun1
6 | yeimServer
7 | 1.2.3
8 | yeimServer
9 | YeIM for Spring Boot
10 |
11 |
12 | 1.8
13 | UTF-8
14 | UTF-8
15 | 2.7.6
16 |
17 |
18 |
19 |
20 |
21 | org.springframework.boot
22 | spring-boot-starter-web
23 |
24 |
25 |
26 | com.alibaba
27 | fastjson
28 | 1.2.83
29 |
30 |
31 |
32 | mysql
33 | mysql-connector-java
34 | runtime
35 |
36 |
37 |
38 | org.springframework.boot
39 | spring-boot-starter-test
40 | test
41 |
42 |
43 | org.junit.vintage
44 | junit-vintage-engine
45 |
46 |
47 |
48 |
49 |
50 | org.springframework.boot
51 | spring-boot-starter-websocket
52 |
53 |
54 |
55 | org.springframework.boot
56 | spring-boot-configuration-processor
57 |
58 |
59 |
60 | org.projectlombok
61 | lombok
62 | true
63 |
64 |
65 |
66 | org.slf4j
67 | slf4j-api
68 | 1.7.25
69 |
70 |
71 |
72 |
73 | org.springframework.boot
74 | spring-boot-starter-data-redis
75 |
76 |
77 |
78 | org.apache.commons
79 | commons-pool2
80 |
81 |
82 |
83 |
84 |
85 | org.hibernate
86 | hibernate-validator
87 | 6.0.1.Final
88 |
89 |
90 |
91 |
92 | com.baomidou
93 | mybatis-plus-boot-starter
94 | 3.5.2
95 |
96 |
97 |
98 | p6spy
99 | p6spy
100 | 3.9.1
101 |
102 |
103 |
104 | commons-codec
105 | commons-codec
106 | 1.10
107 |
108 |
109 |
110 |
111 | com.github.yitter
112 | yitter-idgenerator
113 | 1.0.6
114 |
115 |
116 |
117 |
118 | net.coobird
119 | thumbnailator
120 | 0.4.18
121 |
122 |
123 |
124 |
125 | com.twelvemonkeys.imageio
126 | imageio-tiff
127 | 3.9.3
128 |
129 |
130 |
131 |
132 | com.twelvemonkeys.imageio
133 | imageio-webp
134 | 3.9.3
135 |
136 |
137 |
138 |
139 | org.bytedeco
140 | javacv
141 | 1.5.8
142 |
143 |
144 | org.bytedeco
145 | ffmpeg
146 | 5.1.2-1.5.8
147 |
148 |
149 |
150 |
151 |
152 | macosx-x86_64
153 |
154 |
155 |
156 |
157 |
158 | com.getui.push
159 | restful-sdk
160 | 1.0.0.10
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 | org.springframework.boot
169 | spring-boot-dependencies
170 | ${spring-boot.version}
171 | pom
172 | import
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 | org.apache.maven.plugins
181 | maven-compiler-plugin
182 | 3.8.1
183 |
184 | 1.8
185 | 1.8
186 | UTF-8
187 |
188 |
189 |
190 | org.springframework.boot
191 | spring-boot-maven-plugin
192 | 2.7.6
193 |
194 | cn.wzjun1.yeimServer.YeimServerApplication
195 |
196 |
197 |
198 | repackage
199 |
200 | repackage
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
--------------------------------------------------------------------------------
/src/main/java/cn/wzjun1/yeimServer/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wzJun1/YeIM-Uni-Server/dda702b1cc829ed67dd99292fef256d8a6eaa2b8/src/main/java/cn/wzjun1/yeimServer/.DS_Store
--------------------------------------------------------------------------------
/src/main/java/cn/wzjun1/yeimServer/YeimServerApplication.java:
--------------------------------------------------------------------------------
1 | package cn.wzjun1.yeimServer;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import org.mybatis.spring.annotation.MapperScan;
5 | import org.springframework.boot.SpringApplication;
6 | import org.springframework.boot.autoconfigure.SpringBootApplication;
7 | import org.springframework.scheduling.annotation.EnableAsync;
8 | import org.springframework.transaction.annotation.EnableTransactionManagement;
9 |
10 | @MapperScan("cn.wzjun1.yeimServer.mapper")
11 | @EnableTransactionManagement
12 | @SpringBootApplication
13 | @EnableAsync
14 | @Slf4j
15 | public class YeimServerApplication {
16 |
17 | public static void main(String[] args) {
18 | SpringApplication.run(YeimServerApplication.class, args);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/cn/wzjun1/yeimServer/annotation/UserAuthorization.java:
--------------------------------------------------------------------------------
1 | package cn.wzjun1.yeimServer.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target({ElementType.TYPE, ElementType.METHOD})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface UserAuthorization {
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/cn/wzjun1/yeimServer/config/PrefixRedisSerializer.java:
--------------------------------------------------------------------------------
1 | package cn.wzjun1.yeimServer.config;
2 |
3 |
4 | import com.baomidou.mybatisplus.core.toolkit.StringUtils;
5 | import lombok.extern.slf4j.Slf4j;
6 | import org.springframework.beans.factory.annotation.Value;
7 | import org.springframework.context.annotation.Configuration;
8 | import org.springframework.core.annotation.Order;
9 | import org.springframework.data.redis.serializer.StringRedisSerializer;
10 |
11 | @Slf4j
12 | @Order
13 | @Configuration
14 | public class PrefixRedisSerializer extends StringRedisSerializer {
15 |
16 | @Value("${yeim.redis.prefix}")
17 | private String prefix;
18 |
19 | /**
20 | * 序列化
21 | *
22 | * @param s key
23 | * @return 结果
24 | */
25 | @Override
26 | public byte[] serialize(String s) {
27 | if (s == null) {
28 | return new byte[0];
29 | }
30 | String realKey = prefix + s;
31 | return super.serialize(realKey);
32 | }
33 |
34 | /**
35 | * 反序列化
36 | *
37 | * @param bytes 数据
38 | * @return 结果
39 | */
40 | @Override
41 | public String deserialize(byte[] bytes) {
42 | String s = bytes == null ? null : new String(bytes);
43 | if (StringUtils.isBlank(s)) {
44 | return s;
45 | }
46 | int index = s.indexOf(prefix);
47 | if (index != -1) {
48 | return s.substring(index + 2);
49 | }
50 | return s;
51 | }
52 | }
--------------------------------------------------------------------------------
/src/main/java/cn/wzjun1/yeimServer/config/RedisConfig.java:
--------------------------------------------------------------------------------
1 | package cn.wzjun1.yeimServer.config;
2 |
3 | import com.fasterxml.jackson.annotation.JsonAutoDetect;
4 | import com.fasterxml.jackson.annotation.PropertyAccessor;
5 | import com.fasterxml.jackson.databind.ObjectMapper;
6 | import com.fasterxml.jackson.databind.SerializationFeature;
7 | import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
8 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
9 | import org.springframework.context.annotation.Bean;
10 | import org.springframework.context.annotation.Configuration;
11 | import org.springframework.data.redis.connection.RedisConnectionFactory;
12 | import org.springframework.data.redis.core.RedisTemplate;
13 | import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
14 | import org.springframework.data.redis.serializer.StringRedisSerializer;
15 |
16 | @Configuration
17 | public class RedisConfig {
18 | /**
19 | * SpringBoot自动帮我们在容器中生成了一个RedisTemplate和一个StringRedisTemplate。
20 | * 但是,这个RedisTemplate的泛型是