Atmosphere/atmosphere — Issue #77: close event : NULL vs EMPTY
Author: survivant
Created: 2011-11-25 14:54:56+00:00
State: open

je ne suis pas sur.. mais je pense que les events envoyés sur

public void onStateChange(AtmosphereResourceEvent event) throws IOException {

pour une connection Comet et WebSocket ne sont pas les mêmes.

dans mon code actuel.. j'ai ceci :

if(event.getMessage()!=null){
logger.error("onStateChange Event isResumedOnTimeout =" + event.isResumedOnTimeout() + " Event isResuming =" + event.isResuming() + " Event isSuspended =" + event.isSuspended() + " Message = " + event.getMessage().toString());
} else {
logger.error("onStateChange Message = null");

if(event.isResumedOnTimeout()){

if(outbound!=null){
try {
outbound.sendMessage("2::");
} catch (Exception e) {
outbound.disconnect();
}
}

}

return;
}

ca marche bien pour les connections long-polling.

mais pour les websocket..

le event.getMessage n'est pas NULL.. il est VIDE.

new WebSocketEventListener.WebSocketEvent("", CLOSE, webSocketProcessor.webSocket())

mais pire.. dans mon public void onStateChange(AtmosphereResourceEvent event) throws IOException {

il arrive à ce bout de code..

if(outbound!=null && event.getMessage().toString().length()>0){
try {

List messages = SocketIOEvent.parse(event.getMessage().toString());
...

qui est valide.. car event.getMessage() n'est pas vide... mais comme c'est un OBJECT.. je faisais un .toString() pour obtenir le contenu du message.. mais dans le code du close du webSocket.. c'est pas une String..

donc il essaye de parser la String : [B@127f4f9

en gros... je suis en train de tester le close des Websocket du Chat :)

je fais un F5. J'obtiens une connection Websocket... et si je fais un F5 encore... ca close le websocket et en ouvre un nouveau... (Chrome).. et c'est ca que je teste. Je cherche à détecter correctment l'event dans mon AtmosphereHandler.

voici les stacktraces

Thread [qtp8550760-15] (Suspended (breakpoint at line 236 in WebSocketProcessor))
WebSocketProcessor.notifyListener(WebSocketEventListener$WebSocketEvent) line: 236
JettyWebSocketHandler.onClose(int, String) line: 197
WebSocketConnectionD08.closeOut(int, String) line: 356
WebSocketConnectionD08.idleExpired() line: 271
SelectChannelEndPoint.idleExpired() line: 282
SelectChannelEndPoint.checkIdleTimestamp(long) line: 276
SelectorManager$SelectSet$2.run() line: 713
QueuedThreadPool.runJob(Runnable) line: 598
QueuedThreadPool$3.run() line: 533
Thread.run() line: not available

et celle la dans le handler

Daemon Thread [Atmosphere-AsyncWrite-0] (Suspended (breakpoint at line 114 in ChatAtmosphereHandler))
ChatAtmosphereHandler.onStateChange(AtmosphereResourceEvent) line: 114
ExcludeSessionBroadcaster(DefaultBroadcaster).broadcast(AtmosphereResource, AtmosphereResourceEvent) line: 677
ExcludeSessionBroadcaster(DefaultBroadcaster).executeAsyncWrite(AtmosphereResource, Object, BroadcasterFuture) line: 611
DefaultBroadcaster$3.run() line: 636
Executors$RunnableAdapter.call() line: not available
FutureTask$Sync.innerRun() line: not available
FutureTask.run() line: not available
ThreadPoolExecutor$Worker.runTask(Runnable) line: not available
ThreadPoolExecutor$Worker.run() line: not available
Thread.run() line: not available