Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
caosy
/
fun-admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
408ade04
authored
Sep 10, 2017
by
lyhuang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
来电弹框功能初步实现
Signed-off-by: lyhuang <lyhuang@ctrip.com>
parent
3ad5328e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
164 additions
and
3 deletions
src/main/java/com/ctrip/fun/admin/eventhandler/NewStateEventHandler.java
src/main/java/com/ctrip/fun/admin/eventhandler/NewStateWebSocket.java
src/main/webapp/resource/js/app/op.js
src/main/java/com/ctrip/fun/admin/eventhandler/NewStateEventHandler.java
View file @
408ade04
...
...
@@ -8,6 +8,7 @@ import org.apache.commons.lang.StringUtils;
import
org.jsoup.helper.StringUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
...
...
@@ -27,6 +28,7 @@ import com.ctrip.fun.common.vo.user.UserQuery;
//import cc.rssoft.framework.config.service.ConfigService;
//import cc.rssoft.framework.springutil.ApplicationHelper;
//import cc.rssoft.framework.websocket.WebsocketService;
...
...
@@ -60,6 +62,9 @@ public class NewStateEventHandler extends AbstractEventHandler {
private
UserService
userService
;
@Override
public
String
handle
(
JSONObject
jsonObject
)
{
// 先从json对象转成java对象,方便get
...
...
@@ -75,8 +80,10 @@ public class NewStateEventHandler extends AbstractEventHandler {
if
(
"RINGING"
.
equals
(
event
.
getChannelState
()))
{
logger
.
debug
(
"收到了ringing消息: "
+
event
.
getChannel
()
+
event
.
getConnectedLineNumber
());
String
mobileNo
=
event
.
getConnectedLineNumber
();
//来电手机号码
String
mobileNo
=
event
.
getConnectedLineNumber
().
replaceFirst
(
"^0*"
,
""
);
String
username
=
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
();
NewStateWebSocket
.
unicast
(
username
,
mobileNo
);
try
{
if
(
StringUtil
.
isBlank
(
mobileNo
))
{
logger
.
error
(
"mobile is null in ccdesk!"
);
...
...
@@ -97,9 +104,9 @@ public class NewStateEventHandler extends AbstractEventHandler {
/*
/*
// 调rsmw接口,查询绑定关系,拿到aid,也就时websocket里的clientId
...
...
src/main/java/com/ctrip/fun/admin/eventhandler/NewStateWebSocket.java
0 → 100644
View file @
408ade04
package
com
.
ctrip
.
fun
.
admin
.
eventhandler
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
import
javax.websocket.OnClose
;
import
javax.websocket.OnError
;
import
javax.websocket.OnMessage
;
import
javax.websocket.OnOpen
;
import
javax.websocket.Session
;
import
javax.websocket.server.PathParam
;
import
javax.websocket.server.ServerEndpoint
;
@ServerEndpoint
(
"/websocket/{userName}"
)
public
class
NewStateWebSocket
{
private
NewStateWebSocket
(){}
private
static
NewStateWebSocket
single
=
null
;
public
static
NewStateWebSocket
getInstance
(){
if
(
single
==
null
){
single
=
new
NewStateWebSocket
();
}
return
single
;
}
private
static
Map
<
String
,
Session
>
sessionMap
=
new
HashMap
<
String
,
Session
>();
//在线的客户端session集合,只在第一次new的时候初始化。
/**
* 接收信息事件
* @param message 客户端发来的消息
* @param session 当前会话
*/
@OnMessage
public
void
onMessage
(
String
message
,
Session
session
,
@PathParam
(
value
=
"userName"
)
String
userName
)
throws
Exception
{
try
{
Iterator
<
String
>
it
=
sessionMap
.
keySet
().
iterator
();
//循环给每个客户端发送信息
while
(
it
.
hasNext
()){
String
key
=
(
String
)
it
.
next
();
Session
value
=
sessionMap
.
get
(
key
);
value
.
getBasicRemote
().
sendText
(
message
);
}
System
.
out
.
println
(
"用户"
+
userName
+
"说:"
+
message
+
"。"
);
System
.
out
.
println
(
"当前在线人数:"
+
sessionMap
.
size
());
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"接收消息事件异常!"
);
}
}
/**
* 打开连接事件
* @throws Exception
*/
@OnOpen
public
void
onOpen
(
Session
session
,
@PathParam
(
value
=
"userName"
)
String
userName
)
throws
Exception
{
System
.
out
.
println
(
"打开连接成功!"
);
sessionMap
.
put
(
userName
,
session
);
System
.
out
.
println
(
"用户"
+
userName
+
"进来了。。。"
);
System
.
out
.
println
(
"当前在线人数:"
+
sessionMap
.
size
());
}
/**
* 关闭连接事件
*/
@OnClose
public
void
onClose
(
Session
session
,
@PathParam
(
value
=
"userName"
)
String
userName
)
{
System
.
out
.
println
(
"关闭连接成功!"
);
System
.
out
.
println
(
"用户"
+
userName
+
"离开了。。。"
);
sessionMap
.
remove
(
userName
);
System
.
out
.
println
(
"当前在线人数:"
+
sessionMap
.
size
());
}
/**
* 错误信息响应事件
* @param session
* @param throwable
*/
@OnError
public
void
OnError
(
Session
session
,
Throwable
throwable
,
@PathParam
(
value
=
"userName"
)
String
userName
)
{
System
.
out
.
println
(
"异常:"
+
throwable
.
getMessage
());
System
.
out
.
println
(
"用户"
+
userName
+
"的连接出现了错误。。。"
);
System
.
out
.
println
(
"当前在线人数:"
+
sessionMap
.
size
());
}
public
static
void
unicast
(
String
username
,
String
mobileNo
)
{
String
message
=
"/system/user/"
+
mobileNo
+
"/detailByUid"
;
Session
session
=
sessionMap
.
get
(
username
);
NewStateWebSocket
socket
=
NewStateWebSocket
.
getInstance
();
try
{
socket
.
onMessage
(
message
,
session
,
username
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/webapp/resource/js/app/op.js
View file @
408ade04
/*var timestamp=Date.parse(new Date());
var webSocket=new WebSocket("ws://localhost:8080/websocket/"+timestamp);
webSocket.onerror = function(event) {
alert(event.data);
};
webSocket.onopen = function(event) {
document.getElementById("list").innerHTML="连接建立成功!";
};
webSocket.onmessage = function(event) {
document.getElementById("list").innerHTML+="<br/>" + event.data;
window.open("http://www.qq.com", "用户来电通知");
};*/
var
webSocket
=
null
;
var
url
=
"ws://192.168.10.5:8080/websocket/"
;
function
connectSocket
(
loginUsername
){
url
+=
loginUsername
alert
(
"url:"
+
url
);
// var timestamp=Date.parse(new Date());
webSocket
=
new
WebSocket
(
url
);
webSocket
.
onerror
=
function
(
event
)
{
alert
(
event
.
data
);
};
webSocket
.
onopen
=
function
(
event
)
{
// document.getElementById("list").innerHTML="连接建立成功!";
};
webSocket
.
onmessage
=
function
(
event
)
{
// document.getElementById("list").innerHTML+="<br/>" + event.data;
// window.open("http://www.qq.com", "用户来电通知");
window
.
open
(
event
.
data
,
"用户来电通知"
);
};
socket
.
onclose
=
function
(
event
){
};
}
//关闭Socket
function
closeSocket
(){
webSocket
.
close
();
}
function
sendMessage
()
{
var
msg
=
document
.
getElementById
(
"nickname"
).
value
+
":"
+
document
.
getElementById
(
"textarea"
).
value
;
document
.
getElementById
(
"textarea"
).
value
=
""
;
webSocket
.
send
(
msg
);
}
$
(
document
).
ready
(
function
(
data
){
//查询绑定关系
var
loginUsername
=
$
(
"#loginUsername"
).
val
();
...
...
@@ -17,6 +70,7 @@
}
$
(
".navbar .pull-right .dropdown"
).
html
(
vhtml
);
});
connect
(
loginUsername
);
});
$
(
'#bindModal'
).
on
(
'show.bs.modal'
,
function
(
e
)
{
...
...
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