private static RedissonClient redisson = RedissonRedisServer.createRedisConnectionWithConfig();
public static final RTopic subcriberTopic = redisson.getTopic("clientsMapTopic");
public static boolean sendToPubSub(ConnectedClient q, String message) {
boolean[] success = {true};
MessageListener<Message> listener = new MessageListener<Message>() {
@Override
public void onMessage(CharSequence channel, Message message) {
logger.debug("The message is : " + message.getMediaId());
try {
logger.debug("ConnectedClient mediaid: " + q.getMediaid() + ",Message mediaid " + message.getMediaId());
if (q.getMediaid().equals(message.getMediaId())) {
// we need to verify if the message goes to the right receiver
logger.debug("MESSAGE from PUBSUB to (" + q.getId() + ") @ " + q.getSession().getId() + " " + message);
// this is the actual message to the websocket client
// this executes on the wrong connected client when the connection is closed and reopened
q.getSession().getBasicRemote().sendText(message.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
success[0] = false;
}
}
};
int listenerId = subcriberTopic.addListener(Message.class, listener);
}
我正在观察的问题如下:
如果客户机被移除,我似乎只需要移除客户机的侦听器,但我还没有找到一个好的方法,因为尽管我在调试器中看到侦听器有关联的已连接的客户机对象,但如果不为此添加代码,我就无法检索它们。
我是否正确地观察到了这一点,什么是使这正常工作的好方法?
当我写这个问题的时候,我有点倾向于一个我想好的答案,并且尝试了,结果成功了。我添加了一个ConcurrentHashmap来跟踪连接的客户端和侦听器之间的关系。在我处理指向客户端删除的websocket错误的逻辑中,我随后删除了关联的侦听器(以及映射中的条目)。现在它按预期工作。
小片段:
int listenerId = subcriberTopic.addListener(Message.class, listener);
clientListeners.put(q,(Integer)listenerId);
然后在触发清理的websocket onError处理程序中:
// remove the associated listener
int listenerIdForClient = MessageContainer.clientListeners.get(cP);
MessageContainer.subcriberTopic.removeListener((Integer) listenerIdForClient);
// remove entry from map
MessageContainer.clientListeners.remove(cP);
我正在使用LibGDX和Box2D开发游戏。当两个物体相撞时,我想得到力或脉冲,但是我找不到正确的方法,我如何使用接触侦听器来获得冲动或力?我无法在postSolve方法中使用ContactImPulse参数获得冲动。谁能帮我?
我有一个TcpListener,可以启动 停下来 如何取消通过调用启动的任务? 通过使循环条件,我可以确保任务将在条件评估时停止。 然而,这只会发生在接受新连接之后。 我如何摆脱等待?如果关联的套接字在等待时关闭,会发生什么?谢谢你的回答!
我因被拒绝而变得不受欢迎。interceptor的对象中的headers()函数,但无法在angularjs代码中获取特定的头值。例如,x-request-id值必须存储在某个变量中,但无法这样做。请任何人建议, {pragma:“无缓存”,日期:“Thu,2018年9月6日14:57:56 GMT”,x-content-type-options:“nosniff”,x-request-id:“V
在Autoconf的第2版,大部分宏被重新命名以使用更加统一和具有描述性的命名方案。下面是被重新命名了的宏的原来名字, 随后给出了这些宏现在的名字。虽然为了保持向后兼容,旧名字仍然能够被autoconf程序所接受,旧名字都 被看作过时的。关于新的命名方案,参见 宏名 。AC—ALLOCAAC—FUNC—ALLOCA AC—ARG—ARRAY 因为用途有限而被删除了。AC—CHAR—UNSIGNED
我有两个屏幕..首先是闪屏,在这里我借助firebase.auth()检查用户是否已经存在。onAuthStateChanged侦听器。如果用户为空,它将转到另一个firebase.auth()的登录屏幕。onAuthStateChanged侦听器用于在电话验证后获取用户,如果用户之前未注册,则将用户移至UserDetails屏幕以获取更多用户信息,或者移至主屏幕..同样的检查也在闪屏上进行,以确
从元素中移除事件侦听器。 使用 EventTarget.removeEventListener() 从元素中删除一个事件监听器。 省略第四个参数 opts ,则默认使用 false 或者根据添加事件监听器时使用的选项来指定它。 const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts); con