Skip to content

Commit

Permalink
🐛 Fixes regression caused by #1885
Browse files Browse the repository at this point in the history
  • Loading branch information
jfarcand committed Mar 25, 2015
1 parent 6eef74e commit aa4182c
Showing 1 changed file with 28 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class AtmosphereResourceImpl implements AtmosphereResource {
private AtmosphereResponse response;
private final Action action = new Action();
protected final List<Broadcaster> broadcasters = new CopyOnWriteArrayList<Broadcaster>();
protected Broadcaster broadcaster;
private AtmosphereConfig config;
protected AsyncSupport asyncSupport;
private Serializer serializer;
Expand Down Expand Up @@ -120,7 +121,8 @@ public AtmosphereResource initialize(AtmosphereConfig config, Broadcaster broadc
this.atmosphereHandler = atmosphereHandler;
this.event = new AtmosphereResourceEventImpl(this);

broadcasters.add(broadcaster);
this.broadcaster = broadcaster;
uniqueBroadcaster(broadcaster);

String s = (String) req.getAttribute(SUSPENDED_ATMOSPHERE_RESOURCE_UUID);
if (s == null) {
Expand Down Expand Up @@ -389,7 +391,7 @@ public AtmosphereResource suspend(long timeout) {
skipCreation = true;
}

Broadcaster broadcaster = broadcasters.get(0);
Broadcaster broadcaster = getBroadcaster();

// Null means SCOPE=REQUEST set by a Meteor
if (!skipCreation && (broadcaster == null || broadcaster.getScope() == Broadcaster.SCOPE.REQUEST) && !isJersey) {
Expand Down Expand Up @@ -451,7 +453,6 @@ public List<Broadcaster> broadcasters() {
}

protected Broadcaster getBroadcaster(boolean autoCreate) {
Broadcaster broadcaster = broadcasters.size() == 0 ? null : broadcasters.get(0);
if (broadcaster == null) {
throw new IllegalStateException("No Broadcaster associated with this AtmosphereResource.");
}
Expand Down Expand Up @@ -480,34 +481,38 @@ protected Broadcaster getBroadcaster(boolean autoCreate) {
}

@Override
public AtmosphereResourceImpl setBroadcaster(Broadcaster broadcaster) {
// For legacy
if (broadcasters.size() == 0) {
broadcasters.add(broadcaster);
} else {
broadcasters.set(0, broadcaster);
}
return this;
public AtmosphereResource setBroadcaster(Broadcaster broadcaster) {
this.broadcaster = broadcaster;
return uniqueBroadcaster(broadcaster);
}

@Override
public AtmosphereResource addBroadcaster(Broadcaster broadcaster) {
broadcasters.add(broadcaster);
return this;
return uniqueBroadcaster(broadcaster);
}

@Override
public AtmosphereResource removeBroadcaster(Broadcaster broadcaster) {
/**
* For legacy reason, never remove the last Broadcaster to prevent side effect.
* This must be revisited in Atmosphere 3.0
*/
if (broadcasters.size() > 1) {
broadcasters.remove(broadcaster);
broadcasters.remove(broadcaster);
return this;
}

protected AtmosphereResource uniqueBroadcaster(Broadcaster newB) {
if (newB == null) {
return this;
}
// TODO: performance bottleneck
for (Broadcaster b: broadcasters) {
if (b.getID() != null && b.getID().equalsIgnoreCase(newB.getID())) {
logger.trace("Duplicate Broadcaster {}", newB);
return this;
}
}
broadcasters.add(newB);
return this;
}


@Override
public AtmosphereConfig getAtmosphereConfig() {
return config;
Expand Down Expand Up @@ -679,8 +684,8 @@ public AtmosphereResource notifyListeners(AtmosphereResourceEvent event) {
}

@Override
public AtmosphereResource removeFromAllBroadcasters(){
for (Broadcaster b: broadcasters) {
public AtmosphereResource removeFromAllBroadcasters() {
for (Broadcaster b : broadcasters) {
try {
b.removeAtmosphereResource(this);
} catch (Exception ex) {
Expand Down Expand Up @@ -757,7 +762,7 @@ void onDisconnect(AtmosphereResourceEvent e) {
}
}

if(e.getResource() != null) {
if (e.getResource() != null) {
config.framework().notifyDestroyed(e.getResource().uuid());
}
}
Expand Down Expand Up @@ -841,15 +846,11 @@ private void unregister() {

public void _destroy() {
try {
// TODO: Remove with Atmosphere 3
// Legacy https://github.com/Atmosphere/atmosphere/issues/1885
Broadcaster b = getBroadcaster();
if (!isCancelled.get()) {
removeFromAllBroadcasters();
}
broadcasters.clear();

broadcasters.add(b);
unregister();
removeEventListeners();
} catch (Throwable t) {
Expand Down Expand Up @@ -1013,7 +1014,7 @@ public int hashCode() {
return uuid != null ? uuid.hashCode() : 0;
}

public boolean getAndSetInClosingPhase(){
public boolean getAndSetInClosingPhase() {
return inClosingPhase.getAndSet(true);
}
}

0 comments on commit aa4182c

Please sign in to comment.