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

瀑布式网站教育类网站源码

瀑布式网站,教育类网站源码,黑龙江网站备案管理局,网站程序文件上期我们完成了游戏大厅的前端部分内容#xff0c;今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后#xff0c;我们可以维护好用户的websocket会话#xff0c;把用户表示为在线状态#xff0c;方便获取到用户的websocket会话 package org.ting.j20250110_g…上期我们完成了游戏大厅的前端部分内容今天我们实现后端部分内容  1. 维护在线用户 在用户登录成功后我们可以维护好用户的websocket会话把用户表示为在线状态方便获取到用户的websocket会话 package org.ting.j20250110_gobang.game;import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketSession;import java.util.HashMap; import java.util.Map;Component public class OnlineUserManager {//使用ConcurrentHashMap保证线程安全private MapInteger, WebSocketSession onlineUser new ConcurrentHashMap();public void enterGameHall(int userId, WebSocketSession session) {//用户上线onlineUser.put(userId, session);}public void exitGameHall(int userId) {//用户下线onlineUser.remove(userId);}public WebSocketSession getFromHall(int userId) {//获取用户的websocket会话return onlineUser.get(userId);} }这里我们借助一个哈希表就可以实现。 2. 实现webSocket相关方法 上期我们定义了webSocket的处理类但是并没有完成重写的方法接下来我们借助维护的在线用户具体实现如下方法 在实现这些方法之前我们还需要按照上期约定好的信息交互形式定义两个实体类代表请求和响应 package org.ting.j20250110_gobang.game;public class MatchRequest {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message message;} }package org.ting.j20250110_gobang.game;public class MatchResponse {private boolean ok;private String errMsg;private String message;public boolean isOk() {return ok;}public void setOk(boolean ok) {this.ok ok;}public String getErrMsg() {return errMsg;}public void setErrMsg(String errMsg) {this.errMsg errMsg;}public String getMessage() {return message;}public void setMessage(String message) {this.message message;} } 2.1 连接成功 //连接成功后执行Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {//玩家上线try {//获取登录时储存在session中的用户信息这里WebSocketSession在注册时通过拦截器获取到了session中的内容User user (User)session.getAttributes().get(user);if(onlineUser.getFromHall(user.getId()) null) {onlineUser.enterGameHall(user.getId(), session);System.out.println(用户 user.getUsername() 已上线);}else{//防止重复登录MatchResponse response new MatchResponse();response.setOk(false);response.setErrMsg(用户已在别处登录);session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));session.close();}}catch (NullPointerException e) {e.printStackTrace();MatchResponse response new MatchResponse();response.setOk(false);response.setErrMsg(用户未登录);session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));}} 2.2 连接断开 //连接异常时执行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() 已下线);}}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() 已下线);}}catch (NullPointerException e) {e.printStackTrace();MatchResponse response new MatchResponse();response.setOk(false);response.setErrMsg(用户未登录);session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));}} 2.3 处理匹配请求 //接收到请求后执行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)) {//开始匹配把用户加入匹配队列//todoresponse.setOk(true);response.setMessage(startMatch);}else if(request.getMessage().equals(stopMatch)) {//取消匹配从匹配队列中移除用户//todoresponse.setOk(true);response.setMessage(stopMatch);}else{response.setOk(false);response.setErrMsg(非法请求);}} 这里具体的匹配队列功能我们下期再实现
http://www.dnsts.com.cn/news/88728.html

相关文章:

  • 好用的网站后台管理系统自己建设网站用哪个
  • wordpress整站程序云上铺会员管理系统
  • 去百度建网站搜索引擎营销的英文简称
  • 制作网站的基本步骤是wordpress精致建站
  • 做企业网站需要收费吗磁力狗
  • 海外贸易在什么网站做网站项目设计与制作
  • 阐述网站建设的步骤过程建设银行网站钓鱼
  • 素材网站无水印做网页和做网站
  • dreamware做网站首页内销常用网站
  • 玉溪市住房和建设局公布网站wordpress默认主体设置
  • 一个购物交易网站怎么做网站开发程序员 工资
  • 天台做网站国外优秀网站模板
  • 专门做顶账房的网站万网登录入口
  • 开通建立企业网站黄页游戏引流推广网站
  • 湛江网站建设外包罗城建设局网站
  • 哈尔滨网站开发企业怎样做编辑发到网站
  • 上海自聊自做网站建设银行网站怎么取消短信服务
  • 建立网站三大基础如何运营一个公众号
  • 企业电子商务网站的域名命名哪个网站可以做魔方图片大全
  • 企业免费网站制作比较好的哈尔滨建站服务网站开发
  • 网站首页引导页 模版互联网创新创业大赛
  • 杭州网站开发公司排名网站cms系统哪个好用
  • 安达网站制作网站内容管理系统(cms)
  • 青岛专业网站建设定制深圳今天发生的重大新闻
  • 叫企业做的网站可不可以自己改主题注册公司该怎么注册
  • 网站建设的SOWT分析设置网站默认编码
  • 外卖做的比较好的网站做h5网站要多少钱
  • 网站开发的安全问题网站维护与建设内容
  • 做暖视频网站免费网站背景如何做
  • 引流网站怎么做北京建站公司哪家好都选万维科技