From 4e6d844962ae71bfa593de96e68bae5628ad5ffa Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期六, 22 六月 2024 12:50:03 +0800
Subject: [PATCH] #
---
zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/components/edit.jsx | 7
zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx | 13 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java | 6
zy-asrs-flow/src/pages/device/conveyor/index.less | 15 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java | 1
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ws/ConveyorWebSocket.java | 171 +++++++++++++++++
zy-asrs-flow/src/pages/device/conveyor/index.jsx | 242 ++++++++++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/ConveyorOperatorParam.java | 23 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/BasConveyorController.java | 65 ++++++
9 files changed, 539 insertions(+), 4 deletions(-)
diff --git a/zy-asrs-flow/src/pages/device/conveyor/index.jsx b/zy-asrs-flow/src/pages/device/conveyor/index.jsx
new file mode 100644
index 0000000..8c902d8
--- /dev/null
+++ b/zy-asrs-flow/src/pages/device/conveyor/index.jsx
@@ -0,0 +1,242 @@
+import React, { useEffect, useRef, useState } from "react";
+import { getToken } from '@/utils/token-util'
+import Http from '@/utils/http';
+import { Badge, Button, Descriptions, Drawer, Input, Card, Select, message } from 'antd';
+import {
+ PageContainer,
+} from '@ant-design/pro-components';
+import './index.less'
+import { WEBSOCKET_BASE_URL } from '@/config/setting';
+
+const Main = () => {
+ const [deviceInfos, setDeviceInfos] = useState([]);
+ const [ws, setWs] = useState(null);
+ const [openOpera, setOpenOpera] = useState(false);
+ const [currentData, setCurrentData] = useState(null);
+ const [taskNo, setTaskNo] = useState(null);
+ const [staNo, setStaNo] = useState(null);
+
+ useEffect(() => {
+ console.log('yes');
+ connect();
+
+ return () => {
+ if (ws) {
+ ws.close();
+ }
+ }
+ }, [])
+
+ useEffect(() => {
+ console.log('yes');
+ if (ws) {
+ ws.onopen = function () {
+ console.log("open");
+
+ sendWs(JSON.stringify({
+ "url": "login",
+ "data": {
+ "token": getToken()
+ }
+ }))
+ }
+
+ ws.onmessage = function (e) {
+ const result = JSON.parse(e.data);
+ if (result.url == "login") {
+ setInterval(function () {
+ getDeviceInfo();
+ }, 1000)
+ } else if (result.url == "/conveyor/list") {
+ const data = JSON.parse(result.data);
+ setDeviceInfos(data);
+ }
+ }
+
+ ws.onclose = function (e) {
+ console.log("close");
+ reconnect();
+ }
+
+ ws.onerror = function (e) {
+ console.log(e);
+ }
+ }
+ }, [ws]);
+
+ const connect = () => {
+ var newWs = new WebSocket(WEBSOCKET_BASE_URL + "/ws/conveyor/websocket");
+ setWs(newWs);
+ }
+
+ const reconnect = () => {
+ setTimeout(() => {
+ console.log('WebSocketClient: Attempting to reconnect...');
+ connect();
+ }, 3000);
+ }
+
+ const sendWs = (message) => {
+ if (ws.readyState == WebSocket.OPEN) {
+ ws.send(message)
+ }
+ }
+
+ const getDeviceInfo = () => {
+ sendWs(JSON.stringify({
+ "url": "/conveyor/list",
+ "data": {}
+ }))
+ }
+
+ const showOpera = (data) => {
+ setOpenOpera(true);
+ setCurrentData(data);
+
+ setTaskNo(data.taskNo);
+ setStaNo(data.staNo);
+ };
+
+ const closeOpera = () => {
+ setOpenOpera(false);
+ };
+
+ const taskNoChange = (e) => {
+ setTaskNo(e.target.value)
+ }
+
+ const staNoChange = (e) => {
+ setStaNo(e.target.value)
+ }
+
+ const conveyorOperator = async (type) => {
+ try {
+ const resp = await Http.doPost('api/basConveyor/operator/sta', {
+ conveyorNo: currentData.conveyorNo,
+ siteNo: currentData.siteNo,
+ taskMode: type,
+ taskNo: taskNo,
+ staNo: staNo
+ });
+ if (resp.code === 200) {
+ message.success("璇锋眰鎴愬姛");
+ return true;
+ } else {
+ message.warning(resp.msg);
+ return false;
+ }
+ } catch (error) {
+ message.warning("璇锋眰澶辫触");
+ return false;
+ }
+ }
+
+ let codeContent = (<PageContainer
+ header={{
+ breadcrumb: {},
+ }}
+ >
+ <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'space-around' }}>
+ {deviceInfos.map(item => {
+ if (item == null) {
+ return;
+ }
+ let tmpTitle = item.siteNo + "绔�"
+ let tmpData = [
+ {
+ key: '1',
+ label: '浠诲姟鍙�',
+ children: item.taskNo,
+ },
+ {
+ key: '2',
+ label: '鑷姩',
+ children: item.autoing,
+ },
+ {
+ key: '3',
+ label: '鏈夌墿',
+ children: item.loading,
+ },
+ {
+ key: '4',
+ label: '鍙叆',
+ children: item.inEnable,
+ },
+ {
+ key: '5',
+ label: '鍙嚭',
+ children: item.outEnable,
+ },
+ {
+ key: '6',
+ label: '鑳藉叆',
+ children: item.canining,
+ },
+ {
+ key: '7',
+ label: '鑳藉嚭',
+ children: item.canouting,
+ },
+ {
+ key: '8',
+ label: '楂樹綆绫诲瀷',
+ children: item.locType1$,
+ },
+ {
+ key: '9',
+ label: '瀹界獎绫诲瀷',
+ children: item.locType2$,
+ },
+ {
+ key: '10',
+ label: '杞婚噸绫诲瀷',
+ children: item.locType3$,
+ },
+ {
+ key: '11',
+ label: '宸ヤ綔妯″紡',
+ children: item.workMode$,
+ },
+ {
+ key: '12',
+ label: '鐩爣绔�',
+ children: item.staNo,
+ },
+ ];
+ return <div key={item.id} style={{ width: '45%', marginBottom: '30px' }}>
+ <div style={{ marginBottom: '10px' }}>
+ <span style={{ marginRight: '10px' }}>{tmpTitle}</span>
+ <Button type="primary" onClick={() => showOpera(item)}>鎿嶄綔</Button>
+ </div>
+ <Descriptions size="small" bordered items={tmpData} />
+ </div>
+ })}
+ </div>
+ </PageContainer>);
+
+ if (currentData) {
+ codeContent = (
+ <>
+ {codeContent}
+ <Drawer title="鎿嶄綔闈㈡澘" onClose={closeOpera} open={openOpera}>
+ <h2 style={{ marginBottom: '15px' }}>{currentData.siteNo}绔�</h2>
+
+ <div style={{ marginBottom: '15px' }}>
+ <Card title="鐩稿叧鎸囦护" style={{ width: 300 }}>
+ <div className="commandItem">
+ <Input value={taskNo} addonBefore="宸ヤ綔鍙�" onChange={taskNoChange} />
+ <Input value={staNo} addonBefore="鐩爣绔�" onChange={staNoChange} />
+ <Button type="primary" onClick={() => conveyorOperator('taskNoAndStaNo')}>淇濆瓨</Button>
+ </div>
+ </Card>
+ </div>
+ </Drawer>
+ </>
+ )
+ }
+
+ return (codeContent);
+}
+
+export default Main;
\ No newline at end of file
diff --git a/zy-asrs-flow/src/pages/device/conveyor/index.less b/zy-asrs-flow/src/pages/device/conveyor/index.less
new file mode 100644
index 0000000..d70f38a
--- /dev/null
+++ b/zy-asrs-flow/src/pages/device/conveyor/index.less
@@ -0,0 +1,15 @@
+.commandItem {
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+}
+
+.commandItem > Button {
+ width: 120px;
+ margin-bottom: 10px;
+}
+
+.commandItem > div {
+ width: 120px;
+ margin-bottom: 10px;
+}
\ No newline at end of file
diff --git a/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/components/edit.jsx b/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/components/edit.jsx
index 886f8d0..3cbbfa0 100644
--- a/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/components/edit.jsx
+++ b/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/components/edit.jsx
@@ -223,6 +223,13 @@
colProps={{ md: 12, xl: 12 }}
/>
</ProForm.Group>
+ <ProForm.Group>
+ <ProFormText
+ name="staNo"
+ label="鐩爣绔�"
+ colProps={{ md: 12, xl: 12 }}
+ />
+ </ProForm.Group>
</ProForm>
</Modal>
diff --git a/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx b/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
index 9fb2b63..35e04a0 100644
--- a/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
+++ b/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
@@ -407,6 +407,19 @@
setSearchParam={setSearchParam}
/>,
},
+ {
+ title: '鐩爣绔�',
+ dataIndex: 'staNo',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='staNo'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
{
title: '鎿嶄綔',
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/BasConveyorController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/BasConveyorController.java
index 1de4108..d3b99ec 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/BasConveyorController.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/BasConveyorController.java
@@ -8,19 +8,35 @@
import com.zy.asrs.wcs.common.domain.BaseParam;
import com.zy.asrs.wcs.common.domain.KeyValVo;
import com.zy.asrs.wcs.common.domain.PageParam;
+import com.zy.asrs.wcs.core.domain.param.ConveyorOperatorParam;
+import com.zy.asrs.wcs.core.domain.param.ShuttleOperatorParam;
import com.zy.asrs.wcs.core.entity.BasConveyor;
+import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.wcs.core.entity.TaskCtg;
+import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
+import com.zy.asrs.wcs.core.model.enums.TaskCtgType;
+import com.zy.asrs.wcs.core.model.enums.TaskStsType;
import com.zy.asrs.wcs.core.service.BasConveyorService;
+import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.rcs.News;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.thread.DevpThread;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.system.controller.BaseController;
import com.zy.asrs.wcs.utils.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@RestController
@RequestMapping("/api")
@@ -28,6 +44,8 @@
@Autowired
private BasConveyorService basConveyorService;
+ @Autowired
+ private DeviceService deviceService;
@PreAuthorize("hasAuthority('core:basConveyor:list')")
@PostMapping("/basConveyor/page")
@@ -99,4 +117,43 @@
ExcelUtil.build(ExcelUtil.create(basConveyorService.list(), BasConveyor.class), response);
}
+ //鎵嬪姩鎿嶄綔
+ @PreAuthorize("hasAuthority('core:basConveyor:operator')")
+ @PostMapping("/basConveyor/operator/sta")
+ @Transactional
+ public synchronized R conveyorOperator(@RequestBody ConveyorOperatorParam param) {
+ if (Cools.isEmpty(param.getConveyorNo(), param.getTaskMode())) {
+ return R.error("鍙傛暟涓虹┖");
+ }
+
+ Integer conveyorNo = param.getConveyorNo();
+
+ Device device = deviceService.getOne(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val())
+ .eq(Device::getStatus, 1)
+ .eq(Device::getDeviceNo, conveyorNo));
+ if (device == null) {
+ return R.error("璁惧涓嶅瓨鍦�");
+ }
+
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, device.getId().intValue());
+ if (devpThread == null) {
+ return R.error("璁惧绂荤嚎");
+ }
+
+ if (param.getTaskMode().equals("taskNoAndStaNo")) {
+ //鍐欏叆宸ヤ綔鍙峰拰鐩爣绔�
+ if (Cools.isEmpty(param.getSiteNo())) {
+ return R.error("绔欑偣涓嶅瓨鍦�");
+ }
+
+ boolean result = devpThread.writeWorkSta(param.getSiteNo(), Short.parseShort(param.getTaskNo()), param.getStaNo().shortValue());
+ if (!result) {
+ return R.error("淇濆瓨澶辫触");
+ }
+ return R.ok("淇濆瓨鎴愬姛");
+ }
+ return R.ok();
+ }
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/ConveyorOperatorParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/ConveyorOperatorParam.java
new file mode 100644
index 0000000..a83dde5
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/ConveyorOperatorParam.java
@@ -0,0 +1,23 @@
+package com.zy.asrs.wcs.core.domain.param;
+
+import lombok.Data;
+
+@Data
+public class ConveyorOperatorParam {
+
+ // 杈撻�佺嚎鍙�
+ private Integer conveyorNo;
+
+ // 绔欑偣鍙�
+ private Integer siteNo;
+
+ // 鍛戒护绫诲瀷
+ private String taskMode;
+
+ // 宸ヤ綔鍙�
+ private String taskNo;
+
+ // 鐩爣绔�
+ private Integer staNo;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
index b16abef..4629b03 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
@@ -179,6 +179,12 @@
@ApiModelProperty(value= "宸ヤ綔妯″紡")
private Integer workMode;
+ /**
+ * 鐩爣绔�
+ */
+ @ApiModelProperty(value= "鐩爣绔�")
+ private Integer staNo;
+
public BasConveyorSta() {}
public BasConveyorSta(Long conveyorId,Integer conveyorNo,Long updateBy,Long createBy,Date createTime,Date updateTime,String memo,Integer deleted,Long hostId,Integer siteNo,String inEnable,String outEnable,String autoing,String loading,String canining,String canouting,Integer locType1,Integer locType2,Integer locType3,String locNo,String qrCodeValue) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
index c1a8775..3af0a8a 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
@@ -92,6 +92,7 @@
station.setInEnable(inEnable?"Y":"N");
station.setOutEnable(outEnable?"Y":"N");
station.setWorkMode(workMode);
+ station.setStaNo((int) staNo);
station.setLocType1(0); // 楂樹綆绫诲瀷{0:鏈煡,1:浣庡簱浣�,2:楂樺簱浣峿
station.setLocType2(0); // 瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿
station.setLocType3(0); // 杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ws/ConveyorWebSocket.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ws/ConveyorWebSocket.java
new file mode 100644
index 0000000..ae3c263
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ws/ConveyorWebSocket.java
@@ -0,0 +1,171 @@
+package com.zy.asrs.wcs.rcs.ws;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wcs.common.config.ConfigProperties;
+import com.zy.asrs.wcs.common.security.JwtSubject;
+import com.zy.asrs.wcs.core.entity.BasConveyorSta;
+import com.zy.asrs.wcs.core.service.BasConveyorStaService;
+import com.zy.asrs.wcs.rcs.ws.model.WebSocketMessage;
+import com.zy.asrs.wcs.utils.JwtUtil;
+import io.jsonwebtoken.Claims;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@Slf4j
+@Service
+@ServerEndpoint("/ws/conveyor/websocket")
+@Data
+public class ConveyorWebSocket {
+
+ //瀹㈡埛绔湪绾夸汉鏁�
+ private static int onlineClient = 0;
+
+ //瀹㈡埛绔睜
+ private static CopyOnWriteArraySet<ConveyorWebSocket> webSocketServers = new CopyOnWriteArraySet<>();
+
+ private Session session;
+
+ private String username;
+
+ private Long hostId;
+
+ //绠¢亾ID
+ private String sessionId;
+
+ @OnOpen
+ public void onOpen(Session session) {
+ this.session = session;
+ this.sessionId = session.getId();
+
+ //灏唚ebsocket瀵硅薄杩涜淇濆瓨
+ webSocketServers.add(this);
+ //娣诲姞鍦ㄧ嚎浜烘暟
+ addOnlineClient();
+ log.info("鏈夋柊绐楀彛寮�濮嬬洃鍚�:" + session.getId() + ",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineClient());
+ }
+
+ /**
+ * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
+ */
+ @OnClose
+ public void onClose() {
+ webSocketServers.remove(this); //浠巗et涓垹闄�
+ subOnlineClient(); //鍦ㄧ嚎鏁板噺1
+ log.info("鍏抽棴鐨勮繛鎺ワ細" + sessionId);
+ log.info("鏈変竴杩炴帴鍏抽棴锛佸綋鍓嶅湪绾夸汉鏁颁负" + getOnlineClient());
+ }
+
+ /**
+ * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+ * @ Param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+ */
+ @OnMessage
+ public void onMessage(String message, Session session) throws IOException {
+ BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class);
+ WebSocketMessage socketMessage = JSON.parseObject(message, WebSocketMessage.class);
+ if (socketMessage.getUrl().equals("login")) {
+ try {
+ // 瑙f瀽token
+ ConfigProperties configProperties = SpringUtils.getBean(ConfigProperties.class);
+ JSONObject data = JSON.parseObject(socketMessage.getData());
+ Claims claims = JwtUtil.parseToken(data.getString("token"), configProperties.getTokenKey());
+ JwtSubject jwtSubject = JwtUtil.getJwtSubject(claims);
+ this.username = jwtSubject.getUsername();
+ this.hostId = jwtSubject.getHostId();
+ socketMessage.setData(JSON.toJSONString(R.ok("auth success")));
+ } catch (Exception e) {
+ e.printStackTrace();
+ socketMessage.setData(JSON.toJSONString(R.error("auth fail")));
+ }
+ this.sendMessage(JSON.toJSONString(socketMessage));
+ } else if (socketMessage.getUrl().equals("/conveyor/list")) {
+ if (this.hostId != null) {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ List<BasConveyorSta> list = basConveyorStaService.list();
+ socketMessage.setData(JSON.toJSONString(list));
+ this.sendMessage(JSON.toJSONString(socketMessage));
+ }
+ }
+// log.info("鏀跺埌鏉ヨ嚜杩炴帴锛�" + sessionId + "鐨勪俊鎭�:" + message);
+ }
+
+ /**
+ * @ Param session
+ * @ Param error
+ */
+ @OnError
+ public void onError(Session session, Throwable error) {
+ log.error("鍙戠敓閿欒");
+ error.printStackTrace();
+ }
+
+ /**
+ * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫�
+ */
+ public void sendMessage(String message) throws IOException {
+ this.session.getBasicRemote().sendText(message);
+ }
+
+ /**
+ * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛
+ */
+ public void sendMessage(String message, String account) throws IOException {
+ for (ConveyorWebSocket item : webSocketServers) {
+ item.sendMessage(message);
+ }
+ }
+
+ public void sendMessage(String message, int userId) throws IOException {
+ for (ConveyorWebSocket item : webSocketServers) {
+ item.sendMessage(message);
+ }
+ }
+
+ /**
+ * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛
+ */
+ public static boolean sendMessageGlobal(String message, String account) throws IOException {
+ boolean tag = false;
+ for (ConveyorWebSocket item : webSocketServers) {
+ tag = true;
+ item.sendMessage(message);
+ }
+ return tag;
+ }
+
+ public static boolean sendMessageGlobal(String message, int userId) throws IOException {
+ boolean tag = false;
+ for (ConveyorWebSocket item : webSocketServers) {
+ tag = true;
+ item.sendMessage(message);
+ }
+ return tag;
+ }
+
+ public static synchronized int getOnlineClient() {
+ return onlineClient;
+ }
+
+ public static synchronized void addOnlineClient() {
+ ConveyorWebSocket.onlineClient++;
+ }
+
+ public static synchronized void subOnlineClient() {
+ if (ConveyorWebSocket.onlineClient > 0) {
+ ConveyorWebSocket.onlineClient--;
+ }
+ }
+
+}
--
Gitblit v1.9.1