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

213 lines
5.6 KiB
Java
Raw Normal View History

2024-01-03 11:04:18 +08:00
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() );
}
}