Android Open Source - dissertation-project Wifi Upload Connectable






From Project

Back to project page dissertation-project.

License

The source code is released under:

MIT License

If you think the Android project dissertation-project 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

package com.fyp.resilience.connection;
/*from  ww  w  . ja  v a2s.c om*/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.Socket;

import android.content.Context;
import android.util.Log;

import com.fyp.resilience.Flags;
import com.fyp.resilience.ResilienceController;
import com.fyp.resilience.database.model.DataPiece;
import com.fyp.resilience.database.model.DataWhole;
import com.fyp.resilience.event.WifiUploadFinished;
import com.fyp.resilience.proto.ProtoBuffSpecification.PieceUploadReply;
import com.fyp.resilience.proto.ProtoBuffSpecification.PieceUploadRequest;
import com.fyp.resilience.proto.ProtoBuffSpecification.PieceUploadReply.Result;
import com.fyp.resilience.swarm.model.SwarmClient;
import com.fyp.resilience.util.ConnectionUtils;

import de.greenrobot.event.EventBus;

public class WifiUploadConnectable extends UploadConnectable {

    private static final String TAG = WifiUploadConnectable.class.getSimpleName();

    private final SwarmClient mClient;

    public WifiUploadConnectable(final Context context, final DataWhole dataWhole, final DataPiece dataPiece,
            final File file, final SwarmClient client)
            throws FileNotFoundException, IOException, NullPointerException {
        super(context, dataWhole, dataPiece, file);
        mClient = client;
        mConnectionType = Connectable.CONNECTION_TYPE_WIFI_UPLOAD;
    }

    /**
     * @return
     */
    public SwarmClient getClient() {
        return mClient;
    }

