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

上海市卫生健康委员会/seo优化方向

上海市卫生健康委员会,seo优化方向,校园门户网站开发甲方合同,网站集约化建设讲话稿上期我们完成了游戏大厅的前端部分内容,今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后,我们可以维护好用户的websocket会话,把用户表示为在线状态,方便获取到用户的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 Map<Integer, 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.whsansanxincailiao.cn/news/31949562.html

相关文章:

  • 人才网网站模板/百度灰色关键词排名
  • 电商课程培训/厦门谷歌seo公司
  • 楚风网站建设工作室/微信加精准客源软件
  • 我们为什么选择做电子商务网站/我为什么不建议年轻人做销售
  • 品牌宣传网站制作/网络营销环境分析
  • 微网站微商城建设/企业网站建设报价表
  • 吉林省网站建设/网络营销策划书的结构是什么
  • 专门做广东11选5的网站/seo首页关键词优化
  • 网站后台用什么做/提高工作效率心得体会
  • word和wordpress/沈阳百度快照优化公司
  • 做网站用php还是html好/哈尔滨百度公司地址
  • 商城网站建设策划书/百度搜索高级搜索
  • 做招聘海报的网站/官方网站营销
  • 政府网站系统安全建设方案/国内打开google网页的方法
  • 吉林省住房建设安厅网站/杭州seo服务公司
  • 网站免费优化平台/站长统计app软件下载官网
  • 中山企业网站建设/google商店
  • 阿里备案成功后怎么做网站/百度搜索热度排名
  • 做网站挂靠/中山seo关键词
  • 微博推广软件/上海排名优化seobwyseo
  • 机械公司网站建设/全球十大网站排名
  • 企业网站搜索引擎优化方案/长沙网络公司营销推广
  • 建设网站时间/加盟
  • 做导航网站用什么建站程序/有没有专门帮人推广的公司
  • 网站建设及制作教程/百度小说排行榜前十名
  • 雅安网站建设/德州百度推广公司
  • 网络推广对企业有什么好处/沈阳专业seo排名优化公司
  • 如何提高外贸网站排名/hao123影视
  • 做网站的人是什么职位/近期时事新闻
  • 服装店网站建设思路/今日头条热点新闻