// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/mybatis/pojo/master/SocketContent.java
// @Table(name = "socket_content")
// public class SocketContent {
//     @Id
//     @Column(name = "id")
//     @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SELECT replace(t.uuid,\"-\",\"\") FROM (SELECT uuid() uuid FROM dual) t")
//     private String id;
// 
//     /**
//      * 发送者
//      */
//     @Column(name = "contentsender")
//     private String contentsender;
// 
//     /**
//      * 聊天内容
//      */
//     @Column(name = "content")
//     private String content;
// 
//     @Column(name = "createtime")
//     private Date createtime;
// 
//     /**
//      * @return id
//      */
//     public String getId() {
//         return id;
//     }
// 
//     /**
//      * @param id
//      */
//     public void setId(String id) {
//         this.id = id == null ? null : id.trim();
//     }
// 
//     /**
//      * 获取发送者
//      *
//      * @return contentsender - 发送者
//      */
//     public String getContentsender() {
//         return contentsender;
//     }
// 
//     /**
//      * 设置发送者
//      *
//      * @param contentsender 发送者
//      */
//     public void setContentsender(String contentsender) {
//         this.contentsender = contentsender == null ? null : contentsender.trim();
//     }
// 
//     /**
//      * 获取聊天内容
//      *
//      * @return content - 聊天内容
//      */
//     public String getContent() {
//         return content;
//     }
// 
//     /**
//      * 设置聊天内容
//      *
//      * @param content 聊天内容
//      */
//     public void setContent(String content) {
//         this.content = content == null ? null : content.trim();
//     }
// 
//     /**
//      * @return createtime
//      */
//     public Date getCreatetime() {
//         return createtime;
//     }
// 
//     /**
//      * @param createtime
//      */
//     public void setCreatetime(Date createtime) {
//         this.createtime = createtime;
//     }
// }
// 
// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/service/master/ISocketContentService.java
// public interface ISocketContentService {
// 
//     List<SocketContent> findSocketContentList();
// 
//     int insertSelective(SocketContent socketContent);
// 
// }
// 
// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/common/util/UUIDUtil.java
// public class UUIDUtil {
//   public static String uuid(){
//     UUID uuid=UUID.randomUUID();
//     String str = uuid.toString();
//     String uuidStr=str.replace("-", "");
//     return uuidStr;
//   }
// }


import com.chengjs.cjsssmsweb.mybatis.pojo.master.SocketContent;
import com.chengjs.cjsssmsweb.service.master.ISocketContentService;
import com.chengjs.cjsssmsweb.common.util.UUIDUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.socket.server.standard.SpringConfigurator;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.security.Principal;
import java.util.Date;
import java.util.concurrent.CopyOnWriteArraySet;
package com.chengjs.cjsssmsweb.controller;



/**
 * WebSocketController:
 *
 * 类似Servlet的注解mapping。无需在web.xml中配置。
 * configurator = SpringConfigurator.class是为了使该类可以通过Spring注入。
 *
 * 该注解用来指定一个URI，客户端可以通过这个URI来连接到WebSocket。
 *
 * @author: <a href="mailto:chengjs_minipa@outlook.com">chengjs</a>, version:1.0.0, 16:58
 */
@ServerEndpoint(value = "/websocket", configurator = SpringConfigurator.class)
public class WebSocketController {

  private static final Logger log = LoggerFactory.getLogger(WebSocketController.class);

  /**
   * TODO 静态变量，用来记录当前在线连接数。应该把它设计成线程安全的。
   */
  private static int onlineCount = 0;

  /**
   * concurrent包的线程安全Set，用来存放每个客户端对应的MyWebSocket对象。
   * 若要实现服务端与单一客户端通信的话，可以使用Map来存放，其中Key可以为用户标识
   */
  private static CopyOnWriteArraySet<WebSocketController> webSocketSet = new CopyOnWriteArraySet<WebSocketController>();

  /**
   * 与客户端的连接会话，需要通过它来给客户端发送数据
   */
  private Session session;

