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
cf654e61
Commit
cf654e61
authored
Apr 02, 2022
by
罗长华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、GeneralMessageHandler 增加异常处理逻辑
2、WsResponse增加多个静态创建方法
parent
db13e47a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
135 additions
and
32 deletions
+135
-32
core/src/main/java/com/wecloud/dispatch/general/GeneralMessageHandler.java
+80
-32
core/src/main/java/com/wecloud/im/ws/model/WsResponse.java
+55
-0
No files found.
core/src/main/java/com/wecloud/dispatch/general/GeneralMessageHandler.java
View file @
cf654e61
...
@@ -6,14 +6,28 @@ import com.wecloud.dispatch.extend.ArgumentBox;
...
@@ -6,14 +6,28 @@ import com.wecloud.dispatch.extend.ArgumentBox;
import
com.wecloud.dispatch.extend.impl.DefaultArgumentBox
;
import
com.wecloud.dispatch.extend.impl.DefaultArgumentBox
;
import
com.wecloud.dispatch.general.config.GeneralActionDispatcher
;
import
com.wecloud.dispatch.general.config.GeneralActionDispatcher
;
import
com.wecloud.dispatch.general.extend.ActionMessageResolver
;
import
com.wecloud.dispatch.general.extend.ActionMessageResolver
;
import
com.wecloud.im.exception.VerificationCodeException
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.JsonUtils
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.exception.DaoException
;
import
io.geekidea.springbootplus.framework.common.exception.SpringBootPlusException
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.lang.Nullable
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.servlet.HandlerExecutionChain
;
import
org.springframework.web.servlet.ModelAndView
;
/**
/**
...
@@ -23,36 +37,70 @@ import org.springframework.stereotype.Component;
...
@@ -23,36 +37,70 @@ import org.springframework.stereotype.Component;
@Slf4j
@Slf4j
public
class
GeneralMessageHandler
{
public
class
GeneralMessageHandler
{
@Autowired
@Autowired
private
GeneralActionDispatcher
generalActionDispatcher
;
private
GeneralActionDispatcher
generalActionDispatcher
;
@Autowired
@Autowired
private
ActionMessageResolver
actionMessageResolver
;
private
ActionMessageResolver
actionMessageResolver
;
@Autowired
@Autowired
private
ChannelSender
channelSender
;
private
ChannelSender
channelSender
;
public
void
doMessage
(
Long
senderClientId
,
ChannelHandlerContext
ctx
,
String
data
)
{
public
void
doMessage
(
Long
senderClientId
,
ChannelHandlerContext
ctx
,
String
data
)
{
if
(
log
.
isDebugEnabled
())
{
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"appWS收到data: {}\n senderClientId:{}, channelId:{}"
,
data
,
senderClientId
,
ctx
.
channel
().
id
().
asLongText
());
log
.
debug
(
"appWS收到data: {}\n senderClientId:{}, channelId:{}"
,
data
,
senderClientId
,
ctx
.
channel
().
id
().
asLongText
());
}
}
// 解析jsonO
// 解析jsonO
BaseRequest
baseRequest
=
JsonUtils
.
decodeJson
(
data
,
BaseRequest
.
class
);
BaseRequest
baseRequest
=
JsonUtils
.
decodeJson
(
data
,
BaseRequest
.
class
);
if
(
null
==
baseRequest
||
null
==
baseRequest
.
getAction
())
{
if
(
null
==
baseRequest
||
null
==
baseRequest
.
getAction
())
{
throw
new
BusinessException
(
"null == baseRequest || null == baseRequest.getAction()"
);
throw
new
BusinessException
(
"null == baseRequest || null == baseRequest.getAction()"
);
}
}
ActionMessage
am
=
actionMessageResolver
.
resolver
(
generalActionDispatcher
,
baseRequest
);
ActionMessage
am
=
actionMessageResolver
.
resolver
(
generalActionDispatcher
,
baseRequest
);
am
.
setSenderChannel
(
ctx
.
channel
());
am
.
setSenderChannel
(
ctx
.
channel
());
am
.
setSenderClientId
(
senderClientId
);
am
.
setSenderClientId
(
senderClientId
);
Object
res
=
generalActionDispatcher
.
action
(
am
);
if
(
res
!=
null
)
{
Exception
actionException
=
null
;
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
am
.
getSenderChannel
(),
res
);
Object
res
=
null
;
}
try
{
}
res
=
generalActionDispatcher
.
action
(
am
);
}
catch
(
Exception
ex
)
{
public
ArgumentBox
getArgumentBox
()
{
actionException
=
ex
;
ArgumentBox
beanBox
=
new
DefaultArgumentBox
();
}
return
beanBox
;
processDispatchResult
(
am
,
res
,
actionException
);
}
}
public
ArgumentBox
getArgumentBox
()
{
ArgumentBox
beanBox
=
new
DefaultArgumentBox
();
return
beanBox
;
}
private
void
processDispatchResult
(
ActionMessage
am
,
@Nullable
Object
res
,
@Nullable
Exception
exception
)
{
if
(
exception
!=
null
)
{
log
.
error
(
"dispatch action error:"
,
exception
);
if
(
exception
instanceof
SpringBootPlusException
)
{
// 处理自定义异常
ApiCode
errorCode
;
if
(
exception
instanceof
BusinessException
)
{
errorCode
=
ApiCode
.
BUSINESS_EXCEPTION
;
}
else
if
(
exception
instanceof
DaoException
)
{
errorCode
=
ApiCode
.
DAO_EXCEPTION
;
}
else
if
(
exception
instanceof
VerificationCodeException
)
{
errorCode
=
ApiCode
.
VERIFICATION_CODE_EXCEPTION
;
}
else
{
errorCode
=
ApiCode
.
SPRING_BOOT_PLUS_EXCEPTION
;
}
res
=
WsResponse
.
result
(
errorCode
,
exception
.
getMessage
(),
false
);
}
else
{
// 其他默认的全局异常处理
res
=
WsResponse
.
result
(
ApiCode
.
SYSTEM_EXCEPTION
);
}
}
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
am
.
getSenderChannel
(),
res
);
}
}
}
core/src/main/java/com/wecloud/im/ws/model/WsResponse.java
View file @
cf654e61
package
com
.
wecloud
.
im
.
ws
.
model
;
package
com
.
wecloud
.
im
.
ws
.
model
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.config.il8n.I18nMessageUtil
;
import
io.geekidea.springbootplus.framework.config.il8n.LanguageEnum
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
java.io.IOException
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
javax.xml.ws.Response
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
/**
/**
* @Description websocket服务端响应消息和下方消息的封装对象
* @Description websocket服务端响应消息和下方消息的封装对象
* @Author hewei hwei1233@163.com
* @Author hewei hwei1233@163.com
...
@@ -41,4 +50,50 @@ public class WsResponse<T> implements Serializable {
...
@@ -41,4 +50,50 @@ public class WsResponse<T> implements Serializable {
*/
*/
private
String
reqId
;
private
String
reqId
;
public
static
WsResponse
<
Boolean
>
result
(
ApiCode
apiCode
)
{
return
result
(
apiCode
,
true
);
}
public
static
<
T
>
WsResponse
<
T
>
result
(
ApiCode
apiCode
,
T
data
)
{
return
result
(
apiCode
,
""
,
data
);
}
public
static
<
T
>
WsResponse
<
T
>
result
(
ApiCode
apiCode
,
String
message
,
T
data
)
{
return
result
(
WsResponseCmdEnum
.
RES
.
getCmdCode
(),
apiCode
,
message
,
data
);
}
public
static
<
T
>
WsResponse
<
T
>
result
(
Integer
cmd
,
ApiCode
apiCode
,
String
message
,
T
data
)
{
String
success
=
"SUCCESS"
;
try
{
message
=
I18nMessageUtil
.
getMessage
(
LanguageEnum
.
getLanguageType
(
null
),
apiCode
.
getMessage
(),
success
);
}
catch
(
IOException
e
)
{
message
=
success
;
}
WsResponse
<
T
>
response
=
new
WsResponse
<>();
response
.
setCmd
(
cmd
).
setCode
(
apiCode
.
getCode
()).
setMsg
(
message
).
setData
(
data
);
return
response
;
}
public
static
WsResponse
<
Boolean
>
ok
()
{
return
ok
(
true
);
}
public
static
<
T
>
WsResponse
<
T
>
ok
(
T
data
)
{
return
result
(
ApiCode
.
SUCCESS
,
data
);
}
public
static
WsResponse
<
Boolean
>
fail
()
{
return
fail
(
""
);
}
public
static
WsResponse
<
Boolean
>
fail
(
String
message
)
{
return
result
(
ApiCode
.
FAIL
,
message
,
false
);
}
public
static
WsResponse
<
Boolean
>
fail
(
ApiCode
apiCode
,
String
message
)
{
return
result
(
apiCode
,
message
,
false
);
}
}
}
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