integrated_traffic/src/main/java/com/zcloud/plugins/websocketFace/FaceServer.java

213 lines
5.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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() );
}
}