    @Override
    protected int runTask() {

        mDataPiece.setState(STATUS_IN_PROGRESS);

        DataOutputStream outputStream = null;
        DataInputStream inputStream = null;
        Socket socket = null;

        try {
            socket = new Socket(mClient.getAddress(), mClient.getPort());
            socket.setSoTimeout(10000);

            PieceUploadRequest uploadRequest = PieceUploadRequest.newBuilder()
                    .setDataPieceMessage(mDataPiece.toMessage())
                    .setDataWholeMessage(mDataWhole.toMessage())
                    .build();

            outputStream = new DataOutputStream(socket.getOutputStream());
            ConnectionUtils.writeByteArrayToStreamWithLengthPrefix(uploadRequest.toByteArray(),
                    outputStream);

            inputStream = new DataInputStream(socket.getInputStream());
            /* Parse the size of the message */
            int length_of_message = inputStream.readInt();

            if (Flags.DEBUG) {
                Log.d(TAG, "Length of message: " + length_of_message);
            }

            byte[] message = new byte[length_of_message];
            inputStream.read(message);
            PieceUploadReply uploadReply = PieceUploadReply.parseFrom(message);

            Result result = uploadReply.getResult();
            if (result != Result.SUCCESS) {
                Log.d(TAG, "Client returned message: " + result.toString());
                return Connectable.STATUS_SUCCESS;
            }

            if (Flags.DEBUG) {
                Log.d(TAG, "Result: " + result);
            }

            do {
                try {
                    final byte[] buff = new byte[4096];
                    double totalRead = 0;
                    int lengthRead = 0;
                    int previousProgress = 0;

                    while ((lengthRead = mFile.read(buff)) != -1) {
                        outputStream.write(buff, 0, lengthRead);
                        totalRead += lengthRead;
                        mProgress = (int) ((totalRead / mPieceSize) * 100);
                        if (mProgress != previousProgress) {
                            notifyOfProgressChange();
                        }
                        previousProgress = mProgress;
                    }

                    /* Ensure the Stream is flushed */
                    outputStream.flush();

                    length_of_message = inputStream.readInt();
                    message = new byte[length_of_message];
                    inputStream.read(message);
                    uploadReply = PieceUploadReply.parseFrom(message);

                    result = uploadReply.getResult();

                } catch (Exception e) {
                    e.printStackTrace();
                    return Connectable.STATUS_CONNECTION_ERROR;
                }

            } while (result != Result.SUCCESS);

            return Connectable.STATUS_SUCCESS;

        } catch (IOException e) {
            e.printStackTrace();
            return Connectable.STATUS_CONNECTION_ERROR;
        } catch (Exception e) {
            e.printStackTrace();
            return Connectable.STATUS_CONNECTION_ERROR;
        } finally {
            try {

                if (null != socket) {
                    socket.close();
                }

                if (null != outputStream) {
                    outputStream.close();
                }

                if (null != inputStream) {
                    inputStream.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void runPostTask() {
        final Context context = mContext.get();
        if (null != context) {
            if (mConnectionStatus == Connectable.STATUS_SUCCESS) {
                mDataPiece.setState(DataPiece.STATE_UPLOADED_TO_DEVICE);
            } else {
                mDataPiece.setState(DataPiece.STATE_NONE);
            }
            ResilienceController.getInstance(context).removeConnection(this);
        }
    }

    @Override
    protected void notifyOfCompletion() {
        EventBus.getDefault().post(new WifiUploadFinished(this));
    }
}




Java Source Code List

com.fyp.resilience.Constants.java
com.fyp.resilience.Flags.java
com.fyp.resilience.GCMIntentService.java
com.fyp.resilience.PreferenceConstants.java
com.fyp.resilience.ResilienceApplication.java
com.fyp.resilience.ResilienceController.java
com.fyp.resilience.activity.LicenceActivity.java
com.fyp.resilience.activity.ResilienceActivity.java
com.fyp.resilience.activity.SettingsActivity.java
com.fyp.resilience.adapter.ClientListAdapter.java
com.fyp.resilience.adapter.ConnectionListAdapter.java
com.fyp.resilience.adapter.FileListAdapter.java
com.fyp.resilience.connection.Connectable.java
com.fyp.resilience.connection.ServerDownloadConnectable.java
com.fyp.resilience.connection.ServerUploadConnectable.java
com.fyp.resilience.connection.UploadConnectable.java
com.fyp.resilience.connection.WifiDownloadConnectable.java
com.fyp.resilience.connection.WifiUploadConnectable.java
com.fyp.resilience.database.ResilienceDbHelper.java
com.fyp.resilience.database.ResilienceDbManager.java
com.fyp.resilience.database.model.DataPiece.java
com.fyp.resilience.database.model.DataWhole.java
com.fyp.resilience.event.ClientListChanged.java
com.fyp.resilience.event.ClientModified.java
com.fyp.resilience.event.ConnectionProgressChange.java
com.fyp.resilience.event.ConnectionStateChange.java
com.fyp.resilience.event.ConnectionsModified.java
com.fyp.resilience.event.PieceStateChange.java
com.fyp.resilience.event.ServerRegistrationChanged.java
com.fyp.resilience.event.ServerUploadFinished.java
com.fyp.resilience.event.WholeModified.java
com.fyp.resilience.event.WifiDownloadFinished.java
com.fyp.resilience.event.WifiUploadFinished.java
com.fyp.resilience.fragment.ClientsFragment.java
com.fyp.resilience.fragment.ConnectionsFragment.java
com.fyp.resilience.fragment.FilesFragment.java
com.fyp.resilience.interfaces.Messagable.java
com.fyp.resilience.interfaces.Partialable.java
com.fyp.resilience.proto.ProtoBuffSpecification.java
com.fyp.resilience.receiver.AbstractConnectivityBroadcastReceiver.java
com.fyp.resilience.receiver.BootReceiver.java
com.fyp.resilience.receiver.ConnectivityBroadcastReceiver.java
com.fyp.resilience.receiver.WiFiDirectBroadcastReceiver.java
com.fyp.resilience.register.RegisterRequestInitializer.java
com.fyp.resilience.register.RegisterRequest.java
com.fyp.resilience.register.RegisterScopes.java
com.fyp.resilience.register.Register.java
com.fyp.resilience.register.model.DeviceInfo.java
com.fyp.resilience.service.PieceUploadService.java
com.fyp.resilience.stream.PiecedRandomAccessFile.java
com.fyp.resilience.swarm.helper.NsdHelper.java
com.fyp.resilience.swarm.helper.SwarmHelperInterface.java
com.fyp.resilience.swarm.helper.WifiDirectSdHelper.java
com.fyp.resilience.swarm.model.SwarmClient.java
com.fyp.resilience.thread.ResilienceRunnable.java
com.fyp.resilience.thread.ResilienceThreadFactory.java
com.fyp.resilience.util.ConnectionUtils.java
com.fyp.resilience.util.Utils.java
com.fyp.resilience.view.ClientView.java
com.fyp.resilience.view.ConnectionView.java
com.fyp.resilience.view.FileView.java
com.fyp.resilience.view.PieceProgressIndicator.java
com.fyp.resilience.widerst.WiderstRequestInitializer.java
com.fyp.resilience.widerst.WiderstRequest.java
com.fyp.resilience.widerst.WiderstScopes.java
com.fyp.resilience.widerst.Widerst.java
com.fyp.resilience.widerst.model.DataPiecePartial.java
com.fyp.resilience.widerst.model.DataWholePartial.java
com.fyp.resilience.widerst.model.PostResponse.java
com.fyp.widerst.Constants.java
com.fyp.widerst.WiderstObjectifyService.java
com.fyp.widerst.backend.FileJoinerBackend.java
com.fyp.widerst.cron.CronJobServlet.java
com.fyp.widerst.endpoint.DataPieceEndpoint.java
com.fyp.widerst.endpoint.DeviceInfoEndpoint.java
com.fyp.widerst.entity.DataPiece.java
com.fyp.widerst.entity.DataWhole.java
com.fyp.widerst.entity.DeviceInfo.java
com.fyp.widerst.handler.BlobstoreUploadHandler.java
com.fyp.widerst.partial.DataPiecePartial.java
com.fyp.widerst.partial.DataWholePartial.java
com.fyp.widerst.response.PostResponse.java
com.fyp.widerst.servlet.WholeFileServer.java
com.fyp.widerst.util.DbHelper.java
com.fyp.widerst.util.GcmHelper.java