我有一个多人游戏,我想保持关联玩家的历史,以了解游戏什么时候开始。 我使用HttpSession但它无法解决我的问题。 我也在webservices中创建了一个静态ArrayList的播放器,但它无法解决我的问题。 :( 还有其他想法吗?
@Resource
private WebServiceContext wsContext;
@WebMethod
public PlayerModel connect(String PlayerName) {
PlayerModel playerModel = null;
Players players = new Players() ;
ArrayList<PlayerModel> playerList = players.getPlayers();
if (playerList.isEmpty()) {
System.out.println("from service :No payer yet");
boardModel = new BoardModel(6, 7);
session.setAttribute("boardModel", boardModel);
boardModel.setPlayer1(PlayerName);
playerModel = new PlayerModel(1, PlayerName, boardModel);
playerList.add(playerModel) ;
} else if (playerList.size() == 1) {
boardModel.setPlayer2(PlayerName);
playerModel = new PlayerModel(2, PlayerName, boardModel);
playerList.add(playerModel) ;
}
return playerModel;
}
另一种方法
@Resource
private WebServiceContext wsContext;
BoardModel boardModel;
HttpSession session;
@WebMethod
public PlayerModel connect(String PlayerName) {
MessageContext mc = wsContext.getMessageContext();
session = ((HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST)).getSession();
if (session == null) {
System.out.println("from service :No payer yet");
boardModel = new BoardModel(6, 7);
session.setAttribute("boardModel", boardModel);
boardModel.setPlayer1(PlayerName);
playerModel = new PlayerModel(1, PlayerName, boardModel);
session.setAttribute("1", playerModel);
} else if (session.getAttribute("1" != null) {
boardModel.setPlayer2(PlayerName);
playerModel = new PlayerModel(2, PlayerName, boardModel);
session.setAttribute("2", playerModel);
}
System.out.println("from service : player" + PlayerName);
return playerModel;
}
答案 0 :(得分:0)
您的代码似乎没有多个地方加起来。
除了缺少重要位之外,您的第一个代码块无法跨多个请求工作。
playerList
看起来几乎总是空的会话感知的JAX-WS服务本身对您没有帮助。根据定义,会话与单个用户有关。如果您没有额外的腿部工作,则无法在多个用户之间共享一个用户的Web服务会话
代码中的一个明显缺口是您没有识别游戏实例 。 当玩家请求连接时,他们应该通过传递gameId
来请求连接到现有游戏或创建游戏。如果没有识别特定游戏的令牌,您将很难将多个用户连接到同一个游戏。 connect
应该具有(过于简单化)签名connect(String gameId, String playerName)
。在Web服务端点的上下文之外,DAO可以管理gameIds
的列表。这样,返回的玩家或新玩家可以通过呈现已知的gameId
来表达他们的存在,并且您可以跟踪已连接的用户到特定的gameId