private void doUnload() { if (!done) { done = true; logger.log(Level.FINE, "Stopping comet client because of page unload"); stop(); } }
/** * End the connection. */ public void stop() { if (running) { running = false; if (unloadHandlerReg != null) { unloadHandlerReg.removeHandler(); unloadHandlerReg = null; } doDisconnect(); } }
@SuppressWarnings("unchecked") private void doneRefresh() { refreshState = null; CometClientTransportWrapper temp = primaryTransport; primaryTransport = refreshTransport; refreshTransport = temp; listener.onAfterRefresh(); if (refreshQueue != null) { if (refreshQueue.size() > 0) { logger.fine("pushing queued messages"); } for (Object object : refreshQueue) { if (object == REFRESH) { doOnRefresh(primaryTransport); } else if (object == DISCONNECT) { doOnDisconnected(primaryTransport); } else { doOnMessage((List<?>) object, primaryTransport); } } refreshQueue.clear(); } }
protected String serviceUrl() { int i = client.getUrl().indexOf('?'); String serviceUrl = (i > 0 ? client.getUrl().substring(0, i) : client.getUrl()) + "?servertransport=rpcprotocol&connectionID=" + connectionId; serviceUrl = addUrlParameter(serviceUrl, Constants.CLIENT_SERIALZE_MODE_PARAMETER, client.getSerializer().getPushMode().name()); return serviceUrl; }
private void doOnDisconnected(CometClientTransportWrapper transport) { if (refreshState != null) { if (transport == primaryTransport) { if (refreshState != RefreshState.CONNECTING && refreshState != RefreshState.PRIMARY_RECONNECT) { throw new IllegalStateException("Unexpected refreshState"); } if (refreshState == RefreshState.PRIMARY_RECONNECT) { scheduleConnect(transport); } else { refreshState = RefreshState.PRIMARY_DISCONNECTED; logger.warning("primary disconnected before refresh transport was connected"); } } else { // the refresh transport has disconnected failedRefresh(); } } else { listener.onDisconnected(); scheduleConnect(transport); } }
private void failedRefresh() { refreshState = null; logger.severe("Failed refesh"); // dispatch remaining messages; if (refreshQueue != null) { for (Object object : refreshQueue) { if (object == REFRESH || object == DISCONNECT) { } else { doOnMessage((List<?>) object, primaryTransport); } } refreshQueue.clear(); } listener.onError(new RuntimeException("Failed to refresh connection. Will try to establish a new connection"), false); scheduleConnect(primaryTransport); }
@Override protected ServerTransport getServerTransport() { if (serverTransport==null) { serverTransport = new ServerTransportProtocol(client.getSerializer()) { @Override void send(String message, AsyncCallback<Void> callback) { socket.send(message); callback.onSuccess(null); } }; } return serverTransport; }
private void doOnMessage(List<?> messages, CometClientTransportWrapper transport) { if (transport == primaryTransport) { listener.onMessage(messages); } else if (RefreshState.PRIMARY_DISCONNECTED.equals(refreshState)) { refreshEnqueue(messages); } }
@Override public void connect(int connectionCount) { domain = getDomain(getDocumentDomain(), client.getUrl()); StringBuilder html = new StringBuilder("<html>"); if (domain != null) { html.append("<script>document.domain='").append(domain).append("'</script>"); } html.append("<iframe src=''></iframe></html>"); iframe = createIFrame(html.toString()); expectingDisconnection = false; String url = getUrl(connectionCount); if (domain != null) { url += "&d=" + domain; } iframe.setSrc(url); }
private void doOnConnected(int heartbeat, int connectionID, CometClientTransportWrapper transport) { if (refreshState != null) { if (transport == refreshTransport) { if (refreshState == RefreshState.PRIMARY_DISCONNECTED) { doneRefresh(); } else if (refreshState == RefreshState.CONNECTING) { primaryTransport.disconnect(); doneRefresh(); } else { throw new IllegalStateException("Unexpected refresh state"); } } else { // refreshed connection after connection failed if (refreshState != RefreshState.CONNECTING && refreshState != RefreshState.PRIMARY_RECONNECT) { throw new IllegalStateException("Unexpected refresh state"); } refreshState = null; listener.onAfterRefresh(); } } else { listener.onConnected(heartbeat, connectionID); } }
protected String serviceUrl() { int i = client.getUrl().indexOf('?'); String serviceUrl = (i > 0 ? client.getUrl().substring(0, i) : client.getUrl()) + "?servertransport=rpcprotocol&connectionID=" + connectionId; serviceUrl = addUrlParameter(serviceUrl, Constants.CLIENT_SERIALZE_MODE_PARAMETER, client.getSerializer().getPushMode().name()); return serviceUrl; }
private void failedRefresh() { refreshState = null; logger.severe("Failed refesh"); // dispatch remaining messages; if (refreshQueue != null) { for (Object object : refreshQueue) { if (object == REFRESH || object == DISCONNECT) { } else { doOnMessage((List<?>) object, primaryTransport); } } refreshQueue.clear(); } listener.onError(new RuntimeException("Failed to refresh connection. Will try to establish a new connection"), false); scheduleConnect(primaryTransport); }
private void doOnDisconnected(CometClientTransportWrapper transport) { if (refreshState != null) { if (transport == primaryTransport) { if (refreshState != RefreshState.CONNECTING && refreshState != RefreshState.PRIMARY_RECONNECT) { throw new IllegalStateException("Unexpected refreshState"); } if (refreshState == RefreshState.PRIMARY_RECONNECT) { scheduleConnect(transport); } else { refreshState = RefreshState.PRIMARY_DISCONNECTED; logger.warning("primary disconnected before refresh transport was connected"); } } else { // the refresh transport has disconnected failedRefresh(); } } else { listener.onDisconnected(); scheduleConnect(transport); } }
@Override protected ServerTransport getServerTransport() { if (serverTransport==null) { serverTransport = new ServerTransportProtocol(client.getSerializer()) { @Override void send(String message, AsyncCallback<Void> callback) { socket.send(message); callback.onSuccess(null); } }; } return serverTransport; }
private void doOnMessage(List<?> messages, CometClientTransportWrapper transport) { if (transport == primaryTransport) { listener.onMessage(messages); } else if (RefreshState.PRIMARY_DISCONNECTED.equals(refreshState)) { refreshEnqueue(messages); } }
@Override public void connect(int connectionCount) { domain = getDomain(getDocumentDomain(), client.getUrl()); StringBuilder html = new StringBuilder("<html>"); if (domain != null) { html.append("<script>document.domain='").append(domain).append("'</script>"); } html.append("<iframe src=''></iframe></html>"); iframe = createIFrame(html.toString()); expectingDisconnection = false; String url = getUrl(connectionCount); if (domain != null) { url += "&d=" + domain; } iframe.setSrc(url); }
private void doOnConnected(int heartbeat, int connectionID, CometClientTransportWrapper transport) { if (refreshState != null) { if (transport == refreshTransport) { if (refreshState == RefreshState.PRIMARY_DISCONNECTED) { doneRefresh(); } else if (refreshState == RefreshState.CONNECTING) { primaryTransport.disconnect(); doneRefresh(); } else { throw new IllegalStateException("Unexpected refresh state"); } } else { // refreshed connection after connection failed if (refreshState != RefreshState.CONNECTING && refreshState != RefreshState.PRIMARY_RECONNECT) { throw new IllegalStateException("Unexpected refresh state"); } refreshState = null; listener.onAfterRefresh(); } } else { listener.onConnected(heartbeat, connectionID); } }
@SuppressWarnings("unchecked") private void doneRefresh() { refreshState = null; CometClientTransportWrapper temp = primaryTransport; primaryTransport = refreshTransport; refreshTransport = temp; listener.onAfterRefresh(); if (refreshQueue != null) { if (refreshQueue.size() > 0) { logger.fine("pushing queued messages"); } for (Object object : refreshQueue) { if (object == REFRESH) { doOnRefresh(primaryTransport); } else if (object == DISCONNECT) { doOnDisconnected(primaryTransport); } else { doOnMessage((List<?>) object, primaryTransport); } } refreshQueue.clear(); } }
public String getUrl(int connectionCount) { String url = client.getUrl(); if (client.getSerializer() != null) { url = addUrlParameter(url, Constants.CLIENT_DESERIALZE_MODE_PARAMETER, client.getSerializer().getMode().name()); url = addUrlParameter(url, Constants.CLIENT_SERIALZE_MODE_PARAMETER, client.getSerializer().getPushMode().name()); } String className = getClass().getName(); className = className.substring(className.lastIndexOf('.') + 1); String transport = className.substring(0, className.indexOf("CometTransport")); return addUrlParameter(url, "t", Integer.toString((int) (Duration.currentTimeMillis() % Integer.MAX_VALUE), Character.MAX_RADIX).toUpperCase() + "&c=" + connectionCount + "&tr=" + transport); }
private void doUnload() { if (!done) { done = true; logger.log(Level.FINE, "Stopping comet client because of page unload"); stop(); } }