import com.fh.entity.uav.UAVStateInfo;
import com.fh.service.uav.UAVManageService;
import com.fh.util.PageData;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.*;
import com.fh.util.Logger;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @desp Socket处理类
*/
@Service
public class SocketHandler implements WebSocketHandler {
private static final Logger logger;
private static final ArrayList<WebSocketSession> users;
private static List historyDataList = new ArrayList();
private static int index = 0;
static {
users = new ArrayList<WebSocketSession>();
logger = Logger.getLogger(SocketHandler.class);
}
// Websocket连接建立
@Override
public void afterConnectionEstablished(WebSocketSession session)
throws Exception {
logger.info("成功建立Websocket连接");
users.add(session);
String username = session.getAttributes().get("websocketKey").toString();
// 判断session中用户信息
if (username != null) {
session.sendMessage(new TextMessage("已成功建立Websocket通信"));
}
}
@Override
public void handleMessage(WebSocketSession arg0, WebSocketMessage<?> arg1)
throws Exception {
//接收到前台发送的数据
}
// 当连接出错时,主动关闭当前连接,并从会话列表中删除该会话
@Override
public void handleTransportError(WebSocketSession session, Throwable error)
throws Exception {
if (session.isOpen()) {
session.close();
}
logger.error("连接出现错误:" + error.toString());
users.remove(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)
throws Exception {
logger.debug("Websocket连接已关闭");
users.remove(session);
}
@Override
public boolean supportsPartialMessages() {
return false;
}
/**
* 给所有在线用户发送消息
*
* @param message
*/
public void sendMessageToUsers(TextMessage message) {
for (WebSocketSession user : users) {
try {
if (user.isOpen()) {
user.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 给某个用户发送消息
*
* @param userName
* @param message
*/
public void sendMessageToUser(String userName, TextMessage message) {
for (WebSocketSession user : users) {
if (user.getAttributes().get("websocketKey").equals(userName)) {
try {
if (user.isOpen()) {
user.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
}