| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package me.zhengjie.base.websocket;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- import java.util.UUID;
- import org.apache.commons.collections4.CollectionUtils;
- import org.apache.commons.collections4.MapUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.corundumstudio.socketio.SocketIOClient;
- import lombok.extern.slf4j.Slf4j;
- import me.zhengjie.application.admin.controller.OrderRoomIdController;
- import me.zhengjie.utils.RedisUtils;
- /**
- *
- * @author auas
- *
- */
- @Component
- @Slf4j
- public class AppPcBindSocketIo {
- public final static String PREFIX_BUSINESS_NO = "business-no-";
- @Autowired
- RedisUtils redisUtils;
- /**
- *
- * @param businessNo
- * @param json
- * @param time 时间单位秒
- */
- public void setBusinessNo(String businessNo, String json, long time) {
- redisUtils.set(PREFIX_BUSINESS_NO + businessNo, json, time);
- }
- /**
- * 这里是便于删除他继续测试使用
- *
- * @param businessNo
- * @param json
- * @param time
- */
- public void delBusinessNo(String businessNo) {
- redisUtils.del(PREFIX_BUSINESS_NO + businessNo);
- }
- /**
- * 得到过期时间
- *
- * @param key
- * @return
- */
- public long getExpire(Object key) {
- return redisUtils.getExpire(PREFIX_BUSINESS_NO + key);
- }
- /**
- * 设置没有取消的值进行判断
- *
- * @param businessNo
- * @return
- */
- public void setNoCancelNotary(Set<String> notarys, String businessNo) {
- List<JSONObject> bindNotarys = new ArrayList<>();
- for (String userName : notarys) {
- JSONObject jsonObj = new JSONObject();
- jsonObj.put("userName", userName);
- bindNotarys.add(jsonObj);
- }
- String notaryJson = JSONObject.toJSONString(bindNotarys);
- setBusinessNo(businessNo, notaryJson, getExpire(businessNo));
- }
- public Set<String> getBindNotary(String businessNo) {
- Set<String> userNames = new HashSet<>();
- String key = (String) redisUtils.get(PREFIX_BUSINESS_NO + businessNo);
- if (StringUtils.isEmpty(key)) {
- return userNames;
- }
- JSONArray json = JSON.parseArray(key);
- for (int i = 0; i < json.size(); i++) {
- JSONObject jsonObj = json.getJSONObject(i);
- String username = jsonObj.getString("userName");
- userNames.add(username);
- }
- return userNames;
- }
- private void sendAppMsg(String businessNo) {
- HashMap<UUID, SocketIOClient> appSocketIo = AppSocketClientCache.getAppUserClient(businessNo);
- if (MapUtils.isNotEmpty(appSocketIo)) {
- appSocketIo.forEach((uuid, socketIOClient) -> {
- socketIOClient.sendEvent("cancelEvent", "cancel");
- });
- }
- }
- public void removeNotary(String businessNo, String username) {
- if (StringUtils.isBlank(businessNo)) {
- return;
- }
- //这里判断得到三个人
- Set<String> notarys = getBindNotary(businessNo);
- if (CollectionUtils.isEmpty(notarys)) {
- // 直接删除这条数据
- delBusinessNo(businessNo);
- // TDOO 发送给app。取消了视频通话
- log.info("推送给app消息{}",businessNo);
- sendAppMsg(businessNo);
- } else {
- notarys.remove(username);
- // 保存没有取消的时间
- setNoCancelNotary(notarys, businessNo);
- }
- }
- public Set<String> getAllBindNotary() {
- List<String> keys = redisUtils.scan(PREFIX_BUSINESS_NO + "*");
- Set<String> set = new HashSet<>();
- for (String key : keys) {
- JSONArray json = JSON.parseArray((String) redisUtils.get(key));
- for (int i = 0; i < json.size(); i++) {
- JSONObject jsonObj = json.getJSONObject(i);
- String username = jsonObj.getString("userName");
- set.add(username);
- }
- }
- return set;
- }
- public Set<String> disconnectNotary(String notary) {
- List<String> keys = redisUtils.scan(PREFIX_BUSINESS_NO + "*");
- Set<String> set = new HashSet<>();
- // 先查询出业务编号
- String businessNo = "";
- for (String key : keys) {
- JSONArray json = JSON.parseArray((String) redisUtils.get(key));
- for (int i = 0; i < json.size(); i++) {
- JSONObject jsonObj = json.getJSONObject(i);
- String username = jsonObj.getString("userName");
- if (username.equalsIgnoreCase(notary))
- businessNo = key;
- }
- }
- log.info("app失去连接:{} ",businessNo);
- removeNotary(getBindNo(businessNo), notary);
- // String key = (String) redisUtils.get(PREFIX_BUSINESS_NO + businessNo);
- // JSONArray json = JSON.parseArray((String) redisUtils.get(key));
- return set;
- }
- public String getBindNo(String businessNo) {
- if (businessNo.contains(PREFIX_BUSINESS_NO)) {
- return businessNo.substring(PREFIX_BUSINESS_NO.length());
- }
- return businessNo;
- }
- public void socketIoTime(String socketId, String json) {
- redisUtils.set(socketId, json, 60 * 5);
- }
- public List<JSONObject> socketIoTime(String socketId) {
- String json = (String) redisUtils.get(socketId);
- List<JSONObject> jsonObj = JSONObject.parseArray(json, JSONObject.class);
- return jsonObj;
- }
- public static void main(String[] args) {
- String str = "business-no-10020221102110257621".substring(PREFIX_BUSINESS_NO.length());
- System.out.println(str);
- }
- }
|