/* * Copyright (c) 2007-2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others. * 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; import org.eclipse.net4j.buddies.common.IBuddy; import org.eclipse.net4j.buddies.common.ISession; import org.eclipse.net4j.buddies.internal.server.protocol.BuddiesServerProtocol; import org.eclipse.net4j.util.AdapterUtil; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; import org.eclipse.net4j.util.lifecycle.ILifecycleEvent; import org.eclipse.net4j.util.lifecycle.Lifecycle; import org.eclipse.net4j.util.lifecycle.LifecycleUtil; import org.eclipse.net4j.util.om.log.OMLogger; /** * @author Eike Stepper */ public class ServerSession extends Lifecycle implements ISession, IListener { private BuddiesServerProtocol protocol; private IBuddy self; /** * @since 2.0 */ public ServerSession(BuddiesServerProtocol protocol, IBuddy self) { this.protocol = protocol; this.self = self; } /** * @since 2.0 */ public BuddiesServerProtocol getProtocol() { return protocol; } public IBuddy getSelf() { return self; } public void close() { protocol.close(); protocol = null; LifecycleUtil.deactivate(this, OMLogger.Level.DEBUG); } @SuppressWarnings({ "unchecked", "rawtypes" }) public Object getAdapter(Class adapter) { return AdapterUtil.adapt(this, adapter, false); } public void notifyEvent(IEvent event) { if (event.getSource() == protocol) { if (event instanceof ILifecycleEvent) { if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.DEACTIVATED) { deactivate(); } } } } @Override protected void doActivate() throws Exception { super.doActivate(); protocol.addListener(this); self.getAccount().touch(); } @Override protected void doDeactivate() throws Exception { self.getAccount().touch(); protocol.removeListener(this); super.doDeactivate(); } }