Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.hxh.websocket.service; import com.fasterxml.jackson.databind.ObjectMapper; import com.hxh.websocket.beans.User; import com.hxh.websocket.beans.JsonMessage; import java.io.IOException; import java.io.StringWriter; import java.util.Collections; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.springframework.stereotype.Service; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; /** * ??????? * @author */ @Service public class UserOnlineService { //???? final List<WebSocketSession> sessions = Collections.synchronizedList(new LinkedList<WebSocketSession>()); // final List<User> users = Collections.synchronizedList(new LinkedList<User>()); public UserOnlineService() { } public User addUser(User user) { users.add(user); return user; } public void removeUser(String name) { User ruser = null; //??? synchronized (users) { for (User user : users) { if (user.getName().equals(name)) { ruser = user; break; } } } users.remove(ruser); JsonMessage<String> msg = new JsonMessage(); msg.setC(JsonMessage.USER_LOGOUT); msg.setD(ruser.getName()); pushMessageToWebClient(msg); } public void registerUser(String name, String pass, String addr, String port, String driveName, String driveversion, WebSocketSession session) { if (name == null || name.equals("")) { return; } User ruser = findUserbyName(name); if (ruser == null) { User user = new User(name, pass, addr, port, driveName, driveversion, session); ruser = addUser(user); } else { ruser.update(addr, port, driveName, driveversion, session); } JsonMessage<User> msg = new JsonMessage(); msg.setC(JsonMessage.USER_LOGIN); msg.setD(ruser); pushMessageToWebClient(msg); } private User findUserbyName(String name) { //??? synchronized (users) { for (User user : users) { if (user.getName().equals(name)) { return user; } } } return null; } /** * ??WebSocketSession,??WebSocketSession * ?????? * @param s */ public void registerSession(WebSocketSession s) { System.out.println("ws_session"); sessions.add(s); System.out.println(":" + sessions.size()); } /** * ??WebSocketSession * @param s */ public void removeSession(WebSocketSession s) { sessions.remove(s); } /** * ??? * ???WebSocketSession??? * @param msg */ private void pushMessageToWebClient(JsonMessage msg) { System.out.println("?"); System.out.println(":" + sessions.size()); synchronized (sessions) { for (WebSocketSession s : sessions) { ObjectMapper mapper = new ObjectMapper(); StringWriter sw = new StringWriter(); try { mapper.writeValue(sw, msg); String jsonmsg = sw.toString(); System.out.println("?:" + jsonmsg); s.sendMessage(new TextMessage(jsonmsg)); } catch (IOException ex) { Logger.getLogger(UserOnlineService.class.getName()).log(Level.SEVERE, null, ex); } } } } }