package com.zsoft.SignalA.Transport.Longpolling; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import android.util.Log; import com.turbomanage.httpclient.AsyncCallback; import com.turbomanage.httpclient.HttpResponse; import com.turbomanage.httpclient.ParameterMap; import com.zsoft.SignalA.ConnectionBase; import com.zsoft.SignalA.ConnectionState; import com.zsoft.SignalA.SignalAUtils; import com.zsoft.SignalA.Transport.StateBase; import com.zsoft.SignalA.Transport.TransportHelper; import com.zsoft.SignalA.SendCallback; import com.zsoft.parallelhttpclient.ParallelHttpClient; public class DisconnectingState extends StateBase { protected static final String TAG = "DisconnectingState"; public DisconnectingState(ConnectionBase connection) { super(connection); } @Override public ConnectionState getState() { return ConnectionState.Disconnecting; } @Override public void Start() { } @Override public void Stop() { } @Override public void Send(CharSequence text, SendCallback callback) { callback.OnError(new Exception("Not connected")); } @Override protected void OnRun() { String url = SignalAUtils.EnsureEndsWith(mConnection.getUrl(), "/"); try { url += "abort?transport=LongPolling&connectionToken=" + URLEncoder.encode(mConnection.getConnectionToken(), "utf-8"); } catch (UnsupportedEncodingException e) { Log.e(TAG, "Unsupported message encoding error, when encoding connectionToken."); } TransportHelper.AppendCustomQueryString(mConnection, url); AsyncCallback cb = new AsyncCallback() { @Override public void onComplete(HttpResponse httpResponse) { if(httpResponse.getStatus() != 200 || httpResponse.getBodyAsString() == null || httpResponse.getBodyAsString().isEmpty()) { Log.e(TAG, "Clean disconnect failed. " + httpResponse.getStatus()); } mConnection.SetNewState(new DisconnectedState(mConnection)); } @Override public void onError(Exception ex) { mConnection.setError(ex); mConnection.SetNewState(new DisconnectedState(mConnection)); } }; ParallelHttpClient httpClient = new ParallelHttpClient(); httpClient.setMaxRetries(1); ParameterMap params = httpClient.newParams(); httpClient.post(url, params, cb); } }