shlist

share and manage lists between multiple people
Log | Files | Refs

NetMan.java (5545B)


      1 package drsocto.shlist;
      2 
      3 import android.content.Context;
      4 import android.os.AsyncTask;
      5 import android.util.JsonReader;
      6 import android.util.Log;
      7 
      8 import org.json.JSONException;
      9 import org.json.JSONObject;
     10 
     11 import java.io.BufferedReader;
     12 import java.io.BufferedWriter;
     13 import java.io.IOException;
     14 import java.io.InputStream;
     15 import java.io.InputStreamReader;
     16 import java.io.OutputStreamWriter;
     17 import java.io.PrintWriter;
     18 import java.net.Socket;
     19 import java.net.UnknownHostException;
     20 import java.nio.ByteBuffer;
     21 
     22 import javax.net.SocketFactory;
     23 import javax.net.ssl.SSLSocket;
     24 import javax.net.ssl.SSLSocketFactory;
     25 
     26 /**
     27  * Created by David on 7/12/2015.
     28  */
     29 public class NetMan {
     30     private String addr;
     31     private int port;
     32     SocketFactory sf = SSLSocketFactory.getDefault();
     33     SSLSocket socket;
     34     Context context;
     35 
     36     public NetMan(String addr, int port, Context theContext) {
     37         this.addr = addr;
     38         this.port = port;
     39         context = theContext;
     40     }
     41 
     42     public int openSocket() {
     43         try {
     44             socket = (SSLSocket) sf.createSocket(addr, port);
     45             return 0;
     46         } catch (UnknownHostException e) {
     47             Log.d("NetMan", "Unknown Host Excetion");
     48             return 1;
     49         } catch (IOException e) {
     50             Log.d("NetMan", "IO Exception");
     51             return 2;
     52         }
     53     }
     54 
     55     public int closeSocket() {
     56         try {
     57             socket.close();
     58             return 0;
     59         } catch (IOException e) {
     60             Log.d("NetMan", "IOException" + e);
     61             return 2;
     62         }
     63     }
     64 
     65     public String sendMessage(String[] args) {
     66         // Setup Header
     67         int mType = Integer.parseInt(args[1]);
     68         String message = args[0];
     69         Log.d("NetMan", "In sendMessage");
     70         Log.d("NetMan", "First Type: " + mType);
     71         Log.d("NetMan", "Message: " + message + " | Type: " + mType);
     72         byte[] version = toByteArray(MsgTypes.protocol_version);
     73         byte[] type = toByteArray(mType);
     74         byte[] length = toByteArray(message.length());
     75         // Send Message
     76         if (openSocket() == 0) {
     77             try {
     78                 Log.d("NetMan", "In socket open");
     79                 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
     80 
     81                 socket.getOutputStream().write(version);
     82                 socket.getOutputStream().write(type);
     83                 socket.getOutputStream().write(length);
     84                 out.print(message);
     85                 out.flush();
     86 
     87                 InputStream in = socket.getInputStream();
     88                 int count = in.read(version);
     89                 count = in.read(type);
     90                 count = in.read(length);
     91 
     92                 int vInt = fromByteArray(version);
     93                 int tInt = fromByteArray(type);
     94                 int lInt = fromByteArray(length);
     95 
     96                 Log.d("NetMan", "Header Read");
     97                 Log.d("NetMan", "Version: " + vInt + " | Type: " + tInt + " | Length: " + lInt);
     98 
     99                 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    100 
    101                 char[] response = new char[lInt];
    102                 Log.d("NetMan", "Message Length: " + response.length);
    103                 count = br.read(response);
    104 
    105                 String response_str = "";
    106 
    107                 for (int i = 0; i < response.length; ++i) {
    108                     response_str += response[i];
    109                 }
    110 
    111                 Log.d("netman", "Response: " + response_str);
    112 
    113 
    114                 if (!response_str.isEmpty()) {
    115                     JSONObject obj;
    116                     String status;
    117                     try {
    118                         obj = new JSONObject(response_str);
    119                         status = obj.getString("status");
    120                         Log.d("netman", "Parsed JSON, status: " + status);
    121                         if (status.equalsIgnoreCase("ok")) {
    122                             switch (mType) {
    123                                 case MsgTypes.device_add:
    124                                     closeSocket();
    125                                     return obj.getString("device_id");
    126                                 case MsgTypes.list_add:
    127                                     closeSocket();
    128                                     return obj.toString();
    129                                 case MsgTypes.lists_get:
    130                                     closeSocket();
    131                                     return obj.toString();
    132                             }
    133                         } else {
    134                             Log.d("netman", "Error:" + obj.toString());
    135                         }
    136                     } catch (JSONException e) {
    137                         Log.d("netman", "JSONException: " + e);
    138                     }
    139                 } else {
    140                     Log.d("netman", "Error: empty payload");
    141                 }
    142 
    143             } catch (java.io.IOException e) {
    144                 Log.d("NetMan", "Exception: " + e);
    145             }
    146             closeSocket();
    147         }
    148         return "failed";
    149     }
    150 
    151     public static int fromByteArray(byte[] bytes) {
    152         return (bytes[0] & 0xFF) << 8 | (bytes[1] & 0xFF);
    153     }
    154 
    155     public static byte[] toByteArray(long value)
    156     {
    157         byte[] ret = new byte[2];
    158         ret[1] = (byte) ((value >> ((0)*8) & 0xFF));
    159         ret[0] = (byte) ((value >> ((1)*8) & 0xFF));
    160         return ret;
    161     }
    162 }