package com.zsoft.SignalA; import org.json.JSONObject; import com.zsoft.SignalA.Transport.ITransport; import com.zsoft.SignalA.Transport.StateBase; import android.content.Context; public abstract class ConnectionBase { private Object mStateLock = new Object(); private StateBase mCurrentState = null; private String mUrl = ""; private String mConnectionId = null; private String mConnectionToken = null; private Context mContext; private String mMessageId = null; private ITransport mTransport; private String mGroupsToken = null; private String mQueryString = null; public ConnectionBase(String url, Context context, ITransport transport, String queryString) { this(url, context, transport); setQueryString(queryString); } public ConnectionBase(String url, Context context, ITransport transport) { mContext = context; mTransport = transport; mCurrentState = mTransport.CreateInitialState(this); setUrl(url); } public void SetNewState(StateBase state) { StateBase oldState; synchronized (mStateLock) { oldState = mCurrentState; mCurrentState = state; if(state.getState() == ConnectionState.Disconnected) { setConnectionId(null); setConnectionToken(null); } } state.Run(); // Fire event OnStateChanged(oldState, state); } public String getUrl() { return mUrl; } public void setUrl(String url) { mUrl = url; } public Context getContext() { return mContext; } private void setQueryString(String queryString) { mQueryString = queryString; } public String getQueryString() { return mQueryString; } public String getConnectionId() { return mConnectionId ; } public void setConnectionId(String connectionId) { mConnectionId = connectionId; } public String getConnectionToken() { return mConnectionToken; } public void setConnectionToken(String connectionToken) { mConnectionToken = connectionToken; } public StateBase getCurrentState() { synchronized (mStateLock) { return mCurrentState; } } public boolean VerifyProtocolVersion(String protocolVersion) { return protocolVersion.compareTo("1.2") == 0; } public String getMessageId() { return mMessageId; } public void setMessageId(String messageId) { mMessageId = messageId; } public String getGroupsToken() { return mGroupsToken; } public void setGroupsToken(String groupsToken) { mGroupsToken = groupsToken; } public void setMessage(JSONObject response) { OnMessage(response.toString()); } public void setError(Exception exception) { OnError(exception); } // Methods for the user to implement protected abstract void OnError(Exception exception); protected abstract void OnMessage(String message); protected abstract void OnStateChanged(StateBase oldState, StateBase newState); public String OnSending() { return null; } public void Start() { getCurrentState().Start(); } public void Stop() { getCurrentState().Stop(); } public void Send(CharSequence text, SendCallback callback) { getCurrentState().Send(text, callback); } }