问题描述
您好,我尝试了好几个小时从 Jetty 获取 Websocket API,同时会话运行。
我的问题是,我无法与 Session 进行外部交互以发送数据。 我只能与所有会话交互,而不仅仅是一个。
我尝试使用“Sec-WebSocket-Key”作为会话密钥,但它总是返回 java.lang.NullPointerException 作为 onWebSocketError。
我已经尝试将 Session 保存在 HashMap 中,但是每次当我想执行 sendString 时,HashMap 中的 Session 都是 NULL。
我的代码:
连接方式
@Override
public void onWebSocketConnect(Session sessionIO) {
sessionIO.setIdleTimeout(Integer.MAX_VALUE);
System.out.print(gsonIO.toJson(this.getSession().getUpgradeResponse().getHeaders()));
sessionsIO.add(sessionIO);
loggerIO.log(LogType.soCKET,"New Socket Connection from Client " + sessionIO.getRemoteAddress() + " with Sesssion ID: " + sessionIO.getPolicy().getBehavior().name() + ".");
}
我尝试从数组中取出会话的函数
public static Session getSession(String handshakeIO) {
//String handshakeIO = sessionIO.getUpgradeRequest().getHeader("Sec-WebSocket-Key");
Session cacheIO = null;
for (Session rowIO : sessionsIO) {
if (handshakeIO.equalsIgnoreCase(rowIO.getUpgradeRequest().getHeader("Sec-WebSocket-Key"))) {
loggerIO.info("FOUND SESSION WITH Sec-WebSocket-Key " + handshakeIO + ".");
cacheIO = rowIO;
}
}
return cacheIO;
}
获取会话
@SneakyThrows
@EventHandler
public static void onJoin(UserLoginEvent eventIO) {
Habbo playerIO = eventIO.habbo;
int idio = playerIO.getHabboInfo().getId();
for (Session rowIO : sessionsIO) {
if (rowIO.isopen()) {
rowIO.getRemote().sendString(gsonIO.toJson(new ActionPaket("broadcast","joinedplayer")));
}
}
if (ViceCache.playerIO.containsKey(idio)) {
Session sessionIO = ViceCache.getSession(ViceCache.playerIO.get(idio).getSessionIO());
if (sessionIO.isopen()) {
sessionIO.getRemote().sendString(gsonIO.toJson(new ActionPaket("session","granted")));
}
playerIO.whisper("Voicechat was successfully connected to Room.");
loggerIO.info("Player " + playerIO.getHabboInfo().getUsername() + " in Cache joined the Server,sending Callback.");
} else {
playerIO.whisper("To use Voice Chat,please download the Offical Vice Client.");
loggerIO.warning("Can't find Player " + playerIO.getHabboInfo().getUsername() + " with ID " + idio + " in Cache,cannot send Callback for ViceChat.");
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)