more consistent naming and implemented more methods in the response
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/78c6b2cc Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/78c6b2cc Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/78c6b2cc Branch: refs/heads/sandbox/atmosphere Commit: 78c6b2cc32b0bcab698c38ed40140fa1076c15bd Parents: c3d9082 Author: Emond Papegaaij <[email protected]> Authored: Wed Apr 4 10:56:16 2012 +0200 Committer: Emond Papegaaij <[email protected]> Committed: Thu Apr 19 11:07:55 2012 +0200 ---------------------------------------------------------------------- .../wicket/atmosphere/AtmosphereBehavior.java | 6 + .../wicket/atmosphere/AtmosphereRequestMapper.java | 33 ++++ .../wicket/atmosphere/AtmosphereWebRequest.java | 101 ++++++++++ .../wicket/atmosphere/AtmosphereWebResponse.java | 147 +++++++++++++++ .../org/apache/wicket/atmosphere/EventBus.java | 23 ++- .../wicket/atmosphere/PushRequestMapper.java | 33 ---- .../apache/wicket/atmosphere/PushWebRequest.java | 101 ---------- .../wicket/atmosphere/StringWebResponse.java | 141 -------------- .../wicket/atmosphere/jquery.wicketatmosphere.js | 11 - .../wicket/examples/atmosphere/HomePage.java | 1 + 10 files changed, 306 insertions(+), 291 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java index f6d07f3..6f1734f 100644 --- a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java +++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java @@ -113,6 +113,12 @@ public class AtmosphereBehavior extends Behavior Meteor meteor = Meteor.lookup(event.getResource().getRequest()); meteor.resume(); } + + if ((System.currentTimeMillis() - connectedAt) > 10000) + { + Meteor meteor = Meteor.lookup(event.getResource().getRequest()); + meteor.resume(); + } } } http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestMapper.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestMapper.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestMapper.java new file mode 100644 index 0000000..25b5f86 --- /dev/null +++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestMapper.java @@ -0,0 +1,33 @@ +package org.apache.wicket.atmosphere; + +import org.apache.wicket.request.IRequestHandler; +import org.apache.wicket.request.IRequestMapper; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.Url; + +public class AtmosphereRequestMapper implements IRequestMapper +{ + @Override + public IRequestHandler mapRequest(Request request) + { + if (request instanceof AtmosphereWebRequest) + { + AtmosphereWebRequest pushRequest = (AtmosphereWebRequest) request; + return new AtmosphereRequestHandler(pushRequest.getPageKey(), + pushRequest.getSubscriptions(), pushRequest.getEvent()); + } + return null; + } + + @Override + public int getCompatibilityScore(Request request) + { + return request instanceof AtmosphereWebRequest ? Integer.MAX_VALUE : 0; + } + + @Override + public Url mapHandler(IRequestHandler requestHandler) + { + return null; + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java new file mode 100644 index 0000000..3e9c79f --- /dev/null +++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java @@ -0,0 +1,101 @@ +package org.apache.wicket.atmosphere; + +import java.nio.charset.Charset; +import java.util.Collection; +import java.util.List; +import java.util.Locale; + +import javax.servlet.http.Cookie; + +import org.apache.wicket.request.Url; +import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.util.time.Time; + +public class AtmosphereWebRequest extends WebRequest +{ + private WebRequest wrappedRequest; + + private PageKey pageKey; + + private Collection<EventSubscription> subscriptions; + + private Object event; + + public AtmosphereWebRequest(WebRequest wrappedRequest, PageKey pageKey, + Collection<EventSubscription> subscriptions, Object event) + { + this.wrappedRequest = wrappedRequest; + this.pageKey = pageKey; + this.subscriptions = subscriptions; + this.event = event; + } + + public PageKey getPageKey() + { + return pageKey; + } + + public Collection<EventSubscription> getSubscriptions() + { + return subscriptions; + } + + public Object getEvent() + { + return event; + } + + @Override + public List<Cookie> getCookies() + { + return wrappedRequest.getCookies(); + } + + @Override + public List<String> getHeaders(String name) + { + return wrappedRequest.getHeaders(name); + } + + @Override + public String getHeader(String name) + { + return wrappedRequest.getHeader(name); + } + + @Override + public Time getDateHeader(String name) + { + return wrappedRequest.getDateHeader(name); + } + + @Override + public Url getUrl() + { + return wrappedRequest.getUrl(); + } + + @Override + public Url getClientUrl() + { + return wrappedRequest.getClientUrl(); + } + + @Override + public Locale getLocale() + { + return wrappedRequest.getLocale(); + } + + @Override + public Charset getCharset() + { + return wrappedRequest.getCharset(); + } + + @Override + public Object getContainerRequest() + { + return wrappedRequest.getContainerRequest(); + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebResponse.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebResponse.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebResponse.java new file mode 100644 index 0000000..34dc127 --- /dev/null +++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebResponse.java @@ -0,0 +1,147 @@ +package org.apache.wicket.atmosphere; + +import javax.servlet.http.Cookie; + +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.util.string.AppendingStringBuffer; +import org.apache.wicket.util.time.Time; +import org.atmosphere.cpr.AtmosphereResponse; + +public class AtmosphereWebResponse extends WebResponse +{ + private AtmosphereResponse response; + private final AppendingStringBuffer out; + + public AtmosphereWebResponse(AtmosphereResponse response) + { + this.response = response; + out = new AppendingStringBuffer(128); + } + + @Override + public void addCookie(Cookie cookie) + { + response.addCookie(cookie); + } + + @Override + public void clearCookie(Cookie cookie) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setHeader(String name, String value) + { + response.setHeader(name, value); + } + + @Override + public void addHeader(String name, String value) + { + response.addHeader(name, value); + } + + @Override + public void setDateHeader(String name, Time date) + { + response.setDateHeader(name, date.getMilliseconds()); + } + + @Override + public void setContentLength(long length) + { + response.setContentLength((int)length); + } + + @Override + public void setContentType(String mimeType) + { + response.setContentType(mimeType); + } + + @Override + public void setStatus(int sc) + { + response.setStatus(sc); + } + + @Override + public void sendError(int sc, String msg) + { + throw new UnsupportedOperationException(); + } + + @Override + public String encodeRedirectURL(CharSequence url) + { + return response.encodeRedirectUrl(url.toString()); + } + + @Override + public void sendRedirect(String url) + { + throw new UnsupportedOperationException(); + } + + @Override + public void write(byte[] array) + { + throw new UnsupportedOperationException(); + } + + @Override + public void write(byte[] array, int offset, int length) + { + throw new UnsupportedOperationException(); + } + + @Override + public String encodeURL(CharSequence url) + { + return response.encodeURL(url.toString()); + } + + @Override + public Object getContainerResponse() + { + return response; + } + + @Override + public boolean isRedirect() + { + return false; + } + + @Override + public void reset() + { + out.clear(); + } + + @Override + public void flush() + { + } + + @Override + public void write(CharSequence sequence) + { + out.append(sequence); + } + + /** + * @return The internal buffer directly as a {@link CharSequence} + */ + public CharSequence getBuffer() + { + return out; + } + + @Override + public String toString() + { + return out.toString(); + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java index d60bc67..7cbc06a 100644 --- a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java +++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java @@ -19,6 +19,8 @@ import org.apache.wicket.session.ISessionStore.UnboundListener; import org.atmosphere.cpr.AtmosphereResource; import org.atmosphere.cpr.Broadcaster; import org.atmosphere.cpr.BroadcasterFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.collect.BiMap; import com.google.common.collect.Collections2; @@ -29,6 +31,8 @@ import com.google.common.collect.Multimap; public class EventBus implements UnboundListener { + private static final Logger log = LoggerFactory.getLogger(EventBus.class); + private static final MetaDataKey<EventBus> EVENT_BUS_KEY = new MetaDataKey<EventBus>() { private static final long serialVersionUID = 1L; @@ -51,9 +55,10 @@ public class EventBus implements UnboundListener { this.application = application; application.setMetaData(EVENT_BUS_KEY, this); - application.mount(new PushRequestMapper()); + application.mount(new AtmosphereRequestMapper()); application.getComponentPreOnBeforeRenderListeners().add( new AtmosphereEventSubscriptionCollector(this)); + application.getSessionStore().registerUnboundListener(this); broadcaster = BroadcasterFactory.getDefault().lookup("/*"); } @@ -64,10 +69,14 @@ public class EventBus implements UnboundListener if (oldPage != null && !oldPage.equals(pageKey)) subscriptions.removeAll(oldPage); trackedPages.forcePut(trackingId, pageKey); + log.info("registered page {} for session {}", + new Object[] { pageKey.getPageId(), pageKey.getSessionId() }); } public synchronized void register(Page page, EventSubscription subscription) { + log.info("registering component for {} for session {}: {}", new Object[] { + page.getPageId(), Session.get().getId(), subscription.getComponentPath() }); subscriptions.put(new PageKey(page.getPageId(), Session.get().getId()), subscription); } @@ -87,7 +96,10 @@ public class EventBus implements UnboundListener Collections.unmodifiableCollection(subscriptions.get(key)), new EventFilter(event)); } - post(resource, key, subscriptionsForPage, event); + if (key == null) + broadcaster.removeAtmosphereResource(resource); + else + post(resource, key, subscriptionsForPage, event); } } finally @@ -113,9 +125,9 @@ public class EventBus implements UnboundListener return ret == null ? "" : ret; } }; - PushWebRequest request = new PushWebRequest(application.newWebRequest(httpRequest, - filterPath), pageKey, subscriptionsForPage, event); - Response response = new StringWebResponse(); + AtmosphereWebRequest request = new AtmosphereWebRequest(application.newWebRequest( + httpRequest, filterPath), pageKey, subscriptionsForPage, event); + Response response = new AtmosphereWebResponse(resource.getResponse()); if (application.createRequestCycle(request, response).processRequestAndDetach()) broadcaster.broadcast(response.toString(), resource); } @@ -123,6 +135,7 @@ public class EventBus implements UnboundListener @Override public synchronized void sessionUnbound(String sessionId) { + log.info("Session unbound {}", sessionId); Iterator<PageKey> it = Iterators.concat(trackedPages.values().iterator(), subscriptions.keySet().iterator()); while (it.hasNext()) http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java deleted file mode 100644 index 909a131..0000000 --- a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushRequestMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.apache.wicket.atmosphere; - -import org.apache.wicket.request.IRequestHandler; -import org.apache.wicket.request.IRequestMapper; -import org.apache.wicket.request.Request; -import org.apache.wicket.request.Url; - -public class PushRequestMapper implements IRequestMapper -{ - @Override - public IRequestHandler mapRequest(Request request) - { - if (request instanceof PushWebRequest) - { - PushWebRequest pushRequest = (PushWebRequest) request; - return new AtmosphereRequestHandler(pushRequest.getPageKey(), - pushRequest.getSubscriptions(), pushRequest.getEvent()); - } - return null; - } - - @Override - public int getCompatibilityScore(Request request) - { - return request instanceof PushWebRequest ? Integer.MAX_VALUE : 0; - } - - @Override - public Url mapHandler(IRequestHandler requestHandler) - { - return null; - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java deleted file mode 100644 index a31a73b..0000000 --- a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/PushWebRequest.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.apache.wicket.atmosphere; - -import java.nio.charset.Charset; -import java.util.Collection; -import java.util.List; -import java.util.Locale; - -import javax.servlet.http.Cookie; - -import org.apache.wicket.request.Url; -import org.apache.wicket.request.http.WebRequest; -import org.apache.wicket.util.time.Time; - -public class PushWebRequest extends WebRequest -{ - private WebRequest wrappedRequest; - - private PageKey pageKey; - - private Collection<EventSubscription> subscriptions; - - private Object event; - - public PushWebRequest(WebRequest wrappedRequest, PageKey pageKey, - Collection<EventSubscription> subscriptions, Object event) - { - this.wrappedRequest = wrappedRequest; - this.pageKey = pageKey; - this.subscriptions = subscriptions; - this.event = event; - } - - public PageKey getPageKey() - { - return pageKey; - } - - public Collection<EventSubscription> getSubscriptions() - { - return subscriptions; - } - - public Object getEvent() - { - return event; - } - - @Override - public List<Cookie> getCookies() - { - return wrappedRequest.getCookies(); - } - - @Override - public List<String> getHeaders(String name) - { - return wrappedRequest.getHeaders(name); - } - - @Override - public String getHeader(String name) - { - return wrappedRequest.getHeader(name); - } - - @Override - public Time getDateHeader(String name) - { - return wrappedRequest.getDateHeader(name); - } - - @Override - public Url getUrl() - { - return wrappedRequest.getUrl(); - } - - @Override - public Url getClientUrl() - { - return wrappedRequest.getClientUrl(); - } - - @Override - public Locale getLocale() - { - return wrappedRequest.getLocale(); - } - - @Override - public Charset getCharset() - { - return wrappedRequest.getCharset(); - } - - @Override - public Object getContainerRequest() - { - return wrappedRequest.getContainerRequest(); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java deleted file mode 100644 index 2f4db04..0000000 --- a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/StringWebResponse.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.apache.wicket.atmosphere; - -import javax.servlet.http.Cookie; - -import org.apache.wicket.request.http.WebResponse; -import org.apache.wicket.util.string.AppendingStringBuffer; -import org.apache.wicket.util.time.Time; - -public class StringWebResponse extends WebResponse -{ - protected final AppendingStringBuffer out; - - public StringWebResponse() - { - out = new AppendingStringBuffer(128); - } - - @Override - public void addCookie(Cookie cookie) - { - throw new UnsupportedOperationException(); - } - - @Override - public void clearCookie(Cookie cookie) - { - throw new UnsupportedOperationException(); - } - - @Override - public void setHeader(String name, String value) - { - } - - @Override - public void addHeader(String name, String value) - { - throw new UnsupportedOperationException(); - } - - @Override - public void setDateHeader(String name, Time date) - { - } - - @Override - public void setContentLength(long length) - { - throw new UnsupportedOperationException(); - } - - @Override - public void setContentType(String mimeType) - { - } - - @Override - public void setStatus(int sc) - { - throw new UnsupportedOperationException(); - } - - @Override - public void sendError(int sc, String msg) - { - throw new UnsupportedOperationException(); - } - - @Override - public String encodeRedirectURL(CharSequence url) - { - throw new UnsupportedOperationException(); - } - - @Override - public void sendRedirect(String url) - { - throw new UnsupportedOperationException(); - } - - @Override - public void write(byte[] array) - { - throw new UnsupportedOperationException(); - } - - @Override - public void write(byte[] array, int offset, int length) - { - throw new UnsupportedOperationException(); - } - - @Override - public String encodeURL(CharSequence url) - { - throw new UnsupportedOperationException(); - } - - @Override - public Object getContainerResponse() - { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isRedirect() - { - return false; - } - - @Override - public void reset() - { - out.clear(); - } - - @Override - public void flush() - { - } - - @Override - public void write(CharSequence sequence) - { - out.append(sequence); - } - - /** - * @return The internal buffer directly as a {@link CharSequence} - */ - public CharSequence getBuffer() - { - return out; - } - - @Override - public String toString() - { - return out.toString(); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js ---------------------------------------------------------------------- diff --git a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js index be51a2c..8583ea0 100644 --- a/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js +++ b/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js @@ -5,17 +5,6 @@ // jquery.atmosphere.response function callback(response) { - console.log(response.responseBody); - // Websocket events. - // $.atmosphere.log('info', [ "response.state: " + - // response.state - // ]); - // $.atmosphere.log('info', [ "response.transport: " - // + response.transport ]); - // $.atmosphere.log('info', [ "response.status: " + - // response.status - // ]); - detectedTransport = response.transport; if (response.transport != 'polling' && response.state == 'messageReceived') { http://git-wip-us.apache.org/repos/asf/wicket/blob/78c6b2cc/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/HomePage.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/HomePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/HomePage.java index b0e9015..f26c3a7 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/HomePage.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/atmosphere/HomePage.java @@ -20,6 +20,7 @@ public class HomePage extends WebPage { add(new Label("version", getApplication().getFrameworkSettings().getVersion())); add(timeLabel = new Label("time", Model.of("start")).setOutputMarkupId(true)); + setVersioned(false); } @Subscribe
