Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
index dd2d0dceda..115055cb5f 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
@@ -22,11 +22,13 @@ import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.model.CDOClass;
import org.eclipse.emf.cdo.common.model.CDOFeature;
import org.eclipse.emf.cdo.common.model.CDOPackageURICompressor;
+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.internal.server.bundle.OM;
import org.eclipse.emf.cdo.internal.server.protocol.CDOServerProtocol;
import org.eclipse.emf.cdo.internal.server.protocol.CommitNotificationRequest;
+import org.eclipse.emf.cdo.internal.server.protocol.RemoteSessionNotificationRequest;
import org.eclipse.emf.cdo.server.IAudit;
import org.eclipse.emf.cdo.server.ISession;
import org.eclipse.emf.cdo.server.ITransaction;
@@ -84,6 +86,8 @@ public class Session extends Container<IView> implements ISession, CDOIDProvider
}
};
+ private boolean subscribed;
+
/**
* @since 2.0
*/
@@ -142,6 +146,29 @@ public class Session extends Container<IView> implements ISession, CDOIDProvider
/**
* @since 2.0
*/
+ public boolean isSubscribed()
+ {
+ return subscribed;
+ }
+
+ /**
+ * @since 2.0
+ */
+ public void setSubscribed(boolean subscribed)
+ {
+ checkActive();
+ if (this.subscribed != subscribed)
+ {
+ this.subscribed = subscribed;
+ byte opcode = subscribed ? CDOProtocolConstants.REMOTE_SESSION_SUBSCRIBED
+ : CDOProtocolConstants.REMOTE_SESSION_UNSUBSCRIBED;
+ sessionManager.handleRemoteSessionNotification(opcode, this);
+ }
+ }
+
+ /**
+ * @since 2.0
+ */
public boolean isPassiveUpdateEnabled()
{
return passiveUpdateEnabled;
@@ -303,6 +330,29 @@ public class Session extends Container<IView> implements ISession, CDOIDProvider
}
}
+ /**
+ * @since 2.0
+ */
+ public void handleRemoteSessionNotification(byte opcode, ISession session)
+ {
+ try
+ {
+ IChannel channel = protocol.getChannel();
+ if (LifecycleUtil.isActive(channel))
+ {
+ new RemoteSessionNotificationRequest(channel, opcode, session).sendAsync();
+ }
+ else
+ {
+ OM.LOG.warn("Session channel is inactive: " + this);
+ }
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+
public CDOID provideCDOID(Object idObject)
{
return (CDOID)idObject;

Back to the top