Android Open Source - smsgateway-android Session Impl






From Project

Back to project page smsgateway-android.

License

The source code is released under:

GNU General Public License

If you think the Android project smsgateway-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 *//w w w .j a v a 2 s.  co  m
 * ((e)) emite: A pure gwt (Google Web Toolkit) xmpp (jabber) library
 *
 * (c) 2008-2009 The emite development team (see CREDITS for details)
 * This file is part of emite.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package com.calclab.emite.core.client.xmpp.session;

import java.util.ArrayList;
import java.util.Date;

import com.calclab.emite.core.client.bosh.Connection;
import com.calclab.emite.core.client.bosh.StreamSettings;
import com.calclab.emite.core.client.packet.IPacket;
import com.calclab.emite.core.client.xmpp.resource.ResourceBindingManager;
import com.calclab.emite.core.client.xmpp.sasl.AuthorizationTransaction;
import com.calclab.emite.core.client.xmpp.sasl.SASLManager;
import com.calclab.emite.core.client.xmpp.stanzas.IQ;
import com.calclab.emite.core.client.xmpp.stanzas.Message;
import com.calclab.emite.core.client.xmpp.stanzas.Presence;
import com.calclab.emite.core.client.xmpp.stanzas.XmppURI;
import com.calclab.suco.client.events.Listener;
import com.calclab.suco.client.log.Logger;

/**
 * Default Session implementation. Use Session interface instead.
 */
public class SessionImpl extends AbstractSession implements Session {
    private State state;
    private XmppURI userURI;
    private final Connection connection;
    private AuthorizationTransaction transaction;
    private final IQManager iqManager;
    private final ArrayList<IPacket> queuedStanzas;

    public SessionImpl(final Connection connection, final SASLManager saslManager,
      final ResourceBindingManager bindingManager, final IMSessionManager iMSessionManager) {
  this.connection = connection;
  state = State.disconnected;
  this.iqManager = new IQManager();
  this.queuedStanzas = new ArrayList<IPacket>();

  connection.onStanzaReceived(new Listener<IPacket>() {
      public void onEvent(final IPacket stanza) {
    final String name = stanza.getName();
    if (name.equals("message")) {
        onMessage.fire(new Message(stanza));
    } else if (name.equals("presence")) {
        onPresence.fire(new Presence(stanza));
    } else if (name.equals("iq")) {
        final String type = stanza.getAttribute("type");
        if ("get".equals(type) || "set".equals(type)) {
      onIQ.fire(new IQ(stanza));
        } else {
      iqManager.handle(stanza);
        }
    } else if (transaction != null && "stream:features".equals(name) && stanza.hasChild("mechanisms")) {
        saslManager.sendAuthorizationRequest(transaction);
        transaction = null;
    }
      }
  });

  connection.onError(new Listener<String>() {
      public void onEvent(final String msg) {
    Logger.debug("ERROR: {0}", msg);
    setState(State.error);
    disconnect();
      }
  });

  saslManager.onAuthorized(new Listener<AuthorizationTransaction>() {
      public void onEvent(final AuthorizationTransaction ticket) {
    if (ticket.getState() == AuthorizationTransaction.State.succeed) {
        setState(Session.State.authorized);
        connection.restartStream();
        bindingManager.bindResource(ticket.uri.getResource());
    } else {
        setState(Session.State.notAuthorized);
        disconnect();
    }
      }
  });

  bindingManager.onBinded(new Listener<XmppURI>() {
      public void onEvent(final XmppURI uri) {
    iMSessionManager.requestSession(uri);
      }
  });

  iMSessionManager.onSessionCreated(new Listener<XmppURI>() {
      public void onEvent(final XmppURI uri) {
    setLoggedIn(uri);
      }

  });

    }

    public XmppURI getCurrentUser() {
  return userURI;
    }

    public Session.State getState() {
  return state;
    }

    public boolean isLoggedIn() {
  return userURI != null;
    }

