diff options
author | Eike Stepper | 2008-08-13 10:35:52 +0000 |
---|---|---|
committer | Eike Stepper | 2008-08-13 10:35:52 +0000 |
commit | d892a8ea1dd81927c1b51908fc5ab5252825b2e3 (patch) | |
tree | 4ae18ba0d75e759840f6e8abd7e4f4712742b81b /plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j | |
parent | 4edaf98c74c62bf5c53203572b68da6c7cf4ab25 (diff) | |
download | cdo-d892a8ea1dd81927c1b51908fc5ab5252825b2e3.tar.gz cdo-d892a8ea1dd81927c1b51908fc5ab5252825b2e3.tar.xz cdo-d892a8ea1dd81927c1b51908fc5ab5252825b2e3.zip |
[243987] Decouple Signal from IChannel
https://bugs.eclipse.org/bugs/show_bug.cgi?id=243987
Diffstat (limited to 'plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j')
12 files changed, 82 insertions, 81 deletions
diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java index 4a24c4bdd3..4fc6fd898d 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java @@ -22,6 +22,7 @@ import org.eclipse.net4j.buddies.internal.common.CollaborationContainer; import org.eclipse.net4j.buddies.internal.common.Membership; import org.eclipse.net4j.buddies.internal.common.protocol.BuddyStateNotification; import org.eclipse.net4j.buddies.internal.server.bundle.OM; +import org.eclipse.net4j.buddies.internal.server.protocol.BuddiesServerProtocol; import org.eclipse.net4j.buddies.internal.server.protocol.BuddyRemovedNotification; import org.eclipse.net4j.buddies.internal.server.protocol.CollaborationInitiatedNotification; import org.eclipse.net4j.buddies.server.IBuddyAdmin; @@ -131,7 +132,8 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I buddy.activate(); buddy.addListener(this); - ServerSession session = new ServerSession(channel, buddy); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)channel.getReceiveHandler(); + ServerSession session = new ServerSession(protocol, buddy); ((IProtocol)channel.getReceiveHandler()).setInfraStructure(session); session.addListener(this); buddy.setSession(session); @@ -179,8 +181,8 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I try { invitations.remove(buddy); - IChannel channel = buddy.getSession().getChannel(); - new CollaborationInitiatedNotification(channel, collaborationID, invitations, null).send(); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol(); + new CollaborationInitiatedNotification(protocol, collaborationID, invitations, null).send(); } catch (Exception ex) { @@ -217,7 +219,8 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I { try { - new BuddyRemovedNotification(session.getChannel(), userID).send(); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)session.getProtocol(); + new BuddyRemovedNotification(protocol, userID).send(); } catch (Exception ex) { @@ -242,7 +245,8 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I { if (!ObjectUtil.equals(session.getSelf(), e.getBuddy())) { - new BuddyStateNotification(session.getChannel(), e.getBuddy().getUserID(), e.getNewState()).send(); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)session.getProtocol(); + new BuddyStateNotification(protocol, e.getBuddy().getUserID(), e.getNewState()).send(); } } catch (Exception ex) diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java index 88220d7f68..026c818842 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerSession.java @@ -12,7 +12,7 @@ package org.eclipse.net4j.buddies.internal.server; import org.eclipse.net4j.buddies.common.IBuddy; import org.eclipse.net4j.buddies.common.ISession; -import org.eclipse.net4j.channel.IChannel; +import org.eclipse.net4j.buddies.internal.server.protocol.BuddiesServerProtocol; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; import org.eclipse.net4j.util.lifecycle.ILifecycleEvent; @@ -26,19 +26,25 @@ import org.eclipse.core.runtime.PlatformObject; */ public class ServerSession extends Lifecycle implements ISession, IListener { - private IChannel channel; + private BuddiesServerProtocol protocol; private IBuddy self; - public ServerSession(IChannel channel, IBuddy self) + /** + * @since 2.0 + */ + public ServerSession(BuddiesServerProtocol protocol, IBuddy self) { - this.channel = channel; + this.protocol = protocol; this.self = self; } - public IChannel getChannel() + /** + * @since 2.0 + */ + public BuddiesServerProtocol getProtocol() { - return channel; + return protocol; } public IBuddy getSelf() @@ -48,7 +54,8 @@ public class ServerSession extends Lifecycle implements ISession, IListener public void close() { - channel.close(); + protocol.close(); + protocol = null; deactivate(); } @@ -63,7 +70,7 @@ public class ServerSession extends Lifecycle implements ISession, IListener public void notifyEvent(IEvent event) { - if (event.getSource() == channel) + if (event.getSource() == protocol) { if (event instanceof ILifecycleEvent) { @@ -79,7 +86,7 @@ public class ServerSession extends Lifecycle implements ISession, IListener protected void doActivate() throws Exception { super.doActivate(); - channel.addListener(this); + protocol.addListener(this); self.getAccount().touch(); } @@ -87,7 +94,7 @@ public class ServerSession extends Lifecycle implements ISession, IListener protected void doDeactivate() throws Exception { self.getAccount().touch(); - channel.removeListener(this); + protocol.removeListener(this); super.doDeactivate(); } } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddiesServerProtocol.java index 3f695769bb..9152f01b03 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddiesServerProtocol.java @@ -15,13 +15,15 @@ import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.server.IBuddyAdmin; import org.eclipse.net4j.signal.SignalProtocol; import org.eclipse.net4j.signal.SignalReactor; +import org.eclipse.net4j.util.container.IManagedContainer; /** * @author Eike Stepper + * @since 2.0 */ -public class ServerProtocol extends SignalProtocol +public class BuddiesServerProtocol extends SignalProtocol { - public ServerProtocol() + public BuddiesServerProtocol() { } @@ -59,4 +61,25 @@ public class ServerProtocol extends SignalProtocol return null; } + + /** + * @author Eike Stepper + */ + public static class Factory extends org.eclipse.net4j.protocol.ServerProtocolFactory + { + public Factory() + { + super(ProtocolConstants.PROTOCOL_NAME); + } + + public BuddiesServerProtocol create(String description) + { + return new BuddiesServerProtocol(); + } + + public static BuddiesServerProtocol get(IManagedContainer container, String description) + { + return (BuddiesServerProtocol)container.getElement(PRODUCT_GROUP, ProtocolConstants.PROTOCOL_NAME, description); + } + } } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java index 63da3d9e3a..bd6de9eafa 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyAddedNotification.java @@ -11,7 +11,6 @@ package org.eclipse.net4j.buddies.internal.server.protocol; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.Request; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -24,9 +23,12 @@ public class BuddyAddedNotification extends Request { private String buddy; - public BuddyAddedNotification(IChannel channel, String buddy) + /** + * @since 2.0 + */ + public BuddyAddedNotification(BuddiesServerProtocol protocol, String buddy) { - super(channel); + super(protocol); this.buddy = buddy; } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java index 3577d39d26..5fdf1ed671 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/BuddyRemovedNotification.java @@ -11,7 +11,6 @@ package org.eclipse.net4j.buddies.internal.server.protocol; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.Request; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -24,9 +23,12 @@ public class BuddyRemovedNotification extends Request { private String buddy; - public BuddyRemovedNotification(IChannel channel, String buddy) + /** + * @since 2.0 + */ + public BuddyRemovedNotification(BuddiesServerProtocol protocol, String buddy) { - super(channel); + super(protocol); this.buddy = buddy; } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java index 9ba1eb68b2..4c5430bbe5 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java @@ -13,7 +13,6 @@ package org.eclipse.net4j.buddies.internal.server.protocol; import org.eclipse.net4j.buddies.common.IBuddy; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.Request; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -31,10 +30,13 @@ public class CollaborationInitiatedNotification extends Request private String[] facilityTypes; - public CollaborationInitiatedNotification(IChannel channel, long collaborationID, Collection<IBuddy> buddies, - String[] facilityTypes) + /** + * @since 2.0 + */ + public CollaborationInitiatedNotification(BuddiesServerProtocol protocol, long collaborationID, + Collection<IBuddy> buddies, String[] facilityTypes) { - super(channel); + super(protocol); this.collaborationID = collaborationID; this.buddies = buddies; this.facilityTypes = facilityTypes; diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java index 32b8493494..b10576606a 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/FacilityInstalledNotification.java @@ -11,7 +11,6 @@ package org.eclipse.net4j.buddies.internal.server.protocol; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.Request; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -26,9 +25,12 @@ public class FacilityInstalledNotification extends Request private String facilityType; - public FacilityInstalledNotification(IChannel channel, long collaborationID, String facilityType) + /** + * @since 2.0 + */ + public FacilityInstalledNotification(BuddiesServerProtocol protocol, long collaborationID, String facilityType) { - super(channel); + super(protocol); this.collaborationID = collaborationID; this.facilityType = facilityType; } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java index 28afa4f49f..8bbcb9ac7f 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java @@ -18,7 +18,6 @@ import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.internal.server.BuddyAdmin; import org.eclipse.net4j.buddies.internal.server.bundle.OM; import org.eclipse.net4j.buddies.spi.common.ServerFacilityFactory; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.IndicationWithResponse; import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.io.ExtendedDataInputStream; @@ -71,8 +70,8 @@ public class InstallFacilityIndication extends IndicationWithResponse { try { - IChannel channel = buddy.getSession().getChannel(); - new FacilityInstalledNotification(channel, collaborationID, facilityType).send(); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol(); + new FacilityInstalledNotification(protocol, collaborationID, facilityType).send(); } catch (Exception ex) { diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java index ce1cbf61e4..029c15cc2c 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java @@ -16,7 +16,6 @@ import org.eclipse.net4j.buddies.internal.common.Membership; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil; import org.eclipse.net4j.buddies.internal.server.BuddyAdmin; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.Indication; import org.eclipse.net4j.util.WrappedException; import org.eclipse.net4j.util.io.ExtendedDataInputStream; @@ -65,7 +64,6 @@ public class InviteBuddiesIndication extends Indication List<IBuddy> buddies = Arrays.asList(collaboration.getBuddies()); for (IBuddy buddy : buddies) { - IChannel channel = buddy.getSession().getChannel(); String[] facilityTypes = null; Set<IBuddy> set = new HashSet<IBuddy>(); if (added.contains(buddy)) @@ -83,7 +81,8 @@ public class InviteBuddiesIndication extends Indication { try { - new CollaborationInitiatedNotification(channel, collaborationID, set, facilityTypes).send(); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol(); + new CollaborationInitiatedNotification(protocol, collaborationID, set, facilityTypes).send(); } catch (Exception ex) { diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java index 8583d51fdb..cddf28c57e 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java @@ -17,7 +17,6 @@ import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolUtil; import org.eclipse.net4j.buddies.internal.server.bundle.OM; import org.eclipse.net4j.buddies.server.IBuddyAdmin; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.signal.IndicationWithResponse; import org.eclipse.net4j.util.io.ExtendedDataInputStream; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -78,7 +77,7 @@ public class OpenSessionIndication extends IndicationWithResponse ProtocolUtil.writeAccount(out, account); if (account != null) { - List<IChannel> channels = new ArrayList<IChannel>(); + List<BuddiesServerProtocol> protocols = new ArrayList<BuddiesServerProtocol>(); out.writeInt(buddies.length); for (IBuddy buddy : buddies) { @@ -86,15 +85,15 @@ public class OpenSessionIndication extends IndicationWithResponse ISession buddySession = IBuddyAdmin.INSTANCE.getSession(buddy); if (buddySession != null) { - channels.add(buddySession.getChannel()); + protocols.add((BuddiesServerProtocol)buddySession.getProtocol()); } } - for (IChannel channel : channels) + for (BuddiesServerProtocol protocol : protocols) { try { - new BuddyAddedNotification(channel, account.getUserID()).send(); + new BuddyAddedNotification(protocol, account.getUserID()).send(); } catch (Exception ex) { diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java index 2925d78b6b..46cef3764d 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerCollaborationLeftIndication.java @@ -18,7 +18,6 @@ import org.eclipse.net4j.buddies.internal.common.protocol.CollaborationLeftIndic import org.eclipse.net4j.buddies.internal.common.protocol.CollaborationLeftNotification; import org.eclipse.net4j.buddies.internal.server.BuddyAdmin; import org.eclipse.net4j.buddies.server.IBuddyAdmin; -import org.eclipse.net4j.channel.IChannel; import org.eclipse.net4j.util.WrappedException; /** @@ -41,8 +40,8 @@ public class ServerCollaborationLeftIndication extends CollaborationLeftIndicati { try { - IChannel channel = member.getSession().getChannel(); - new CollaborationLeftNotification(channel, collaboration.getID(), buddy.getUserID()).send(); + BuddiesServerProtocol protocol = (BuddiesServerProtocol)buddy.getSession().getProtocol(); + new CollaborationLeftNotification(protocol, collaboration.getID(), buddy.getUserID()).send(); } catch (Exception ex) { diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocolFactory.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocolFactory.java deleted file mode 100644 index 4f79fa28c4..0000000000 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocolFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2004 - 2008 Eike Stepper, Germany. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eike Stepper - initial API and implementation - **************************************************************************/ -package org.eclipse.net4j.buddies.internal.server.protocol; - -import org.eclipse.net4j.buddies.internal.common.protocol.ProtocolConstants; -import org.eclipse.net4j.util.container.IManagedContainer; - -/** - * @author Eike Stepper - */ -public class ServerProtocolFactory extends org.eclipse.net4j.protocol.ServerProtocolFactory -{ - public static final String TYPE = ProtocolConstants.PROTOCOL_NAME; - - public ServerProtocolFactory() - { - super(TYPE); - } - - public ServerProtocol create(String description) - { - return new ServerProtocol(); - } - - public static ServerProtocol get(IManagedContainer container, String description) - { - return (ServerProtocol)container.getElement(PRODUCT_GROUP, TYPE, description); - } -} |