  @Autowired
// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/mybatis/pojo/master/SocketContent.java
// @Table(name = "socket_content")
// public class SocketContent {
//     @Id
//     @Column(name = "id")
//     @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SELECT replace(t.uuid,\"-\",\"\") FROM (SELECT uuid() uuid FROM dual) t")
//     private String id;
// 
//     /**
//      * 发送者
//      */
//     @Column(name = "contentsender")
//     private String contentsender;
// 
//     /**
//      * 聊天内容
//      */
//     @Column(name = "content")
//     private String content;
// 
//     @Column(name = "createtime")
//     private Date createtime;
// 
//     /**
//      * @return id
//      */
//     public String getId() {
//         return id;
//     }
// 
//     /**
//      * @param id
//      */
//     public void setId(String id) {
//         this.id = id == null ? null : id.trim();
//     }
// 
//     /**
//      * 获取发送者
//      *
//      * @return contentsender - 发送者
//      */
//     public String getContentsender() {
//         return contentsender;
//     }
// 
//     /**
//      * 设置发送者
//      *
//      * @param contentsender 发送者
//      */
//     public void setContentsender(String contentsender) {
//         this.contentsender = contentsender == null ? null : contentsender.trim();
//     }
// 
//     /**
//      * 获取聊天内容
//      *
//      * @return content - 聊天内容
//      */
//     public String getContent() {
//         return content;
//     }
// 
//     /**
//      * 设置聊天内容
//      *
//      * @param content 聊天内容
//      */
//     public void setContent(String content) {
//         this.content = content == null ? null : content.trim();
//     }
// 
//     /**
//      * @return createtime
//      */
//     public Date getCreatetime() {
//         return createtime;
//     }
// 
//     /**
//      * @param createtime
//      */
//     public void setCreatetime(Date createtime) {
//         this.createtime = createtime;
//     }
// }
// 
// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/service/master/ISocketContentService.java
// public interface ISocketContentService {
// 
//     List<SocketContent> findSocketContentList();
// 
//     int insertSelective(SocketContent socketContent);
// 
// }
// 
// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/common/util/UUIDUtil.java
// public class UUIDUtil {
//   public static String uuid(){
//     UUID uuid=UUID.randomUUID();
//     String str = uuid.toString();
//     String uuidStr=str.replace("-", "");
//     return uuidStr;
//   }
// }


// Path: cjs_ssms_web/src/main/java/com/chengjs/cjsssmsweb/controller/WebSocketController.java
import com.chengjs.cjsssmsweb.mybatis.pojo.master.SocketContent;
import com.chengjs.cjsssmsweb.service.master.ISocketContentService;
import com.chengjs.cjsssmsweb.common.util.UUIDUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.socket.server.standard.SpringConfigurator;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.security.Principal;
import java.util.Date;
import java.util.concurrent.CopyOnWriteArraySet;

package com.chengjs.cjsssmsweb.controller;



/**
 * WebSocketController:
 *
 * 类似Servlet的注解mapping。无需在web.xml中配置。
 * configurator = SpringConfigurator.class是为了使该类可以通过Spring注入。
 *
 * 该注解用来指定一个URI，客户端可以通过这个URI来连接到WebSocket。
 *
 * @author: <a href="mailto:chengjs_minipa@outlook.com">chengjs</a>, version:1.0.0, 16:58
 */
@ServerEndpoint(value = "/websocket", configurator = SpringConfigurator.class)
public class WebSocketController {

  private static final Logger log = LoggerFactory.getLogger(WebSocketController.class);

  /**
   * TODO 静态变量，用来记录当前在线连接数。应该把它设计成线程安全的。
   */
  private static int onlineCount = 0;

  /**
   * concurrent包的线程安全Set，用来存放每个客户端对应的MyWebSocket对象。
   * 若要实现服务端与单一客户端通信的话，可以使用Map来存放，其中Key可以为用户标识
   */
  private static CopyOnWriteArraySet<WebSocketController> webSocketSet = new CopyOnWriteArraySet<WebSocketController>();

  /**
   * 与客户端的连接会话，需要通过它来给客户端发送数据
   */
  private Session session;

  @Autowired
  private ISocketContentService contentService;