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
1c48aa4f
Commit
1c48aa4f
authored
Dec 20, 2021
by
lixiaozhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
策略模块的代码规范
parent
c22b869b
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
36 additions
and
35 deletions
+36
-35
core/src/main/java/com/wecloud/im/netty/handler/NettyApiRequest.java
+11
-10
core/src/main/java/com/wecloud/im/ws/annotation/ImCmdType.java
+1
-1
core/src/main/java/com/wecloud/im/ws/receive/ReadWsData.java
+4
-4
core/src/main/java/com/wecloud/im/ws/strategy/AbstractImCmdStrategy.java
+2
-2
core/src/main/java/com/wecloud/im/ws/strategy/ImCmdStrategyFactory.java
+4
-4
core/src/main/java/com/wecloud/im/ws/strategy/ImCmdStrategyProcessor.java
+6
-6
core/src/main/java/com/wecloud/im/ws/strategy/concrete/NormalChatStrategy.java
+4
-4
core/src/main/java/com/wecloud/im/ws/strategy/concrete/SingleRtcStrategy.java
+4
-4
No files found.
core/src/main/java/com/wecloud/im/netty/handler/NettyApiRequest.java
View file @
1c48aa4f
...
...
@@ -82,26 +82,27 @@ public class NettyApiRequest {
private
void
initWs
(
ChannelHandlerContext
ctx
,
FullHttpRequest
httpRequest
)
throws
Exception
{
Map
<
String
,
String
>
paramMap
=
FullHttpRequestUtils
.
parameterParse
(
httpRequest
);
String
token
=
paramMap
.
get
(
WsConstants
.
TOKEN
);
DecodedJWT
jwtInfo
=
JwtUtil
.
getJwtInfo
(
token
);
String
payload
=
jwtInfo
.
getPayload
();
Base64
.
Decoder
decoder
=
Base64
.
getDecoder
();
payload
=
new
String
(
decoder
.
decode
(
payload
),
StandardCharsets
.
UTF_8
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
payload
);
String
appKey
=
(
String
)
jsonObject
.
get
(
"appKey"
);
String
clientId
=
(
String
)
jsonObject
.
get
(
CommonConstant
.
CLIENT_ID
);
if
(
StringUtils
.
isBlank
(
token
))
{
String
context
=
new
JsonMapper
().
writeValueAsString
(
ApiResult
.
result
(
ApiCode
.
FAIL
,
"token不能为空"
,
(
Object
)
null
));
FullHttpRequestUtils
.
send
(
ctx
,
context
,
HttpResponseStatus
.
OK
);
return
;
}
if
(
JwtUtil
.
isExpired
(
token
))
{
String
context
=
new
JsonMapper
().
writeValueAsString
(
ApiResult
.
result
(
ApiCode
.
FAIL
,
"JWT Token已过期,token"
,
(
Object
)
null
));
FullHttpRequestUtils
.
send
(
ctx
,
context
,
HttpResponseStatus
.
OK
);
return
;
}
DecodedJWT
jwtInfo
=
JwtUtil
.
getJwtInfo
(
token
);
String
payload
=
jwtInfo
.
getPayload
();
Base64
.
Decoder
decoder
=
Base64
.
getDecoder
();
payload
=
new
String
(
decoder
.
decode
(
payload
),
StandardCharsets
.
UTF_8
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
payload
);
String
appKey
=
(
String
)
jsonObject
.
get
(
CommonConstant
.
APP_KEY
);
String
clientId
=
(
String
)
jsonObject
.
get
(
CommonConstant
.
CLIENT_ID
);
// 从redis获取jwt的token 验签token
JwtToken
jwtToken
=
shiroLoginService
.
getJwtTokenForRedis
(
token
);
...
...
@@ -113,9 +114,9 @@ public class NettyApiRequest {
}
if
((!
jwtToken
.
getClientId
().
equals
(
clientId
))
||
(!
jwtToken
.
getAppKey
().
equals
(
appKey
)))
{
log
.
info
(
"clientId appKey 不一致"
);
String
context
=
new
JsonMapper
().
writeValueAsString
(
ApiResult
.
result
(
ApiCode
.
FAIL
,
"clientId appKey 不一致"
,
(
Object
)
null
));
FullHttpRequestUtils
.
send
(
ctx
,
context
,
HttpResponseStatus
.
OK
);
log
.
info
(
"clientId appKey 不一致"
);
return
;
}
...
...
core/src/main/java/com/wecloud/im/ws/annotation/
CmdTypeAnnotation
.java
→
core/src/main/java/com/wecloud/im/ws/annotation/
ImCmdType
.java
View file @
1c48aa4f
...
...
@@ -17,7 +17,7 @@ import java.lang.annotation.Target;
@Retention
(
RetentionPolicy
.
RUNTIME
)
//RUNTIME运行时保留
@Target
(
ElementType
.
TYPE
)
//type描述类、接口
@Documented
public
@interface
CmdTypeAnnotation
{
public
@interface
ImCmdType
{
WsRequestCmdEnum
type
();
}
core/src/main/java/com/wecloud/im/ws/receive/ReadWsData.java
View file @
1c48aa4f
...
...
@@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
import
com.wecloud.im.ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.ws.model.request.ReceiveModel
;
import
com.wecloud.im.ws.service.WriteDataService
;
import
com.wecloud.im.ws.strategy.AbstractImCmd
;
import
com.wecloud.im.ws.strategy.ImCmd
Context
;
import
com.wecloud.im.ws.strategy.AbstractImCmd
Strategy
;
import
com.wecloud.im.ws.strategy.ImCmd
StrategyFactory
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.netty.channel.ChannelHandlerContext
;
import
org.slf4j.Logger
;
...
...
@@ -24,7 +24,7 @@ public class ReadWsData {
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ReadWsData
.
class
);
@Resource
private
ImCmd
Context
receiveStrategyContext
;
private
ImCmd
StrategyFactory
receiveStrategyContext
;
@Resource
private
WriteDataService
writeDataService
;
...
...
@@ -51,7 +51,7 @@ public class ReadWsData {
WsRequestCmdEnum
wsRequestUriPathEnum
=
WsRequestCmdEnum
.
getByCode
(
receiveModel
.
getCmd
());
// 使用策略模式, 根据不同类型请求调用不同实现类
AbstractImCmd
cmdStrategy
=
receiveStrategyContext
.
getStrategy
(
wsRequestUriPathEnum
);
AbstractImCmd
Strategy
cmdStrategy
=
receiveStrategyContext
.
getStrategy
(
wsRequestUriPathEnum
);
cmdStrategy
.
process
(
receiveModel
,
ctx
,
data
,
appKey
,
clientId
);
}
...
...
core/src/main/java/com/wecloud/im/ws/strategy/AbstractImCmd.java
→
core/src/main/java/com/wecloud/im/ws/strategy/AbstractImCmd
Strategy
.java
View file @
1c48aa4f
...
...
@@ -11,7 +11,7 @@ import io.netty.channel.ChannelHandlerContext;
* @Author hewei hwei1233@163.com
* @Date 2020-01-02
*/
public
abstract
class
AbstractImCmd
{
public
abstract
class
AbstractImCmd
Strategy
{
/**
* 处理业务流程
...
...
@@ -19,5 +19,5 @@ public abstract class AbstractImCmd {
* @param requestModel
* @throws Exception
*/
abstract
public
void
process
(
ReceiveModel
requestModel
,
ChannelHandlerContext
ctx
,
String
data
,
String
appKey
,
String
clientId
)
throws
JsonProcessingException
;
public
abstract
void
process
(
ReceiveModel
requestModel
,
ChannelHandlerContext
ctx
,
String
data
,
String
appKey
,
String
clientId
)
throws
JsonProcessingException
;
}
core/src/main/java/com/wecloud/im/ws/strategy/ImCmd
Context
.java
→
core/src/main/java/com/wecloud/im/ws/strategy/ImCmd
StrategyFactory
.java
View file @
1c48aa4f
...
...
@@ -11,15 +11,15 @@ import java.util.Map;
* 维护指令码与策略实现的对应
* @Author hewei hwei1233@163.com
*/
public
class
ImCmd
Context
{
public
class
ImCmd
StrategyFactory
{
private
final
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
;
public
ImCmd
Context
(
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
)
{
public
ImCmd
StrategyFactory
(
Map
<
WsRequestCmdEnum
,
Class
>
strategyMap
)
{
this
.
strategyMap
=
strategyMap
;
}
public
AbstractImCmd
getStrategy
(
WsRequestCmdEnum
wsRequestPathEnum
)
{
public
AbstractImCmd
Strategy
getStrategy
(
WsRequestCmdEnum
wsRequestPathEnum
)
{
if
(
wsRequestPathEnum
==
null
)
{
throw
new
IllegalArgumentException
(
"not fond enum"
);
...
...
@@ -35,6 +35,6 @@ public class ImCmdContext {
throw
new
IllegalArgumentException
(
"not fond strategy for type:"
+
wsRequestPathEnum
.
getCmdCode
());
}
return
(
AbstractImCmd
)
SpringBeanUtils
.
getBean
(
aClass
);
return
(
AbstractImCmd
Strategy
)
SpringBeanUtils
.
getBean
(
aClass
);
}
}
core/src/main/java/com/wecloud/im/ws/strategy/ImCmdStrategyProcessor.java
View file @
1c48aa4f
package
com
.
wecloud
.
im
.
ws
.
strategy
;
import
com.google.common.collect.Maps
;
import
com.wecloud.im.ws.annotation.
CmdTypeAnnotation
;
import
com.wecloud.im.ws.annotation.
ImCmdType
;
import
com.wecloud.im.ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.ws.utils.ClassScanner
;
import
org.springframework.beans.BeansException
;
...
...
@@ -25,27 +25,27 @@ import java.util.Set;
public
class
ImCmdStrategyProcessor
implements
BeanFactoryPostProcessor
{
// 扫码注解的包路径
private
static
final
String
STRATEGY_PACK
=
"com.wecloud.im.ws.strategy.concrete"
;
//
private static final String STRATEGY_PACK = "com.wecloud.im.ws.strategy.concrete";
@Override
public
void
postProcessBeanFactory
(
ConfigurableListableBeanFactory
configurableListableBeanFactory
)
throws
BeansException
{
Map
<
WsRequestCmdEnum
,
Class
>
handlerMap
=
Maps
.
newHashMapWithExpectedSize
(
5
);
// 扫码ReceiveTypeAnnotation注解的类
Set
<
Class
<?>>
classSet
=
ClassScanner
.
scan
(
STRATEGY_PACK
,
CmdTypeAnnotation
.
class
);
Set
<
Class
<?>>
classSet
=
ClassScanner
.
scan
(
ImCmdStrategyProcessor
.
class
.
getPackage
().
getName
(),
ImCmdType
.
class
);
classSet
.
forEach
(
clazz
->
{
// 获取注解中的类型值,与枚举类一一对应
WsRequestCmdEnum
type
=
clazz
.
getAnnotation
(
CmdTypeAnnotation
.
class
).
type
();
WsRequestCmdEnum
type
=
clazz
.
getAnnotation
(
ImCmdType
.
class
).
type
();
handlerMap
.
put
(
type
,
clazz
);
});
// 初始化Contenxt, 将其注册到spring容器当中
ImCmd
Context
context
=
new
ImCmdContext
(
handlerMap
);
ImCmd
StrategyFactory
context
=
new
ImCmdStrategyFactory
(
handlerMap
);
try
{
configurableListableBeanFactory
.
registerResolvableDependency
(
Class
.
forName
(
ImCmd
Context
.
class
.
getName
()),
context
);
configurableListableBeanFactory
.
registerResolvableDependency
(
Class
.
forName
(
ImCmd
StrategyFactory
.
class
.
getName
()),
context
);
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
...
...
core/src/main/java/com/wecloud/im/ws/strategy/concrete/
ImChatConcrete
.java
→
core/src/main/java/com/wecloud/im/ws/strategy/concrete/
NormalChatStrategy
.java
View file @
1c48aa4f
...
...
@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImClientService;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.ws.annotation.
CmdTypeAnnotation
;
import
com.wecloud.im.ws.annotation.
ImCmdType
;
import
com.wecloud.im.ws.enums.WsRequestCmdEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponseModel
;
import
com.wecloud.im.ws.model.request.ReceiveModel
;
import
com.wecloud.im.ws.sender.PushTask
;
import
com.wecloud.im.ws.service.WriteDataService
;
import
com.wecloud.im.ws.strategy.AbstractImCmd
;
import
com.wecloud.im.ws.strategy.AbstractImCmd
Strategy
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil
;
...
...
@@ -40,10 +40,10 @@ import java.util.List;
/**
* @Description 处理app数据消息
*/
@
CmdTypeAnnotation
(
type
=
WsRequestCmdEnum
.
DATA
)
@
ImCmdType
(
type
=
WsRequestCmdEnum
.
DATA
)
@Service
@Slf4j
public
class
ImChatConcrete
extends
AbstractImCmd
{
public
class
NormalChatStrategy
extends
AbstractImCmdStrategy
{
public
static
final
String
PUSH_KEY
=
"push"
;
public
static
final
String
MSG_ID
=
"msgId"
;
...
...
core/src/main/java/com/wecloud/im/ws/strategy/concrete/SingleRtc
Concrete
.java
→
core/src/main/java/com/wecloud/im/ws/strategy/concrete/SingleRtc
Strategy
.java
View file @
1c48aa4f
...
...
@@ -8,12 +8,12 @@
//import com.wecloud.im.service.ImConversationMembersService;
//import com.wecloud.im.service.ImInboxService;
//import com.wecloud.im.service.ImMessageService;
//import com.wecloud.im.ws.annotation.
CmdTypeAnnotation
;
//import com.wecloud.im.ws.annotation.
ImCmdType
;
//import com.wecloud.im.ws.enums.WsRequestCmdEnum;
//import com.wecloud.im.ws.model.request.ReceiveModel;
//import com.wecloud.im.ws.sender.PushTask;
//import com.wecloud.im.ws.service.WriteDataService;
//import com.wecloud.im.ws.strategy.
ImCmdAbstract
;
//import com.wecloud.im.ws.strategy.
AbstractImCmdStrategy
;
//import com.wecloud.rtc.entity.RtcSubCmd;
//import io.netty.channel.ChannelHandlerContext;
//import lombok.extern.slf4j.Slf4j;
...
...
@@ -23,10 +23,10 @@
///**
// * 处理RTC信令消息
// */
//@
CmdTypeAnnotation
(type = WsRequestCmdEnum.SINGLE_RTC)
//@
ImCmdType
(type = WsRequestCmdEnum.SINGLE_RTC)
//@Service
//@Slf4j
//public class SingleRtc
Concrete extends ImCmdAbstract
{
//public class SingleRtc
Strategy extends AbstractImCmdStrategy
{
//
//
// private static final JsonMapper JSON_MAPPER = new JsonMapper();
...
...
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