com.hxh.websocket.service.UserOnlineService.java Source code

Java tutorial

Introduction

Here is the source code for com.hxh.websocket.service.UserOnlineService.java

Source

/*
 * 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);
                }
            }
        }
    }
}