当前位置: 首页 > news >正文

网站文章要求兰州企业 网站建设

网站文章要求,兰州企业 网站建设,如何做google推广,素材网官网上期我们实现了websocket后端的大部分代码#xff0c;这期我们实现具体的匹配逻辑 1. 定义Mather类 我们新建一个Matcher类用来实现匹配逻辑 Component public class Matcher {//每个匹配队列代表不同的段位,这里约定每一千分为一个段位private ArrayListQueueUser…上期我们实现了websocket后端的大部分代码这期我们实现具体的匹配逻辑 1. 定义Mather类 我们新建一个Matcher类用来实现匹配逻辑 Component public class Matcher {//每个匹配队列代表不同的段位,这里约定每一千分为一个段位private ArrayListQueueUser matchQueueList new ArrayList();Autowiredprivate ObjectMapper objectMapper;Autowiredprivate OnlineUserManager onlineUserManager;public Matcher() {//暂定三个段位for(int i 0; i 3; i) {matchQueueList.add(new LinkedList());}}public void add(User user) {int index Math.min(user.getScore() / 3, 2);QueueUser queue matchQueueList.get(index);//对操作的队列加锁保证线程安全synchronized (queue) {queue.offer(user);queue.notify();}System.out.println(用户 user.getUsername() 加入了 index 号 队列);}public void remove(User user) {int index Math.min(user.getScore() / 3, 2);QueueUser queue matchQueueList.get(index);synchronized (queue) {queue.remove(user);}System.out.println(把用户 user.getUsername() 从 index 号 队列中删除);} }2.修改websocket后端代码 //接收到请求后执行Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {User user (User) session.getAttributes().get(user);MatchRequest request objectMapper.readValue(message.getPayload(), MatchRequest.class);MatchResponse response new MatchResponse();if(request.getMessage().equals(startMatch)) {//开始匹配把用户加入匹配队列matcher.add(user);response.setOk(true);response.setMessage(startMatch);}else if(request.getMessage().equals(stopMatch)) {//取消匹配从匹配队列中移除用户matcher.remove(user);response.setOk(true);response.setMessage(stopMatch);}else{response.setOk(false);response.setErrMsg(非法请求);}//返回响应session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));} 由于存在在匹配中途断开连接的情况所有我们还要在断开连接代码中增加退出队列的代码进行 //连接异常时执行Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {//连接异常断开玩家下线try {User user (User)session.getAttributes().get(user);//防止重复登录时删除正常登录的在线信息if(onlineUser.getFromHall(user.getId()).equals(session)) {onlineUser.exitGameHall(user.getId());System.out.println(用户 user.getUsername() 已下线);}//用户可能还在匹配队列中matcher.remove(user);}catch (NullPointerException e) {e.printStackTrace();MatchResponse response new MatchResponse();response.setOk(false);response.setErrMsg(用户未登录);session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));}}//连接正常断开后执行Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {//连接正常断开玩家下线try {User user (User)session.getAttributes().get(user);//防止重复登录时删除正常登录的在线信息if(onlineUser.getFromHall(user.getId()).equals(session)) {onlineUser.exitGameHall(user.getId());System.out.println(用户 user.getUsername() 已下线);}//用户可能还在匹配队列中matcher.remove(user);}catch (NullPointerException e) {e.printStackTrace();MatchResponse response new MatchResponse();response.setOk(false);response.setErrMsg(用户未登录);session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));}} 3. 实现匹配功能 3.1 创建线程扫描队列 我们为每个匹配队列创建一个线程用来实现匹配功能我们在构造方法中创建线程 public Matcher() {//暂定三个段位for(int i 0; i 3; i) {matchQueueList.add(new LinkedList());}//每个队列创建一个线程扫描完成匹配功能for(QueueUser q : matchQueueList) {Thread t new Thread(()-{while(true) {//调用handlerMatch()完成匹配功能handlerMatch(q);}});}} 3.2 实现handlerMatch()方法进行匹配 public void handlerMatch(QueueUser matchQueue) {try {//对操作的队列加锁保证线程安全synchronized (matchQueue) {//1.检测队列中是否有两个元素while(matchQueue.size() 2) {matchQueue.wait();}//2.从队列中取出两个玩家User user1 matchQueue.poll();User user2 matchQueue.poll();//3.获取到两个玩家的会话信息WebSocketSession session1 onlineUserManager.getFromHall(user1.getId());WebSocketSession session2 onlineUserManager.getFromHall(user2.getId());//4.todo 把两个玩家放到一个游戏房间中//5.给用户返回匹配成功的响应MatchResponse response new MatchResponse();response.setOk(true);response.setMessage(success);String json objectMapper.writeValueAsString(response);session1.sendMessage(new TextMessage(json));session2.sendMessage(new TextMessage(json));}}catch (IOException | InterruptedException e) {e.printStackTrace();}} 游戏房间功能我们下一期再实现。
http://www.hkea.cn/news/14529833/

相关文章:

  • 网站备案下来以后怎么做网页中型电商网站维护费用
  • 怎么做qq二维码网站wordpress开启ssl变慢
  • php网站搬家软件青岛网站上排名
  • 如何自己做游戏网站上海尤安建筑设计股份有限公司
  • 那个外贸网站做的好电子商务网站建设与管理试题及答案
  • 伊川县住房和城乡建设厅网站网站建设术语
  • 揭阳网站建设策划方案通州富阳网站建设
  • 怎么攻击php做的网站吗博客网站 wordpress
  • 杭州外贸网站建设创新的盐城网站开发
  • ps做网站的视频黑帽seo软件
  • 设计网站多少费用多少重庆网站制作一般需要多少钱
  • 如何看出一个网站有做seo网站建设及安全管理
  • 网站开发的技术类型有哪些wordpress 专业模板下载
  • 给人做代工的网站固原市住房和城乡建设局网站
  • 苏州比较大的网站公司南宁企业网站设计公
  • 南昌网站建设讯息网站建设公司方维
  • 企业内部网站源码攀枝花城市建设网站
  • 怎样建立手机网站外贸网站流量
  • 网站的优点有哪些方面网站建设与网页设计是什么
  • 网站会员营销什么是单页面网站
  • 做网站和优化共多少钱搜狗推广管家
  • 网站建设工作室发展网页设计图片轮播效果
  • 湛江企业网站seo东莞智通人才网官方网站
  • 优质的南昌网站建设wordpress交友
  • 海口房产网站建设网站建设的定位是什么
  • 网站顶部深圳建筑工程交易服务中心网
  • 网站搭建需要多少钱智慧记免费官方下载
  • 酒店网站建设策划书怎么写wordpress域名变了迁移
  • 猎聘招聘官方网站舞蹈网站建设报价
  • 商业网站域名普洱市住房城乡建设局网站