| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package com.hy.modules.bz.websocket;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.hy.common.websocket.AbstractWebSocketServer;
- import com.hy.modules.bz.domain.BzAnchorStudio;
- import com.hy.modules.bz.domain.BzGiftRecord;
- import com.hy.modules.bz.service.IBzAnchorStudioService;
- import com.hy.modules.bz.service.IBzGiftRecordService;
- import com.hy.modules.bz.utils.TokenStatusManager;
- import com.hy.modules.bz.websocket.message.GiftMessage;
- import com.hy.modules.bz.websocket.message.MessageType;
- import com.hy.modules.sys.domain.SysDictData;
- import com.hy.modules.sys.service.SysDictDataService;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.web.socket.WebSocketSession;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.List;
- import java.util.concurrent.ScheduledThreadPoolExecutor;
- import java.util.concurrent.TimeUnit;
- import static com.hy.modules.bz.utils.Constants.*;
- public class BarrageWebSocketServer extends AbstractWebSocketServer {
- private static final String PLATFORM = "tiktok";
- public static final String PATH = "/barrage/war";
- private final Logger logger = LoggerFactory.getLogger(getClass());
- private static final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(8);
- @Resource
- private IBzAnchorStudioService anchorStudioService;
- @Resource
- private IBzGiftRecordService giftRecordService;
- @Resource
- private SysDictDataService sysDictDataService;
- @Resource
- private StringRedisTemplate stringRedisTemplate;
- @Value("${websocket.reconnect.time}")
- private int reconnectTime;
- @Override
- public void handleOpen(WebSocketSession session) {
- }
- @Override
- public void handleClose(WebSocketSession session) {
- TokenStatusManager.getInstance().sendSignal(session.getAttributes().get(TOKEN_PRIFIX).toString());
- executor.schedule(() -> {
- if(TokenStatusManager.getInstance().isInSignal(session.getAttributes().get(TOKEN_PRIFIX).toString())){
- BzAnchorStudio anchorStudio = anchorStudioService.stopStudio(session.getAttributes().get(TOKEN_PRIFIX).toString());
- if(null != anchorStudio){
- stringRedisTemplate.delete(TOKEN_PRIFIX.concat(anchorStudio.getAnchorName()));
- }
- }
- },reconnectTime, TimeUnit.SECONDS);
- }
- @Override
- public void handleMessage(String message, WebSocketSession session) {
- JSONObject object = JSON.parseObject(message);
- if(MessageType.GiftMessage.equals(MessageType.getMessageType(object.getString(MESSAGE_TYPE_CODE)))){
- // 暂时只处理礼物消息
- GiftMessage giftMessage = JSON.parseObject(message, GiftMessage.class);
- if(!session.getAttributes().containsKey(TOKEN_PRIFIX)){
- session.getAttributes().put(TOKEN_PRIFIX, giftMessage.getToken());
- }
- saveGiftRecord(giftMessage);
- }
- }
- private BigDecimal getGiftScore(String giftName) throws RuntimeException{
- List<SysDictData> giftList = sysDictDataService.selectByCode(GIFT_CODE);
- for (SysDictData dictData : giftList) {
- if(dictData.getDataLabel().equals(giftName)){
- return new BigDecimal(dictData.getDataValue());
- }
- }
- throw new RuntimeException("No such gift: "+giftName);
- }
- private void saveGiftRecord(GiftMessage giftMessage){
- BigDecimal score = getGiftScore(giftMessage.getGiftName());
- BzAnchorStudio anchorStudio = anchorStudioService.getByRoomId(giftMessage.getToken());
- BzGiftRecord giftRecord = new BzGiftRecord();
- giftRecord.setAnchorCode(anchorStudio.getCode());
- giftRecord.setAnchorId(anchorStudio.getAnchorId());
- giftRecord.setAnchorNickName(anchorStudio.getAnchorNickName());
- giftRecord.setGiftCount(Long.valueOf(giftMessage.getGiftCount()));
- giftRecord.setGiftInfo(giftMessage.getGiftName());
- giftRecord.setGiftValue(score);
- giftRecord.setPlatform(anchorStudio.getPlatform());
- giftRecord.setPublishTime(new Date());
- giftRecord.setRoomId(giftMessage.getToken());
- giftRecord.setStatus("finished");
- giftRecord.setStudioId(anchorStudio.getId());
- giftRecord.setGame(anchorStudio.getGameName());
- giftRecord.setUserId(giftMessage.getName());
- giftRecord.setUserNickName(giftMessage.getName());
- giftRecordService.save(giftRecord);
- }
- @Override
- public void handleError(WebSocketSession session, Throwable error) {
- }
- }
|