diff options
author | Tarun Gupta <tarun1995gupta@gmail.com> | 2015-07-15 23:49:56 (GMT) |
---|---|---|
committer | Nick Hudson <nick.hudson@isode.com> | 2015-07-28 15:42:52 (GMT) |
commit | 251813ccca9404d8d4122b2848f9fec86a451bf5 (patch) | |
tree | a1ebb0f6a04547ef6b588ea85c1a50ea5d8e4997 /src/com/isode/stroke/component/ComponentSessionStanzaChannel.java | |
parent | 673655830b0325d964e67fa835ea83f485e9beeb (diff) | |
download | stroke-251813ccca9404d8d4122b2848f9fec86a451bf5.zip stroke-251813ccca9404d8d4122b2848f9fec86a451bf5.tar.bz2 |
Completes Components and AdHoc.
Adds Component, ComponentConnector, ComponentError, ComponentSession, ComponentXMLTracer, CoreComponent,
ComponentSessionStanzaChannel, ComponentXMTracer, CoreComponent.
Updates CoreClient, StrokeGUI, BasicSessionStream and SessionStream and Client, so that signal definition can be changed.
Updates ComponentHandshake element, Entity.
Updates OutgoingAdHocCommandSession to have feature parity with Swiften.
This patch does not port Client or Session fully, which will be done in separate future patches.
License:
This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details.
Test-Information:
Test added for ComponentSession, which passes.
Test for ComponentConnector cannot be ported right now and will be done in future patches,
as it requires some bits of Network to be ported.
Change-Id: I7138a2041fe28a2be7ac57cb47b15365f9334b24
Diffstat (limited to 'src/com/isode/stroke/component/ComponentSessionStanzaChannel.java')
-rw-r--r-- | src/com/isode/stroke/component/ComponentSessionStanzaChannel.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/com/isode/stroke/component/ComponentSessionStanzaChannel.java b/src/com/isode/stroke/component/ComponentSessionStanzaChannel.java new file mode 100644 index 0000000..8d97bef --- /dev/null +++ b/src/com/isode/stroke/component/ComponentSessionStanzaChannel.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2010-2015 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.component; + +import com.isode.stroke.base.IDGenerator; +import com.isode.stroke.component.ComponentSession; +import com.isode.stroke.client.StanzaChannel; +import com.isode.stroke.elements.Message; +import com.isode.stroke.elements.IQ; +import com.isode.stroke.elements.Presence; +import com.isode.stroke.elements.Stanza; +import com.isode.stroke.tls.Certificate; +import com.isode.stroke.signals.SignalConnection; +import com.isode.stroke.signals.Slot; +import com.isode.stroke.signals.Slot1; +import java.util.Vector; + +public class ComponentSessionStanzaChannel extends StanzaChannel { + + private IDGenerator idGenerator; + private ComponentSession session; + private SignalConnection onInitializedConnection; + private SignalConnection onFinishedConnection; + private SignalConnection onStanzaReceivedConnection; + + public void setSession(ComponentSession session) { + assert(this.session == null); + this.session = session; + onInitializedConnection = session.onInitialized.connect(new Slot() { + @Override + public void call() { + handleSessionInitialized(); + } + }); + onFinishedConnection = session.onFinished.connect(new Slot1<com.isode.stroke.base.Error>() { + @Override + public void call(com.isode.stroke.base.Error e1) { + handleSessionFinished(e1); + } + }); + onStanzaReceivedConnection = session.onStanzaReceived.connect(new Slot1<Stanza>() { + @Override + public void call(Stanza s1) { + handleStanza(s1); + } + }); + } + + public void sendIQ(IQ iq) { + send(iq); + } + + public void sendMessage(Message message) { + send(message); + } + + public void sendPresence(Presence presence) { + send(presence); + } + + public boolean getStreamManagementEnabled() { + return false; + } + + public Vector<Certificate> getPeerCertificateChain() { + // TODO: actually implement this method + return (Vector<Certificate>)null; + } + + public boolean isAvailable() { + return (session != null) && (ComponentSession.State.Initialized.equals(session.getState())); + } + + public String getNewIQID() { + return idGenerator.generateID(); + } + + private void send(Stanza stanza) { + if (!isAvailable()) { + System.err.println("Warning: Component: Trying to send a stanza while disconnected.\n"); + return; + } + session.sendStanza(stanza); + } + + private void handleSessionFinished(com.isode.stroke.base.Error error) { + onFinishedConnection.disconnect(); + onStanzaReceivedConnection.disconnect(); + onInitializedConnection.disconnect(); + session = null; + + onAvailableChanged.emit(false); + } + + private void handleStanza(Stanza stanza) { + if(stanza instanceof Message) { + Message message = (Message)(stanza); + onMessageReceived.emit(message); + return; + } + + if(stanza instanceof Presence) { + Presence presence = (Presence)(stanza); + onPresenceReceived.emit(presence); + return; + } + + if(stanza instanceof IQ) { + IQ iq = (IQ)(stanza); + onIQReceived.emit(iq); + return; + } + } + + private void handleSessionInitialized() { + onAvailableChanged.emit(true); + } +}
\ No newline at end of file |