    public void login(XmppURI uri, final String password) {
  if (uri == Session.ANONYMOUS && password != null) {
      throw new RuntimeException("Error on login: anonymous login can't have password");
  } else if (uri != Session.ANONYMOUS && !uri.hasResource()) {
      uri = XmppURI.uri(uri.getNode(), uri.getHost(), "" + new Date().getTime());
  }

  if (state == Session.State.disconnected) {
      setState(Session.State.connecting);
      connection.connect();
      transaction = new AuthorizationTransaction(uri, password);
      Logger.debug("Sending auth transaction: {0}", transaction);
  }
    }

    public void logout() {
  if (state != State.disconnected && userURI != null) {
      setState(State.loggingOut);
      userURI = null;
      connection.disconnect();
      setState(State.disconnected);
  }
    }

    public StreamSettings pause() {
  return state == State.ready ? connection.pause() : null;
    }

    public void resume(final XmppURI userURI, final StreamSettings settings) {
  this.userURI = userURI;
  connection.resume(settings);
  setState(State.ready);
    }

    public void send(final IPacket packet) {
  if (state == State.loggedIn || state == State.ready || state == State.loggingOut) {
      packet.setAttribute("from", userURI.toString());
      connection.send(packet);
  } else {
      Logger.debug("session queuing stanza {0}", packet);
      queuedStanzas.add(packet);
  }
    }

    public void sendIQ(final String category, final IQ iq, final Listener<IPacket> listener) {
  final String id = iqManager.register(category, listener);
  iq.setAttribute("id", id);
  send(iq);
    }

    public void setReady() {
  if (isLoggedIn()) {
      setState(State.ready);
  }
    }

    void setState(final Session.State newState) {
  this.state = newState;
  if (state == State.ready) {
      sendQueuedStanzas();
  }
  onStateChanged.fire(state);
    }

    private void disconnect() {
  connection.disconnect();
  setState(Session.State.disconnected);
    }

    private void sendQueuedStanzas() {
  Logger.debug("Sending queued stanzas....");
  for (final IPacket packet : queuedStanzas) {
      send(packet);
  }
  queuedStanzas.clear();
    }

    private void setLoggedIn(final XmppURI userURI) {
  this.userURI = userURI;
  setState(Session.State.loggedIn);
    }

}




Java Source Code List

com.calclab.emite.core.client.EmiteCoreModule.java
com.calclab.emite.core.client.bosh.BoshConnection.java
com.calclab.emite.core.client.bosh.BoshSettings.java
com.calclab.emite.core.client.bosh.Connection.java
com.calclab.emite.core.client.bosh.StreamSettings.java
com.calclab.emite.core.client.packet.AbstractPacket.java
com.calclab.emite.core.client.packet.DelegatedPacket.java
com.calclab.emite.core.client.packet.IPacket.java
com.calclab.emite.core.client.packet.MatcherFactory.java
com.calclab.emite.core.client.packet.NoPacket.java
com.calclab.emite.core.client.packet.PacketMatcher.java
com.calclab.emite.core.client.packet.PacketRenderer.java
com.calclab.emite.core.client.packet.PacketTestSuite.java
com.calclab.emite.core.client.packet.Packet.java
com.calclab.emite.core.client.packet.TextPacket.java
com.calclab.emite.core.client.packet.TextUtils.java
com.calclab.emite.core.client.packet.android.AndroidPacket.java
com.calclab.emite.core.client.services.ConnectorCallback.java
com.calclab.emite.core.client.services.ConnectorException.java
com.calclab.emite.core.client.services.ScheduledAction.java
com.calclab.emite.core.client.services.Services.java
com.calclab.emite.core.client.services.android.AndroidConnector.java
com.calclab.emite.core.client.services.android.AndroidScheduler.java
com.calclab.emite.core.client.services.android.AndroidServices.java
com.calclab.emite.core.client.services.android.AndroidXMLService.java
com.calclab.emite.core.client.xmpp.resource.ResourceBindingManager.java
com.calclab.emite.core.client.xmpp.sasl.AuthorizationTransaction.java
com.calclab.emite.core.client.xmpp.sasl.Base64Coder.java
com.calclab.emite.core.client.xmpp.sasl.SASLManager.java
com.calclab.emite.core.client.xmpp.session.AbstractSession.java
com.calclab.emite.core.client.xmpp.session.IMSessionManager.java
com.calclab.emite.core.client.xmpp.session.IQManager.java
com.calclab.emite.core.client.xmpp.session.SessionComponent.java
com.calclab.emite.core.client.xmpp.session.SessionImpl.java
com.calclab.emite.core.client.xmpp.session.SessionReady.java
com.calclab.emite.core.client.xmpp.session.Session.java
com.calclab.emite.core.client.xmpp.stanzas.BasicStanza.java
com.calclab.emite.core.client.xmpp.stanzas.IQ.java
com.calclab.emite.core.client.xmpp.stanzas.Message.java
com.calclab.emite.core.client.xmpp.stanzas.Presence.java
com.calclab.emite.core.client.xmpp.stanzas.Stanza.java
com.calclab.emite.core.client.xmpp.stanzas.XmppURICache.java
com.calclab.emite.core.client.xmpp.stanzas.XmppURI.java
com.calclab.emite.im.client.InstantMessagingModule.java
com.calclab.emite.im.client.chat.AbstractChat.java
com.calclab.emite.im.client.chat.ChatManager.java
com.calclab.emite.im.client.chat.Chat.java
com.calclab.emite.im.client.chat.PairChatManager.java
com.calclab.emite.im.client.chat.PairChat.java
com.calclab.emite.im.client.presence.PresenceManagerImpl.java
com.calclab.emite.im.client.presence.PresenceManager.java
com.calclab.emite.im.client.roster.RosterImpl.java
com.calclab.emite.im.client.roster.RosterItem.java
com.calclab.emite.im.client.roster.Roster.java
com.calclab.emite.im.client.roster.SubscriptionManagerImpl.java
com.calclab.emite.im.client.roster.SubscriptionManager.java
com.calclab.emite.im.client.roster.SubscriptionState.java
com.calclab.suco.client.SucoCoreModule.java
com.calclab.suco.client.SucoFactory.java
com.calclab.suco.client.Suco.java
com.calclab.suco.client.events.Event0.java
com.calclab.suco.client.events.Event2.java
com.calclab.suco.client.events.Event.java
com.calclab.suco.client.events.Listener0.java
com.calclab.suco.client.events.Listener2.java
com.calclab.suco.client.events.Listener.java
com.calclab.suco.client.ioc.Container.java
com.calclab.suco.client.ioc.Decorator.java
com.calclab.suco.client.ioc.HashMapContainer.java
com.calclab.suco.client.ioc.Provider.java
com.calclab.suco.client.ioc.decorator.Chain.java
com.calclab.suco.client.ioc.decorator.GroupedSingleton.java
com.calclab.suco.client.ioc.decorator.NoDecoration.java
com.calclab.suco.client.ioc.decorator.ProviderCollection.java
com.calclab.suco.client.ioc.decorator.Singleton.java
com.calclab.suco.client.ioc.module.AbstractModule.java
com.calclab.suco.client.ioc.module.Factory.java
com.calclab.suco.client.ioc.module.ModuleBuilderImpl.java
com.calclab.suco.client.ioc.module.ModuleBuilder.java
com.calclab.suco.client.ioc.module.SucoModule.java
com.calclab.suco.client.log.Logger.java
com.calclab.suco.client.signal.Signal0.java
com.calclab.suco.client.signal.Signal2.java
com.calclab.suco.client.signal.Signal.java
com.calclab.suco.client.signal.Slot0.java
com.calclab.suco.client.signal.Slot2.java
com.calclab.suco.client.signal.Slot.java
com.nubgames.smsgateway.BOSHConnection.java
com.nubgames.smsgateway.BootCompleted.java
com.nubgames.smsgateway.Password.java
com.nubgames.smsgateway.SMSGateway.java
com.nubgames.smsgateway.SMSReceiver.java
com.nubgames.smsgateway.Settings.java
com.nubgames.smsgateway.StatusTextView.java
com.nubgames.smsgateway.Status.java
com.nubgames.smsgateway.TextRouter.java