forked from integrated_whb/integrated_whb
213 lines
5.6 KiB
Java
213 lines
5.6 KiB
Java
package com.zcloud.plugins.websocketFace;
|
||
|
||
import net.sf.json.JSONObject;
|
||
import org.java_websocket.WebSocket;
|
||
import org.java_websocket.WebSocketImpl;
|
||
import org.java_websocket.framing.Framedata;
|
||
import org.java_websocket.handshake.ClientHandshake;
|
||
import org.java_websocket.server.WebSocketServer;
|
||
|
||
import java.io.IOException;
|
||
import java.net.InetSocketAddress;
|
||
import java.net.UnknownHostException;
|
||
|
||
/**
|
||
* 说明:在线管理
|
||
* 作者:luoxiaobao
|
||
* 官网:www.qdkjchina.com
|
||
*/
|
||
public class FaceServer extends WebSocketServer{
|
||
|
||
public FaceServer(int port) throws UnknownHostException {
|
||
super(new InetSocketAddress(port));
|
||
}
|
||
|
||
public FaceServer(InetSocketAddress address) {
|
||
super(address);
|
||
}
|
||
|
||
/**
|
||
* 客户端发送消息到服务器时触发事件
|
||
*/
|
||
@Override
|
||
public void onMessage(WebSocket conn, String message){
|
||
message = message.toString();
|
||
System.out.println("======================================");
|
||
System.out.println(message);
|
||
if(null != message && message.startsWith("[face]")){
|
||
this.userjoin(message.replaceFirst("\\[face\\]", ""),conn);
|
||
}else{
|
||
FaceServerPool.sendMessageToUser(conn, message);//同时向本人发送消息
|
||
}
|
||
}
|
||
|
||
public void onFragment( WebSocket conn, Framedata fragment ) {
|
||
}
|
||
|
||
/**
|
||
* 触发异常事件
|
||
*/
|
||
@Override
|
||
public void onError( WebSocket conn, Exception ex ) {
|
||
//ex.printStackTrace();
|
||
if( conn != null ) {
|
||
//some errors like port binding failed may not be assignable to a specific websocket
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 用户加入处理
|
||
* @param user
|
||
*/
|
||
public void userjoin(String user, WebSocket conn){
|
||
onlineMaganger(1,user,conn);
|
||
}
|
||
|
||
/**
|
||
* 站内信通知
|
||
* @param user
|
||
*/
|
||
public void senFhsms(String user){
|
||
JSONObject result = new JSONObject();
|
||
result.element("type", "senFhsms");
|
||
FaceServerPool.sendMessageToUser(FaceServerPool.getWebSocketByUser(user),result.toString()); //发送到PC端
|
||
FaceServerPool.sendMessageToUser(FaceServerPool.getWebSocketByUser("mobile-"+user),result.toString()); //发送到手机端
|
||
}
|
||
|
||
/**
|
||
* 新任务通知
|
||
* @param user
|
||
*/
|
||
public void senFhTask(String user){
|
||
JSONObject result = new JSONObject();
|
||
result.element("type", "fhtask");
|
||
WebSocket ws = FaceServerPool.getWebSocketByUser(user);
|
||
WebSocket mws = FaceServerPool.getWebSocketByUser("mobile-"+user);
|
||
if(null != ws || null != mws){
|
||
if(null != ws){
|
||
result.element("RNUMBER", "no");
|
||
FaceServerPool.sendMessageToUser(ws,result.toString()); //当待办人是具体的人时发给其任务通知(PC端)
|
||
}
|
||
if(null != mws){
|
||
result.element("RNUMBER", "no");
|
||
FaceServerPool.sendMessageToUser(mws,result.toString()); //当待办人是具体的人时发给其任务通知(手机端)
|
||
}
|
||
}else{
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 强制某用户下线
|
||
* @param user
|
||
*/
|
||
public void goOut(String user){
|
||
this.goOut(FaceServerPool.getWebSocketByUser(user),"thegoout"); //PC端
|
||
this.goOut(FaceServerPool.getWebSocketByUser("mobile-"+user),"thegoout"); //手机端
|
||
}
|
||
|
||
/**
|
||
* 强制用户下线
|
||
* @param conn
|
||
*/
|
||
public void goOut(WebSocket conn,String type){
|
||
JSONObject result = new JSONObject();
|
||
result.element("type", type);
|
||
result.element("msg", "goOut");
|
||
FaceServerPool.sendMessageToUser(conn,result.toString());
|
||
}
|
||
|
||
/**
|
||
* 用户下线处理
|
||
* @param user
|
||
*/
|
||
public void userLeave(WebSocket conn){
|
||
onlineMaganger(2,null,conn);
|
||
}
|
||
|
||
/**
|
||
* 获取在线总数
|
||
* @param user
|
||
*/
|
||
public void getUserCount(WebSocket conn){
|
||
JSONObject result = new JSONObject();
|
||
result.element("type", "count");
|
||
result.element("msg", FaceServerPool.getUserCount());
|
||
FaceServerPool.sendMessageToUser(conn,result.toString());
|
||
}
|
||
|
||
/**
|
||
* 获取在线用户列表
|
||
* @param user
|
||
*/
|
||
public void getUserList(){
|
||
WebSocket conn = FaceServerPool.getFhadmin();
|
||
if(null == conn){return;}
|
||
JSONObject result = new JSONObject();
|
||
result.element("type", "userlist");
|
||
result.element("list", FaceServerPool.getOnlineUser());
|
||
FaceServerPool.sendMessageToUser(conn,result.toString());
|
||
}
|
||
|
||
/**用户上下线管理
|
||
* @param type 1:上线;2:下线
|
||
* @param user
|
||
* @param conn
|
||
*/
|
||
public synchronized void onlineMaganger(int type,String user, WebSocket conn){
|
||
if(type == 1){
|
||
if(null == FaceServerPool.getWebSocketByUser(user)){ //判断用户是否在其它终端登录
|
||
FaceServerPool.addUser(user,conn); //向连接池添加当前的连接对象
|
||
addUserToFhadmin(user);
|
||
}
|
||
}else{
|
||
FaceServerPool.removeUser(conn); //在连接池中移除连接
|
||
this.getUserList();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 有用户登录系统,加入在线列表
|
||
* @param conn
|
||
*/
|
||
public void addUserToFhadmin(String user){
|
||
WebSocket conn = FaceServerPool.getFhadmin();
|
||
if(null == conn){return;}
|
||
JSONObject result = new JSONObject();
|
||
result.element("type", "addUser");
|
||
result.element("user", user);
|
||
FaceServerPool.sendMessageToUser(conn,result.toString());
|
||
}
|
||
|
||
/**
|
||
* 触发连接事件
|
||
*/
|
||
@Override
|
||
public void onOpen( WebSocket conn, ClientHandshake handshake ) {
|
||
//this.sendToAll( "new connection: " + handshake.getResourceDescriptor() );
|
||
//System.out.println("===" + conn.getRemoteSocketAddress().getAddress().getHostAddress());
|
||
}
|
||
|
||
/**
|
||
* 触发关闭事件
|
||
*/
|
||
@Override
|
||
public void onClose( WebSocket conn, int code, String reason, boolean remote ) {
|
||
userLeave(conn);
|
||
}
|
||
|
||
@Override
|
||
public void onStart() {
|
||
// TODO Auto-generated method stub
|
||
}
|
||
|
||
public static void main( String[] args ) throws InterruptedException , IOException {
|
||
WebSocketImpl.DEBUG = false;
|
||
int port = 8887; //端口
|
||
FaceServer s = new FaceServer(port);
|
||
s.start();
|
||
//System.out.println( "服务器的端口" + s.getPort() );
|
||
}
|
||
|
||
}
|
||
|