Last active
November 6, 2015 15:10
-
-
Save sirolf2009/afdedd2f88dc31e61d54 to your computer and use it in GitHub Desktop.
A rest api based socket client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.InputStream; | |
import java.io.InputStreamReader; | |
import java.io.PrintWriter; | |
import java.net.HttpURLConnection; | |
import java.net.URL; | |
import java.util.ArrayList; | |
import java.util.List; | |
import com.google.android.gms.nearby.messages.Message; | |
import com.google.gson.Gson; | |
import com.google.gson.JsonArray; | |
import com.google.gson.JsonElement; | |
import com.google.gson.JsonSyntaxException; | |
public class Client { | |
private String host; | |
private String ID; | |
private boolean connected; | |
private Parser parser; | |
private List<Listener> listeners; | |
public Client() { | |
listeners = new ArrayList<Listener>(); | |
parser = new Parser(); | |
} | |
public void connect(String host, int port) { | |
this.host = host+":"+port; | |
connect(); | |
} | |
private void connect() { | |
ID = request("/register").body; | |
connected = true; | |
for(Listener listener : listeners) { | |
try { | |
listener.connected(); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
new Thread(new Runnable() { | |
@Override | |
public void run() { | |
while(connected) { | |
Response response = request("/fetch/"+ID); | |
if(response.statusCode == 400) { | |
System.out.println("Disconnecting"); | |
connected = false; | |
for(Listener listener : listeners) { | |
try { | |
listener.disconnected(); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} else if(response.body == null) { | |
System.err.println("No data received"); | |
} else { | |
try { | |
JsonArray array = parser.getGson().fromJson(response.body, JsonArray.class); | |
if(array.size() > 0) { | |
for(JsonElement element : array) { | |
Object object = parser.parse(element); | |
if(object == null) { | |
System.err.println("Could not parse object"); | |
} else { | |
for(Listener listener : listeners) { | |
listener.received(object); | |
} | |
} | |
} | |
} | |
} catch(JsonSyntaxException e) { | |
System.err.println("Malformed json"); | |
e.printStackTrace(); | |
} | |
} | |
try { | |
Thread.sleep(5000); | |
} catch(InterruptedException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
}).start(); | |
} | |
public void close() { | |
connected = false; | |
request("/unregister/"+ID); | |
} | |
public void addListener(Listener listener) { | |
listeners.add(listener); | |
} | |
public void sendTCP(Object object) { | |
if(!connected) { | |
while(!connected) { | |
try { | |
Thread.sleep(1000); | |
} catch(InterruptedException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
System.out.println("Sending "+object); | |
InputStream in = null; | |
try { | |
URL url = new URL(host+"/push/"+ID); | |
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); | |
conn.setRequestMethod("POST"); | |
conn.setDoOutput(true); | |
parser.getGson().toJson(object, new PrintWriter(conn.getOutputStream())); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} finally { | |
try { | |
in.close(); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
public Response request(String path) { | |
Response response = new Response(); | |
InputStream is = null; | |
try { | |
URL url = new URL(host+path); | |
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); | |
response.statusCode = conn.getResponseCode(); | |
if(response.statusCode == 200) { | |
StringBuffer buffer = new StringBuffer(); | |
is = conn.getInputStream(); | |
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); | |
String line = null; | |
while((line = reader.readLine()) != null) { | |
buffer.append(line); | |
} | |
response.body = buffer.toString(); | |
} | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} finally { | |
if (is != null) { | |
try { | |
is.close(); | |
} catch(Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
return response; | |
} | |
public class Response { | |
public String body; | |
public int statusCode; | |
} | |
public class Parser { | |
private Gson gson; | |
public Parser() { | |
gson = new Gson(); | |
} | |
public Object parse(JsonElement body) { | |
//TODO add your classes here | |
try { | |
return gson.fromJson(body, Message.class); | |
} catch(JsonSyntaxException e) {} | |
return null; | |
} | |
public Gson getGson() { | |
return gson; | |
} | |
public void setGson(Gson gson) { | |
this.gson = gson; | |
} | |
} | |
public interface Listener { | |
public void connected(); | |
public void received(Object object); | |
public void disconnected(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment