Java 保留连接到web服务jax ws的客户端的历史记录
我有一个多人游戏,我想保留连接玩家的历史,以了解游戏何时开始。 我使用了HttpSession,但它不能解决我的问题。 此外,我还在Web服务中创建了一个玩家的静态数组列表,但它无法解决我的问题:( 还有别的想法吗Java 保留连接到web服务jax ws的客户端的历史记录,java,web-services,jakarta-ee,soap,jax-ws,Java,Web Services,Jakarta Ee,Soap,Jax Ws,我有一个多人游戏,我想保留连接玩家的历史,以了解游戏何时开始。 我使用了HttpSession,但它不能解决我的问题。 此外,我还在Web服务中创建了一个玩家的静态数组列表,但它无法解决我的问题:( 还有别的想法吗 @Resource private WebServiceContext wsContext; @WebMethod public PlayerModel connect(String PlayerName) { PlayerMo
@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;
}
您的代码似乎在多个地方都没有加起来
看起来几乎总是空的playerList
代码中一个明显的差距是,您没有识别游戏实例当玩家请求连接时,他们应该请求连接到现有游戏,或者通过传递
gameId
来创建一个。如果没有标识特定游戏的令牌,您将难以连接同一游戏的多个用户。connect
应具有(过于简单化的)签名connect(stringgameid,stringplayername)
。gameId
的列表可以由DAO在Web服务端点的上下文之外进行管理。这样,返回的玩家或新玩家可以通过显示已知的gameId
来显示其状态,并且您可以跟踪连接到特定gameId
的用户
@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;
}