Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
e997ccd7
Commit
e997ccd7
authored
Jul 19, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
获取用户在线状态;
连接超时管理 (判断通道是否有数据写入);
parent
06882a0f
Hide whitespace changes
Inline
Side-by-side
Showing
44 changed files
with
212 additions
and
101 deletions
+212
-101
bootstrap/src/main/java/io/geekidea/springbootplus/StartNettyService.java
+1
-1
bootstrap/src/test/java/io/geekidea/springbootplus/test/ImApplicationTest.java
+1
-1
bootstrap/src/test/java/io/geekidea/springbootplus/test/JsonTest.java
+1
-1
bootstrap/src/test/java/io/geekidea/springbootplus/test/LoginTest.java
+6
-6
bootstrap/src/test/java/io/geekidea/springbootplus/test/SignTest.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/annotation/ReceiveTypeAnnotation.java
+2
-2
common/src/main/java/com/wecloud/im/app_ws/cache/UserCache.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/enums/WsRequestCmdEnum.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/enums/WsResponseCmdEnum.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/model/FileHelperOfflineModel.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/model/RequestHeaderConstants.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/model/ResponseModel.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/model/ResultStatus.java
+4
-4
common/src/main/java/com/wecloud/im/app_ws/model/WsConstants.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/model/request/ReceiveModel.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/model/request/RequestOfflineMsgModel.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/receive/ReadWsData.java
+7
-7
common/src/main/java/com/wecloud/im/app_ws/sender/PushTask.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/sender/WsWriter.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/service/MangerChannelService.java
+15
-3
common/src/main/java/com/wecloud/im/app_ws/service/WriteDataService.java
+3
-3
common/src/main/java/com/wecloud/im/app_ws/service/impl/MangerChannelServiceImpl.java
+31
-3
common/src/main/java/com/wecloud/im/app_ws/service/impl/WriteDataServiceImpl.java
+6
-6
common/src/main/java/com/wecloud/im/app_ws/strategy/AbstractReceiveStrategy.java
+2
-2
common/src/main/java/com/wecloud/im/app_ws/strategy/ReceiveStrategyContext.java
+4
-4
common/src/main/java/com/wecloud/im/app_ws/strategy/ReceiveStrategyProcessor.java
+4
-4
common/src/main/java/com/wecloud/im/app_ws/strategy/concrete/ImConcreteReceiveStrategy.java
+9
-9
common/src/main/java/com/wecloud/im/app_ws/utils/ClassScanner.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/utils/EncrypDES.java
+2
-2
common/src/main/java/com/wecloud/im/app_ws/utils/FullHttpRequestUtils.java
+2
-2
common/src/main/java/com/wecloud/im/app_ws/utils/RSAGenerator.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/utils/RedisUtils.java
+1
-1
common/src/main/java/com/wecloud/im/app_ws/utils/SpringBeanUtils.java
+1
-1
common/src/main/java/com/wecloud/im/controller/ImApplicationController.java
+1
-1
common/src/main/java/com/wecloud/im/controller/ImClientBlacklistController.java
+0
-2
common/src/main/java/com/wecloud/im/controller/ImClientController.java
+39
-0
common/src/main/java/com/wecloud/im/netty/core/ChannelInboundHandler.java
+2
-2
common/src/main/java/com/wecloud/im/netty/core/NettyChannelInitializer.java
+7
-2
common/src/main/java/com/wecloud/im/netty/core/NettyStart.java
+4
-4
common/src/main/java/com/wecloud/im/netty/core/WsReadHandler.java
+7
-6
common/src/main/java/com/wecloud/im/netty/handler/NettyApiRequest.java
+7
-7
common/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
+2
-0
common/src/main/java/com/wecloud/im/service/impl/ImClientLoginServiceImpl.java
+3
-1
common/src/main/java/com/wecloud/im/vo/ImOnlineStatusVo.java
+24
-0
No files found.
bootstrap/src/main/java/io/geekidea/springbootplus/StartNettyService.java
View file @
e997ccd7
package
io
.
geekidea
.
springbootplus
;
package
io
.
geekidea
.
springbootplus
;
import
com.wecloud.im.
tillo.
netty.core.NettyStart
;
import
com.wecloud.im.netty.core.NettyStart
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.core.annotation.Order
;
...
...
bootstrap/src/test/java/io/geekidea/springbootplus/test/ImApplicationTest.java
View file @
e997ccd7
package
io
.
geekidea
.
springbootplus
.
test
;
package
io
.
geekidea
.
springbootplus
.
test
;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.core.lang.Snowflake
;
import
com.wecloud.im.app_ws.utils.RSAGenerator
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.tillo.app_ws.utils.RSAGenerator
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
bootstrap/src/test/java/io/geekidea/springbootplus/test/JsonTest.java
View file @
e997ccd7
...
@@ -3,7 +3,7 @@ package io.geekidea.springbootplus.test;
...
@@ -3,7 +3,7 @@ package io.geekidea.springbootplus.test;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.
tillo.
app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
public
class
JsonTest
{
public
class
JsonTest
{
...
...
bootstrap/src/test/java/io/geekidea/springbootplus/test/LoginTest.java
View file @
e997ccd7
...
@@ -3,11 +3,11 @@ package io.geekidea.springbootplus.test;
...
@@ -3,11 +3,11 @@ package io.geekidea.springbootplus.test;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.crypto.digest.MD5
;
import
cn.hutool.crypto.digest.MD5
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.app_ws.utils.RedisUtils
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.tillo.app_ws.utils.RedisUtils
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtUtil
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtUtil
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -86,7 +86,7 @@ public class LoginTest {
...
@@ -86,7 +86,7 @@ public class LoginTest {
}
}
// 生成token
// 生成token
String
generateToken
=
JwtUtil
.
generateToken
(
clientId
,
appKey
,
imApplication
.
getAppSecret
(),
Duration
.
ofDays
(
100
));
String
generateToken
=
JwtUtil
.
generateToken
(
clientId
,
appKey
,
imApplication
.
getAppSecret
(),
Duration
.
ofDays
(
99999
));
// 保存redis
// 保存redis
redisTemplate
.
opsForValue
().
set
(
"client:"
+
imApplication
.
getAppKey
()
+
":"
+
clientId
,
generateToken
);
redisTemplate
.
opsForValue
().
set
(
"client:"
+
imApplication
.
getAppKey
()
+
":"
+
clientId
,
generateToken
);
...
@@ -96,10 +96,10 @@ public class LoginTest {
...
@@ -96,10 +96,10 @@ public class LoginTest {
@Test
@Test
public
void
test
()
throws
Exception
{
public
void
test
()
throws
Exception
{
// 时间戳
// 时间戳
String
timestamp
=
"162
0456403794
"
;
String
timestamp
=
"162
6665156369
"
;
String
clientId
=
"
hahah_30
"
;
String
clientId
=
"
aaaaa1
"
;
String
appKey
=
"
elLwpel1gWCHDqZy
"
;
String
appKey
=
"
QNtP3EjtLw26ekt0
"
;
String
sign
=
"
9db5c1383829d346adba48182fd8f503
"
;
String
sign
=
"
a0b128928849c44bb0b7ae82944770b5
"
;
String
token
=
getToken
(
timestamp
,
clientId
,
appKey
,
sign
);
String
token
=
getToken
(
timestamp
,
clientId
,
appKey
,
sign
);
System
.
out
.
println
(
"token:"
+
token
);
System
.
out
.
println
(
"token:"
+
token
);
}
}
...
...
bootstrap/src/test/java/io/geekidea/springbootplus/test/SignTest.java
View file @
e997ccd7
...
@@ -4,7 +4,7 @@ import cn.hutool.crypto.digest.MD5;
...
@@ -4,7 +4,7 @@ import cn.hutool.crypto.digest.MD5;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.
tillo.
app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
import
java.util.Date
;
import
java.util.Date
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/annotation/ReceiveTypeAnnotation.java
→
common/src/main/java/com/wecloud/im/app_ws/annotation/ReceiveTypeAnnotation.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
annotation
;
package
com
.
wecloud
.
im
.
app_ws
.
annotation
;
import
com.wecloud.im.
tillo.
app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.app_ws.enums.WsRequestCmdEnum
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.ElementType
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/cache/UserCache.java
→
common/src/main/java/com/wecloud/im/app_ws/cache/UserCache.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
cache
;
package
com
.
wecloud
.
im
.
app_ws
.
cache
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/enums/WsRequestCmdEnum.java
→
common/src/main/java/com/wecloud/im/app_ws/enums/WsRequestCmdEnum.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
enums
;
package
com
.
wecloud
.
im
.
app_ws
.
enums
;
/**
/**
* @Description ws请求类型
* @Description ws请求类型
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/enums/WsResponseCmdEnum.java
→
common/src/main/java/com/wecloud/im/app_ws/enums/WsResponseCmdEnum.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
enums
;
package
com
.
wecloud
.
im
.
app_ws
.
enums
;
/**
/**
* @Description ws响应类型
* @Description ws响应类型
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/FileHelperOfflineModel.java
→
common/src/main/java/com/wecloud/im/app_ws/model/FileHelperOfflineModel.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
;
package
com
.
wecloud
.
im
.
app_ws
.
model
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/RequestHeaderConstants.java
→
common/src/main/java/com/wecloud/im/app_ws/model/RequestHeaderConstants.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
;
package
com
.
wecloud
.
im
.
app_ws
.
model
;
/**
/**
* @author wjm
* @author wjm
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/ResponseModel.java
→
common/src/main/java/com/wecloud/im/app_ws/model/ResponseModel.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
;
package
com
.
wecloud
.
im
.
app_ws
.
model
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/ResultStatus.java
→
common/src/main/java/com/wecloud/im/app_ws/model/ResultStatus.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
;
package
com
.
wecloud
.
im
.
app_ws
.
model
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.Getter
;
...
@@ -22,17 +22,17 @@ public enum ResultStatus {
...
@@ -22,17 +22,17 @@ public enum ResultStatus {
/**
/**
* 返回码
* 返回码
*/
*/
private
int
code
;
private
final
int
code
;
/**
/**
* 默认返回英文结果描述 en
* 默认返回英文结果描述 en
*/
*/
private
String
message
;
private
final
String
message
;
/**
/**
* 返回中文结果描述 zh_simple
* 返回中文结果描述 zh_simple
*/
*/
private
String
zhMessage
;
private
final
String
zhMessage
;
}
}
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/WsConstants.java
→
common/src/main/java/com/wecloud/im/app_ws/model/WsConstants.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
;
package
com
.
wecloud
.
im
.
app_ws
.
model
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/request/ReceiveModel.java
→
common/src/main/java/com/wecloud/im/app_ws/model/request/ReceiveModel.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
.
request
;
package
com
.
wecloud
.
im
.
app_ws
.
model
.
request
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/model/request/RequestOfflineMsgModel.java
→
common/src/main/java/com/wecloud/im/app_ws/model/request/RequestOfflineMsgModel.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
model
.
request
;
package
com
.
wecloud
.
im
.
app_ws
.
model
.
request
;
import
lombok.Data
;
import
lombok.Data
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/receive/ReadWsData.java
→
common/src/main/java/com/wecloud/im/app_ws/receive/ReadWsData.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
receive
;
package
com
.
wecloud
.
im
.
app_ws
.
receive
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.
tillo.
app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.
tillo.
app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.
tillo.
app_ws.service.MangerChannelService
;
import
com.wecloud.im.app_ws.service.MangerChannelService
;
import
com.wecloud.im.
tillo.
app_ws.service.WriteDataService
;
import
com.wecloud.im.app_ws.service.WriteDataService
;
import
com.wecloud.im.
tillo.
app_ws.strategy.AbstractReceiveStrategy
;
import
com.wecloud.im.app_ws.strategy.AbstractReceiveStrategy
;
import
com.wecloud.im.
tillo.
app_ws.strategy.ReceiveStrategyContext
;
import
com.wecloud.im.app_ws.strategy.ReceiveStrategyContext
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelHandlerContext
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/sender/PushTask.java
→
common/src/main/java/com/wecloud/im/app_ws/sender/PushTask.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
sender
;
package
com
.
wecloud
.
im
.
app_ws
.
sender
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClient
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/sender/WsWriter.java
→
common/src/main/java/com/wecloud/im/app_ws/sender/WsWriter.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
sender
;
package
com
.
wecloud
.
im
.
app_ws
.
sender
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/service/MangerChannelService.java
→
common/src/main/java/com/wecloud/im/app_ws/service/MangerChannelService.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
service
;
package
com
.
wecloud
.
im
.
app_ws
.
service
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
...
@@ -22,10 +22,13 @@ public interface MangerChannelService {
...
@@ -22,10 +22,13 @@ public interface MangerChannelService {
Map
<
String
,
NioSocketChannel
>
CHANNEL_MAP
=
new
ConcurrentHashMap
<>();
Map
<
String
,
NioSocketChannel
>
CHANNEL_MAP
=
new
ConcurrentHashMap
<>();
/**
/**
* CLIENT_ID
* CLIENT_ID
,是客户端的字符串id
*/
*/
AttributeKey
<
String
>
CLIENT_ID
=
AttributeKey
.
valueOf
(
"CLIENTID"
);
AttributeKey
<
String
>
CLIENT_ID
=
AttributeKey
.
valueOf
(
"CLIENTID"
);
/**
* 是app的字符串id
*/
AttributeKey
<
String
>
APP_KEY
=
AttributeKey
.
valueOf
(
"APPKEY"
);
AttributeKey
<
String
>
APP_KEY
=
AttributeKey
.
valueOf
(
"APPKEY"
);
/**
/**
...
@@ -80,12 +83,21 @@ public interface MangerChannelService {
...
@@ -80,12 +83,21 @@ public interface MangerChannelService {
/**
/**
* 获取用户在线状态
*
* @param toAppKey
* @param toClientId
* @return true:在线, false 不在线
*/
boolean
getOnlineStatus
(
String
toAppKey
,
String
toClientId
);
/**
* 下发数据
* 下发数据
*
*
* @param msg
* @param msg
* @return
* @return
*/
*/
boolean
writeData
(
String
msg
,
String
toAppKey
,
String
toClientId
);
boolean
writeData
(
String
msg
,
String
toAppKey
,
String
toClientId
);
// /**
// /**
// * rpc异步下发数据
// * rpc异步下发数据
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/service/WriteDataService.java
→
common/src/main/java/com/wecloud/im/app_ws/service/WriteDataService.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
service
;
package
com
.
wecloud
.
im
.
app_ws
.
service
;
import
com.wecloud.im.
tillo.
app_ws.model.ResponseModel
;
import
com.wecloud.im.app_ws.model.ResponseModel
;
import
com.wecloud.im.
tillo.
app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
/**
/**
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/service/impl/MangerChannelServiceImpl.java
→
common/src/main/java/com/wecloud/im/app_ws/service/impl/MangerChannelServiceImpl.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
service
.
impl
;
package
com
.
wecloud
.
im
.
app_ws
.
service
.
impl
;
import
com.wecloud.im.
tillo.
app_ws.cache.UserCache
;
import
com.wecloud.im.app_ws.cache.UserCache
;
import
com.wecloud.im.
tillo.
app_ws.service.MangerChannelService
;
import
com.wecloud.im.app_ws.service.MangerChannelService
;
import
io.netty.channel.Channel
;
import
io.netty.channel.Channel
;
import
io.netty.channel.ChannelFuture
;
import
io.netty.channel.ChannelFuture
;
import
io.netty.channel.ChannelFutureListener
;
import
io.netty.channel.ChannelFutureListener
;
...
@@ -271,6 +271,34 @@ public class MangerChannelServiceImpl implements MangerChannelService {
...
@@ -271,6 +271,34 @@ public class MangerChannelServiceImpl implements MangerChannelService {
//
//
// }
// }
/**
* 获取用户在线状态
*
* @param toAppKey
* @param toClientId
* @return true:在线, false 不在线
*/
@Override
public
boolean
getOnlineStatus
(
String
toAppKey
,
String
toClientId
)
{
NioSocketChannel
nioSocketChannel
=
get
(
toAppKey
,
toClientId
);
if
(
null
==
nioSocketChannel
)
{
// userCache.offline(toAppKey + toClientId);
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"writeData 不存在 连接为空:"
+
toAppKey
+
toClientId
);
}
return
false
;
}
// 判断连接是否断开
if
(
nioSocketChannel
.
isShutdown
())
{
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"writeData连接断开:"
+
toAppKey
+
toClientId
+
"channelId:"
+
nioSocketChannel
.
id
().
asLongText
());
}
return
false
;
}
return
true
;
}
@Override
@Override
public
boolean
writeData
(
String
msg
,
String
toAppKey
,
String
toClientId
)
{
public
boolean
writeData
(
String
msg
,
String
toAppKey
,
String
toClientId
)
{
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/service/impl/WriteDataServiceImpl.java
→
common/src/main/java/com/wecloud/im/app_ws/service/impl/WriteDataServiceImpl.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
service
.
impl
;
package
com
.
wecloud
.
im
.
app_ws
.
service
.
impl
;
import
cn.hutool.core.thread.ThreadFactoryBuilder
;
import
cn.hutool.core.thread.ThreadFactoryBuilder
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.
tillo.
app_ws.model.ResponseModel
;
import
com.wecloud.im.app_ws.model.ResponseModel
;
import
com.wecloud.im.
tillo.
app_ws.model.WsConstants
;
import
com.wecloud.im.app_ws.model.WsConstants
;
import
com.wecloud.im.
tillo.
app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.
tillo.
app_ws.service.MangerChannelService
;
import
com.wecloud.im.app_ws.service.MangerChannelService
;
import
com.wecloud.im.
tillo.
app_ws.service.WriteDataService
;
import
com.wecloud.im.app_ws.service.WriteDataService
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/strategy/AbstractReceiveStrategy.java
→
common/src/main/java/com/wecloud/im/app_ws/strategy/AbstractReceiveStrategy.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
strategy
;
package
com
.
wecloud
.
im
.
app_ws
.
strategy
;
import
com.wecloud.im.
tillo.
app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelHandlerContext
;
/**
/**
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/strategy/ReceiveStrategyContext.java
→
common/src/main/java/com/wecloud/im/app_ws/strategy/ReceiveStrategyContext.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
strategy
;
package
com
.
wecloud
.
im
.
app_ws
.
strategy
;
import
com.wecloud.im.
tillo.
app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.
tillo.
app_ws.utils.SpringBeanUtils
;
import
com.wecloud.im.app_ws.utils.SpringBeanUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -13,7 +13,7 @@ import java.util.Map;
...
@@ -13,7 +13,7 @@ import java.util.Map;
*/
*/
public
class
ReceiveStrategyContext
{
public
class
ReceiveStrategyContext
{
private
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
;
private
final
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
;
public
ReceiveStrategyContext
(
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
)
{
public
ReceiveStrategyContext
(
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
)
{
this
.
strategyMap
=
strategyMap
;
this
.
strategyMap
=
strategyMap
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/strategy/ReceiveStrategyProcessor.java
→
common/src/main/java/com/wecloud/im/app_ws/strategy/ReceiveStrategyProcessor.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
strategy
;
package
com
.
wecloud
.
im
.
app_ws
.
strategy
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.wecloud.im.
tillo.
app_ws.annotation.ReceiveTypeAnnotation
;
import
com.wecloud.im.app_ws.annotation.ReceiveTypeAnnotation
;
import
com.wecloud.im.
tillo.
app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.
tillo.
app_ws.utils.ClassScanner
;
import
com.wecloud.im.app_ws.utils.ClassScanner
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.config.BeanFactoryPostProcessor
;
import
org.springframework.beans.factory.config.BeanFactoryPostProcessor
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/strategy/concrete/ImConcreteReceiveStrategy.java
→
common/src/main/java/com/wecloud/im/app_ws/strategy/concrete/ImConcreteReceiveStrategy.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
strategy
.
concrete
;
package
com
.
wecloud
.
im
.
app_ws
.
strategy
.
concrete
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.app_ws.annotation.ReceiveTypeAnnotation
;
import
com.wecloud.im.app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.app_ws.model.ResponseModel
;
import
com.wecloud.im.app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.app_ws.sender.PushTask
;
import
com.wecloud.im.app_ws.service.MangerChannelService
;
import
com.wecloud.im.app_ws.service.WriteDataService
;
import
com.wecloud.im.app_ws.strategy.AbstractReceiveStrategy
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImConversationMembers
;
...
@@ -15,14 +23,6 @@ import com.wecloud.im.service.ImClientService;
...
@@ -15,14 +23,6 @@ import com.wecloud.im.service.ImClientService;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.tillo.app_ws.annotation.ReceiveTypeAnnotation
;
import
com.wecloud.im.tillo.app_ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.tillo.app_ws.model.ResponseModel
;
import
com.wecloud.im.tillo.app_ws.model.request.ReceiveModel
;
import
com.wecloud.im.tillo.app_ws.sender.PushTask
;
import
com.wecloud.im.tillo.app_ws.service.MangerChannelService
;
import
com.wecloud.im.tillo.app_ws.service.WriteDataService
;
import
com.wecloud.im.tillo.app_ws.strategy.AbstractReceiveStrategy
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/utils/ClassScanner.java
→
common/src/main/java/com/wecloud/im/app_ws/utils/ClassScanner.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
utils
;
package
com
.
wecloud
.
im
.
app_ws
.
utils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.springframework.beans.factory.BeanDefinitionStoreException
;
import
org.springframework.beans.factory.BeanDefinitionStoreException
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/utils/EncrypDES.java
→
common/src/main/java/com/wecloud/im/app_ws/utils/EncrypDES.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
utils
;
package
com
.
wecloud
.
im
.
app_ws
.
utils
;
import
javax.crypto.Cipher
;
import
javax.crypto.Cipher
;
import
java.security.Key
;
import
java.security.Key
;
...
@@ -6,7 +6,7 @@ import java.security.Key;
...
@@ -6,7 +6,7 @@ import java.security.Key;
public
class
EncrypDES
{
public
class
EncrypDES
{
// 字符串默认键值
// 字符串默认键值
private
static
String
strDefaultKey
=
"inventec2020@#$%^&"
;
private
static
final
String
strDefaultKey
=
"inventec2020@#$%^&"
;
//加密工具
//加密工具
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/utils/FullHttpRequestUtils.java
→
common/src/main/java/com/wecloud/im/app_ws/utils/FullHttpRequestUtils.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
utils
;
package
com
.
wecloud
.
im
.
app_ws
.
utils
;
import
io.netty.buffer.ByteBuf
;
import
io.netty.buffer.ByteBuf
;
import
io.netty.channel.ChannelFutureListener
;
import
io.netty.channel.ChannelFutureListener
;
...
@@ -29,7 +29,7 @@ import static io.netty.buffer.Unpooled.copiedBuffer;
...
@@ -29,7 +29,7 @@ import static io.netty.buffer.Unpooled.copiedBuffer;
* @Date 2019-07-19
* @Date 2019-07-19
*/
*/
public
class
FullHttpRequestUtils
{
public
class
FullHttpRequestUtils
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
RequestHandler
.
class
);
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
RequestHandler
.
class
);
/**
/**
* 参数解析
* 参数解析
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/utils/RSAGenerator.java
→
common/src/main/java/com/wecloud/im/app_ws/utils/RSAGenerator.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
utils
;
package
com
.
wecloud
.
im
.
app_ws
.
utils
;
import
java.util.UUID
;
import
java.util.UUID
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/utils/RedisUtils.java
→
common/src/main/java/com/wecloud/im/app_ws/utils/RedisUtils.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
utils
;
package
com
.
wecloud
.
im
.
app_ws
.
utils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisCallback
;
import
org.springframework.data.redis.core.RedisCallback
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
app_ws/utils/SpringBeanUtils.java
→
common/src/main/java/com/wecloud/im/app_ws/utils/SpringBeanUtils.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
.
utils
;
package
com
.
wecloud
.
im
.
app_ws
.
utils
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
...
...
common/src/main/java/com/wecloud/im/controller/ImApplicationController.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
controller
;
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.app_ws.utils.RSAGenerator
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.param.ImApplicationPageParam
;
import
com.wecloud.im.param.ImApplicationPageParam
;
import
com.wecloud.im.param.ImApplicationQueryVo
;
import
com.wecloud.im.param.ImApplicationQueryVo
;
import
com.wecloud.im.param.add.ImApplicationAdd
;
import
com.wecloud.im.param.add.ImApplicationAdd
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.tillo.app_ws.utils.RSAGenerator
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
...
...
common/src/main/java/com/wecloud/im/controller/ImClientBlacklistController.java
View file @
e997ccd7
...
@@ -39,7 +39,6 @@ public class ImClientBlacklistController extends BaseController {
...
@@ -39,7 +39,6 @@ public class ImClientBlacklistController extends BaseController {
* 添加黑名单
* 添加黑名单
*/
*/
@PostMapping
(
"/add"
)
@PostMapping
(
"/add"
)
@OperationLog
(
name
=
"拉入黑名单"
,
type
=
OperationLogType
.
ADD
)
@ApiOperation
(
value
=
"拉入黑名单"
)
@ApiOperation
(
value
=
"拉入黑名单"
)
public
ApiResult
<
Boolean
>
addImClientBlacklist
(
@Validated
(
Add
.
class
)
@RequestBody
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
public
ApiResult
<
Boolean
>
addImClientBlacklist
(
@Validated
(
Add
.
class
)
@RequestBody
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
return
imClientBlacklistService
.
addImClientBlacklist
(
imClientBlacklistUpdate
);
return
imClientBlacklistService
.
addImClientBlacklist
(
imClientBlacklistUpdate
);
...
@@ -50,7 +49,6 @@ public class ImClientBlacklistController extends BaseController {
...
@@ -50,7 +49,6 @@ public class ImClientBlacklistController extends BaseController {
* 删除黑名单
* 删除黑名单
*/
*/
@PostMapping
(
"/delete"
)
@PostMapping
(
"/delete"
)
@OperationLog
(
name
=
"移出黑名单"
,
type
=
OperationLogType
.
DELETE
)
@ApiOperation
(
value
=
"移出黑名单"
)
@ApiOperation
(
value
=
"移出黑名单"
)
public
ApiResult
<
Boolean
>
deleteImClientBlacklist
(
@RequestBody
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
public
ApiResult
<
Boolean
>
deleteImClientBlacklist
(
@RequestBody
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
return
imClientBlacklistService
.
removeImClientBlacklist
(
imClientBlacklistUpdate
);
return
imClientBlacklistService
.
removeImClientBlacklist
(
imClientBlacklistUpdate
);
...
...
common/src/main/java/com/wecloud/im/controller/ImClientController.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
controller
;
package
com
.
wecloud
.
im
.
controller
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.app_ws.service.MangerChannelService
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.param.add.ImClientDeviceInfoAdd
;
import
com.wecloud.im.param.add.ImClientDeviceInfoAdd
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.vo.ImOnlineStatusVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.core.validator.groups.Add
;
import
io.geekidea.springbootplus.framework.core.validator.groups.Add
;
import
io.geekidea.springbootplus.framework.log.annotation.OperationLog
;
import
io.geekidea.springbootplus.framework.log.annotation.OperationLog
;
import
io.geekidea.springbootplus.framework.log.enums.OperationLogType
;
import
io.geekidea.springbootplus.framework.log.enums.OperationLogType
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -32,6 +39,12 @@ public class ImClientController extends BaseController {
...
@@ -32,6 +39,12 @@ public class ImClientController extends BaseController {
@Autowired
@Autowired
private
ImClientService
imClientService
;
private
ImClientService
imClientService
;
@Autowired
private
MangerChannelService
mangerChannelService
;
@Autowired
private
ImApplicationService
imApplicationService
;
/**
/**
* 添加或修改推送设备信息
* 添加或修改推送设备信息
*/
*/
...
@@ -43,6 +56,32 @@ public class ImClientController extends BaseController {
...
@@ -43,6 +56,32 @@ public class ImClientController extends BaseController {
return
ApiResult
.
result
(
flag
);
return
ApiResult
.
result
(
flag
);
}
}
/**
* 获取用户在线状态
*
* @return true:在线, false 不在线
*/
@PostMapping
(
"/getOnlineStatus"
)
@OperationLog
(
name
=
"获取用户在线状态"
,
type
=
OperationLogType
.
ADD
)
@ApiOperation
(
value
=
"获取用户在线状态"
)
ApiResult
<
ImOnlineStatusVo
>
getOnlineStatus
(
String
clientId
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询appid
ImApplication
imApplication
=
imApplicationService
.
getOne
(
new
QueryWrapper
<
ImApplication
>().
lambda
()
.
select
(
ImApplication:
:
getId
,
ImApplication:
:
getAppKey
)
.
eq
(
ImApplication:
:
getAppKey
,
curentJwtToken
.
getAppKey
())
);
boolean
onlineStatus
=
mangerChannelService
.
getOnlineStatus
(
imApplication
.
getAppKey
(),
clientId
);
ImOnlineStatusVo
imOnlineStatusVo
=
new
ImOnlineStatusVo
();
imOnlineStatusVo
.
setStatus
(
onlineStatus
);
return
ApiResult
.
ok
(
imOnlineStatusVo
);
}
// /**
// /**
// * 添加终端表
// * 添加终端表
// */
// */
...
...
common/src/main/java/com/wecloud/im/
tillo/
netty/core/ChannelInboundHandler.java
→
common/src/main/java/com/wecloud/im/netty/core/ChannelInboundHandler.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
netty
.
core
;
package
com
.
wecloud
.
im
.
netty
.
core
;
import
com.wecloud.im.
tillo.
netty.handler.NettyApiRequest
;
import
com.wecloud.im.netty.handler.NettyApiRequest
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelInboundHandlerAdapter
;
import
io.netty.channel.ChannelInboundHandlerAdapter
;
...
...
common/src/main/java/com/wecloud/im/
tillo/
netty/core/NettyChannelInitializer.java
→
common/src/main/java/com/wecloud/im/netty/core/NettyChannelInitializer.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
netty
.
core
;
package
com
.
wecloud
.
im
.
netty
.
core
;
import
com.wecloud.im.
tillo.
app_ws.model.WsConstants
;
import
com.wecloud.im.app_ws.model.WsConstants
;
import
io.netty.channel.ChannelInitializer
;
import
io.netty.channel.ChannelInitializer
;
import
io.netty.channel.ChannelPipeline
;
import
io.netty.channel.ChannelPipeline
;
import
io.netty.channel.socket.SocketChannel
;
import
io.netty.channel.socket.SocketChannel
;
...
@@ -8,6 +8,7 @@ import io.netty.handler.codec.http.HttpObjectAggregator;
...
@@ -8,6 +8,7 @@ import io.netty.handler.codec.http.HttpObjectAggregator;
import
io.netty.handler.codec.http.HttpServerCodec
;
import
io.netty.handler.codec.http.HttpServerCodec
;
import
io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler
;
import
io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler
;
import
io.netty.handler.stream.ChunkedWriteHandler
;
import
io.netty.handler.stream.ChunkedWriteHandler
;
import
io.netty.handler.timeout.ReadTimeoutHandler
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -27,6 +28,10 @@ public class NettyChannelInitializer extends ChannelInitializer<SocketChannel> {
...
@@ -27,6 +28,10 @@ public class NettyChannelInitializer extends ChannelInitializer<SocketChannel> {
// 服务端api接口
// 服务端api接口
pipeline
.
addLast
(
"SingleHttpRequestHandler"
,
channelInboundHandler
);
pipeline
.
addLast
(
"SingleHttpRequestHandler"
,
channelInboundHandler
);
// 连接超时管理 (判断通道是否有数据写入)
pipeline
.
addLast
(
"readTimeoutHandler"
,
new
ReadTimeoutHandler
(
60
));
// "/appws"路径 升级长连接
// "/appws"路径 升级长连接
pipeline
.
addLast
(
"appWebSocketServerotocolHandler"
,
new
WebSocketServerProtocolHandler
(
WsConstants
.
WS_URL
));
pipeline
.
addLast
(
"appWebSocketServerotocolHandler"
,
new
WebSocketServerProtocolHandler
(
WsConstants
.
WS_URL
));
}
}
...
...
common/src/main/java/com/wecloud/im/
tillo/
netty/core/NettyStart.java
→
common/src/main/java/com/wecloud/im/netty/core/NettyStart.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
netty
.
core
;
package
com
.
wecloud
.
im
.
netty
.
core
;
import
io.netty.bootstrap.ServerBootstrap
;
import
io.netty.bootstrap.ServerBootstrap
;
import
io.netty.buffer.PooledByteBufAllocator
;
import
io.netty.buffer.PooledByteBufAllocator
;
...
@@ -14,9 +14,9 @@ import org.springframework.stereotype.Component;
...
@@ -14,9 +14,9 @@ import org.springframework.stereotype.Component;
@Slf4j
@Slf4j
public
class
NettyStart
{
public
class
NettyStart
{
private
final
NettyChannelInitializer
nettyChannelInitializer
;
private
final
NettyChannelInitializer
nettyChannelInitializer
;
private
static
EventLoopGroup
boss
=
new
NioEventLoopGroup
(
1
);
private
static
final
EventLoopGroup
boss
=
new
NioEventLoopGroup
(
1
);
private
static
EventLoopGroup
work
=
new
NioEventLoopGroup
();
private
static
final
EventLoopGroup
work
=
new
NioEventLoopGroup
();
private
static
ServerBootstrap
serverBootstrap
=
new
ServerBootstrap
();
private
static
final
ServerBootstrap
serverBootstrap
=
new
ServerBootstrap
();
static
{
static
{
serverBootstrap
.
group
(
boss
,
work
);
serverBootstrap
.
group
(
boss
,
work
);
...
...
common/src/main/java/com/wecloud/im/
tillo/app_ws/Ws
Handler.java
→
common/src/main/java/com/wecloud/im/
netty/core/WsRead
Handler.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
app_ws
;
package
com
.
wecloud
.
im
.
netty
.
core
;
import
cn.hutool.core.thread.ThreadFactoryBuilder
;
import
cn.hutool.core.thread.ThreadFactoryBuilder
;
import
com.wecloud.im.
tillo.
app_ws.model.WsConstants
;
import
com.wecloud.im.app_ws.model.WsConstants
;
import
com.wecloud.im.
tillo.
app_ws.receive.ReadWsData
;
import
com.wecloud.im.app_ws.receive.ReadWsData
;
import
com.wecloud.im.
tillo.
app_ws.service.MangerChannelService
;
import
com.wecloud.im.app_ws.service.MangerChannelService
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.channel.ChannelHandler
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.SimpleChannelInboundHandler
;
import
io.netty.channel.SimpleChannelInboundHandler
;
...
@@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit;
...
@@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit;
@Component
@Component
@ChannelHandler
.
Sharable
@ChannelHandler
.
Sharable
@Slf4j
@Slf4j
public
class
WsHandler
extends
SimpleChannelInboundHandler
<
TextWebSocketFrame
>
{
public
class
Ws
Read
Handler
extends
SimpleChannelInboundHandler
<
TextWebSocketFrame
>
{
@Resource
@Resource
private
ReadWsData
readWsData
;
private
ReadWsData
readWsData
;
...
@@ -97,8 +97,9 @@ public class WsHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
...
@@ -97,8 +97,9 @@ public class WsHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
@Override
@Override
public
void
handlerAdded
(
ChannelHandlerContext
ctx
)
{
public
void
handlerAdded
(
ChannelHandlerContext
ctx
)
{
String
userIdByChannel
=
mangerChannelService
.
getUserIdByChannel
(
ctx
);
String
userIdByChannel
=
mangerChannelService
.
getUserIdByChannel
(
ctx
);
log
.
debug
(
"uid:"
+
userIdByChannel
+
",
app端连接WS成功
"
+
",channelId:"
+
ctx
.
channel
().
id
().
asLongText
());
log
.
debug
(
"uid:"
+
userIdByChannel
+
","
+
",channelId:"
+
ctx
.
channel
().
id
().
asLongText
());
log
.
debug
(
"连接WS成功handlerAdded"
);
log
.
debug
(
"连接WS成功handlerAdded"
);
}
}
...
...
common/src/main/java/com/wecloud/im/
tillo/
netty/handler/NettyApiRequest.java
→
common/src/main/java/com/wecloud/im/netty/handler/NettyApiRequest.java
View file @
e997ccd7
package
com
.
wecloud
.
im
.
tillo
.
netty
.
handler
;
package
com
.
wecloud
.
im
.
netty
.
handler
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.auth0.jwt.interfaces.DecodedJWT
;
import
com.auth0.jwt.interfaces.DecodedJWT
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.
tillo.app_ws.WsHandler
;
import
com.wecloud.im.
app_ws.model.WsConstants
;
import
com.wecloud.im.
tillo.app_ws.model.WsConstants
;
import
com.wecloud.im.
app_ws.service.MangerChannelService
;
import
com.wecloud.im.
tillo.app_ws.service.MangerChannelService
;
import
com.wecloud.im.
app_ws.utils.FullHttpRequestUtils
;
import
com.wecloud.im.
tillo.app_ws.utils.FullHttpRequestUtils
;
import
com.wecloud.im.
netty.core.WsReadHandler
;
import
io.geekidea.springbootplus.config.constant.CommonConstant
;
import
io.geekidea.springbootplus.config.constant.CommonConstant
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
@@ -44,7 +44,7 @@ public class NettyApiRequest {
...
@@ -44,7 +44,7 @@ public class NettyApiRequest {
private
MangerChannelService
appUserChannelsService
;
private
MangerChannelService
appUserChannelsService
;
@Resource
@Resource
private
Ws
Handler
appIm
Handler
;
private
Ws
ReadHandler
appImRead
Handler
;
/**
/**
* http请求接收
* http请求接收
...
@@ -130,7 +130,7 @@ public class NettyApiRequest {
...
@@ -130,7 +130,7 @@ public class NettyApiRequest {
ctx
.
channel
().
attr
(
MangerChannelService
.
APP_KEY
).
set
(
appKey
);
ctx
.
channel
().
attr
(
MangerChannelService
.
APP_KEY
).
set
(
appKey
);
// 添加长连接handler
// 添加长连接handler
ctx
.
pipeline
().
addLast
(
"appImHandler"
,
appImHandler
);
ctx
.
pipeline
().
addLast
(
"appImHandler"
,
appIm
Read
Handler
);
// 保存用户上下文对象
// 保存用户上下文对象
appUserChannelsService
.
put
(
appKey
,
clientId
,
(
NioSocketChannel
)
ctx
.
channel
());
appUserChannelsService
.
put
(
appKey
,
clientId
,
(
NioSocketChannel
)
ctx
.
channel
());
...
...
common/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
View file @
e997ccd7
...
@@ -50,6 +50,7 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
...
@@ -50,6 +50,7 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
}
}
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
addImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
public
ApiResult
<
Boolean
>
addImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
ImClient
client
=
imClientService
.
getClient
();
ImClient
client
=
imClientService
.
getClient
();
...
@@ -70,6 +71,7 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
...
@@ -70,6 +71,7 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
}
}
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
removeImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
public
ApiResult
<
Boolean
>
removeImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
// 操作者
// 操作者
ImClient
client
=
imClientService
.
getClient
();
ImClient
client
=
imClientService
.
getClient
();
...
...
common/src/main/java/com/wecloud/im/service/impl/ImClientLoginServiceImpl.java
View file @
e997ccd7
...
@@ -20,6 +20,8 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -20,6 +20,8 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.time.Duration
;
@Service
@Service
@Slf4j
@Slf4j
public
class
ImClientLoginServiceImpl
implements
ImClientLoginService
{
public
class
ImClientLoginServiceImpl
implements
ImClientLoginService
{
...
@@ -94,7 +96,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
...
@@ -94,7 +96,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
}
}
// 生成token
// 生成token
String
generateToken
=
JwtUtil
.
generateToken
(
imTokenVerify
.
getClientId
(),
imTokenVerify
.
getAppKey
(),
secret
,
null
);
String
generateToken
=
JwtUtil
.
generateToken
(
imTokenVerify
.
getClientId
(),
imTokenVerify
.
getAppKey
(),
secret
,
Duration
.
ofDays
(
99999
)
);
// 保存redis
// 保存redis
// redisTemplate.opsForValue().set("client:" + imApplication.getAppKey() + ":" + imTokenVerify.getClientId(), generateToken);
// redisTemplate.opsForValue().set("client:" + imApplication.getAppKey() + ":" + imTokenVerify.getClientId(), generateToken);
...
...
common/src/main/java/com/wecloud/im/vo/ImOnlineStatusVo.java
0 → 100644
View file @
e997ccd7
package
com
.
wecloud
.
im
.
vo
;
import
io.geekidea.springbootplus.framework.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* 在线状态
*
* @author wei
* @since 2021-05-07
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"ImOnlineStatusVo"
)
public
class
ImOnlineStatusVo
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"true:在线, false 不在线"
)
private
Boolean
status
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment