51 changed files with 611 additions and 92 deletions
-
15client/pom.xml
-
16client/src/main/java/com/canvas/web/modules/front/rest/FrontController.java
-
172client/src/main/java/com/canvas/web/modules/front/rest/WebSocket.java
-
10common/src/main/java/com/canvas/web/base/BaseEntity.java
-
2system/src/main/java/com/canvas/web/modules/device/domain/Device.java
-
2system/src/main/java/com/canvas/web/modules/device/dto/DeviceDTO.java
-
6system/src/main/java/com/canvas/web/modules/device/repository/DeviceRepository.java
-
11system/src/main/java/com/canvas/web/modules/device/rest/DeviceController.java
-
2system/src/main/java/com/canvas/web/modules/device/service/DeviceService.java
-
4system/src/main/java/com/canvas/web/modules/device/service/impl/DeviceServiceImpl.java
-
7system/src/main/java/com/canvas/web/modules/material/criteria/MaterialQueryCriteria.java
-
4system/src/main/java/com/canvas/web/modules/material/criteria/ThemeQueryCriteria.java
-
24system/src/main/java/com/canvas/web/modules/material/domain/Material.java
-
2system/src/main/java/com/canvas/web/modules/material/domain/MaterialFolder.java
-
2system/src/main/java/com/canvas/web/modules/material/domain/OrgaClass.java
-
2system/src/main/java/com/canvas/web/modules/material/domain/ThemeFolder.java
-
8system/src/main/java/com/canvas/web/modules/material/dto/ChangeStateDTO.java
-
2system/src/main/java/com/canvas/web/modules/material/dto/DoFolderDTO.java
-
2system/src/main/java/com/canvas/web/modules/material/dto/FolderDTO.java
-
2system/src/main/java/com/canvas/web/modules/material/dto/MaterialDTO.java
-
2system/src/main/java/com/canvas/web/modules/material/dto/ThemeClassDTO.java
-
4system/src/main/java/com/canvas/web/modules/material/repository/MaterialFolderRepository.java
-
24system/src/main/java/com/canvas/web/modules/material/repository/MaterialRepository.java
-
4system/src/main/java/com/canvas/web/modules/material/repository/OrgaClassRepository.java
-
2system/src/main/java/com/canvas/web/modules/material/repository/ThemeClassRepository.java
-
4system/src/main/java/com/canvas/web/modules/material/repository/ThemeFolderRepository.java
-
39system/src/main/java/com/canvas/web/modules/material/rest/MaterialController.java
-
12system/src/main/java/com/canvas/web/modules/material/rest/ThemeClassController.java
-
21system/src/main/java/com/canvas/web/modules/material/service/MaterialService.java
-
5system/src/main/java/com/canvas/web/modules/material/service/ThemeClassService.java
-
47system/src/main/java/com/canvas/web/modules/material/service/impl/MaterialServiceImpl.java
-
25system/src/main/java/com/canvas/web/modules/material/service/impl/ThemeClassServiceImpl.java
-
31system/src/main/java/com/canvas/web/modules/material/vo/ThemeClassVO.java
-
8system/src/main/java/com/canvas/web/modules/material/vo/ThemeVO.java
-
2system/src/main/java/com/canvas/web/modules/release/criteria/NoticeQueryCriteria.java
-
2system/src/main/java/com/canvas/web/modules/release/criteria/ReleaseListQueryCriteria.java
-
2system/src/main/java/com/canvas/web/modules/release/domain/Notice.java
-
30system/src/main/java/com/canvas/web/modules/release/domain/ReleaseList.java
-
18system/src/main/java/com/canvas/web/modules/release/domain/ReleaseMaterial.java
-
2system/src/main/java/com/canvas/web/modules/release/dto/NoticeDTO.java
-
6system/src/main/java/com/canvas/web/modules/release/dto/ReleaseDTO.java
-
4system/src/main/java/com/canvas/web/modules/release/dto/ReleaseMaterialDTO.java
-
2system/src/main/java/com/canvas/web/modules/release/repository/NoticeRepository.java
-
7system/src/main/java/com/canvas/web/modules/release/repository/ReleaseDeviceRepository.java
-
12system/src/main/java/com/canvas/web/modules/release/repository/ReleaseListRepository.java
-
2system/src/main/java/com/canvas/web/modules/release/repository/ReleaseMaterialRepository.java
-
30system/src/main/java/com/canvas/web/modules/release/rest/ReleaseListController.java
-
12system/src/main/java/com/canvas/web/modules/release/service/ReleaseListService.java
-
42system/src/main/java/com/canvas/web/modules/release/service/impl/ReleaseListServiceImpl.java
-
3system/src/main/java/com/canvas/web/modules/release/vo/ReleaseDetailVO.java
-
4system/src/main/java/com/canvas/web/modules/release/vo/ReleaseListVO.java
@ -0,0 +1,16 @@ |
|||
package com.canvas.web.modules.front.rest; |
|||
|
|||
import io.swagger.annotations.Api; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
@RestController |
|||
@RequiredArgsConstructor |
|||
@Api(tags = "画屏客户端") |
|||
@RequestMapping("/api/front") |
|||
public class FrontController { |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,172 @@ |
|||
package com.canvas.web.modules.front.rest; |
|||
|
|||
import com.canvas.web.modules.device.service.DeviceService; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.websocket.*; |
|||
import javax.websocket.server.PathParam; |
|||
import javax.websocket.server.ServerEndpoint; |
|||
import java.io.IOException; |
|||
import java.text.DateFormat; |
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Date; |
|||
import java.util.concurrent.ConcurrentHashMap; |
|||
|
|||
@ServerEndpoint("/websocket/{deviceId}") |
|||
@Component |
|||
public class WebSocket { |
|||
|
|||
private DeviceService deviceService; |
|||
|
|||
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 |
|||
private static int onlineCount = 0; |
|||
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识 |
|||
private static ConcurrentHashMap<String, WebSocket> webSocketSet = new ConcurrentHashMap<String, WebSocket>(); |
|||
//与某个客户端的连接会话,需要通过它来给客户端发送数据 |
|||
private Session session; |
|||
|
|||
//当前发消息的设备编号 |
|||
private String deviceId = ""; |
|||
|
|||
public static WebSocket getWebSocket(String id) { |
|||
return webSocketSet.get(id); |
|||
} |
|||
|
|||
/** |
|||
* 连接建立成功调用的方法 |
|||
* |
|||
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据 |
|||
*/ |
|||
@OnOpen |
|||
public void onOpen(@PathParam(value = "deviceId") String param, Session session, EndpointConfig config) { |
|||
System.out.println(param); |
|||
deviceId = param;//接收到发送消息的设备编号 |
|||
this.session = session; |
|||
webSocketSet.put(param, this);//加入map中 |
|||
addOnlineCount(); //在线数加1 |
|||
deviceService.updateState(deviceId,1); |
|||
System.out.println("有新连接加入!当前在线人数为" + getOnlineCount()); |
|||
} |
|||
|
|||
/** |
|||
* 连接关闭调用的方法 |
|||
*/ |
|||
@OnClose |
|||
public void onClose() { |
|||
if (!deviceId.equals("")) { |
|||
webSocketSet.remove(deviceId); //从set中删除 |
|||
subOnlineCount(); //在线数减1 |
|||
deviceService.updateState(deviceId,2); |
|||
System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount()); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 收到客户端消息后调用的方法 |
|||
* |
|||
* @param message 客户端发送过来的消息 |
|||
*/ |
|||
@OnMessage |
|||
public void onMessage(String message) { |
|||
System.out.println("来自客户端的消息:" + message); |
|||
// session.get |
|||
//群发消息 |
|||
if (1 != 1) { |
|||
sendAll(message); |
|||
} else { |
|||
//给指定的人发消息 |
|||
sendToUser(message); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 给指定的人发送消息 |
|||
* |
|||
* @param message |
|||
*/ |
|||
private void sendToUser(String message) { |
|||
String sendUserno = message.split("[|]")[1]; |
|||
String sendMessage = message.split("[|]")[0]; |
|||
String now = getNowTime(); |
|||
try { |
|||
if (webSocketSet.get(sendUserno) != null) { |
|||
webSocketSet.get(sendUserno).sendMessage(now + "用户" + deviceId + "发来消息:" + " <br/> " + sendMessage); |
|||
} else { |
|||
System.out.println("当前用户不在线"); |
|||
} |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 给所有人发消息 |
|||
* |
|||
* @param message |
|||
*/ |
|||
private void sendAll(String message) { |
|||
String now = getNowTime(); |
|||
String sendMessage = message.split("[|]")[0]; |
|||
//遍历HashMap |
|||
for (String key : webSocketSet.keySet()) { |
|||
try { |
|||
//判断接收用户是否是当前发消息的用户 |
|||
if (!deviceId.equals(key)) { |
|||
webSocketSet.get(key).sendMessage(now + "用户" + deviceId + "发来消息:" + " <br/> " + sendMessage); |
|||
System.out.println("key = " + key); |
|||
} |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 获取当前时间 |
|||
* |
|||
* @return |
|||
*/ |
|||
private String getNowTime() { |
|||
Date date = new Date(); |
|||
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
|||
String time = format.format(date); |
|||
return time; |
|||
} |
|||
|
|||
/** |
|||
* 发生错误时调用 |
|||
* |
|||
* @param session |
|||
* @param error |
|||
*/ |
|||
@OnError |
|||
public void onError(Session session, Throwable error) { |
|||
System.out.println("发生错误"); |
|||
error.printStackTrace(); |
|||
} |
|||
|
|||
/** |
|||
* 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。 |
|||
* |
|||
* @param message |
|||
* @throws IOException |
|||
*/ |
|||
public void sendMessage(String message) throws IOException { |
|||
this.session.getBasicRemote().sendText(message); |
|||
//this.session.getAsyncRemote().sendText(message); |
|||
} |
|||
|
|||
|
|||
public static synchronized int getOnlineCount() { |
|||
return onlineCount; |
|||
} |
|||
|
|||
public static synchronized void addOnlineCount() { |
|||
WebSocket.onlineCount++; |
|||
} |
|||
|
|||
public static synchronized void subOnlineCount() { |
|||
WebSocket.onlineCount--; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,31 @@ |
|||
package com.canvas.web.modules.material.vo; |
|||
|
|||
import com.alibaba.fastjson.annotation.JSONField; |
|||
import com.canvas.web.modules.system.domain.Org; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
|
|||
import java.util.List; |
|||
|
|||
@Getter |
|||
@Setter |
|||
public class ThemeClassVO { |
|||
|
|||
@JSONField(name="id") |
|||
@JsonProperty("id") |
|||
private String id; |
|||
|
|||
@JSONField(name="className") |
|||
@JsonProperty("class_name") |
|||
private String className; |
|||
|
|||
@JSONField(name="isAll") |
|||
@JsonProperty("is_all") |
|||
private Boolean isAll; |
|||
|
|||
@JSONField(name="orgs") |
|||
@JsonProperty("orgs") |
|||
private List<Org> orgs; |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue