package com.game.framework.net; import java.io.InputStream; import java.io.OutputStream; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Net.Protocol; import com.badlogic.gdx.net.Socket; import com.badlogic.gdx.net.SocketHints; import com.badlogic.gdx.utils.Disposable; import com.game.framework.utils.L; public class NetworkClient implements Runnable, Disposable { private Socket socket; private OutputStream outputStream; private InputStream inputStream; public boolean isDebug; private boolean isConnected; private ConnectionCallback callback; public NetworkClient(ConnectionCallback callback) { this.callback = callback; isDebug = false; } public void connectTo(int port, String host) { if (host == null) throw new IllegalArgumentException("ip cannot be null."); try { SocketHints hints = new SocketHints(); Socket socket = Gdx.net.newClientSocket(Protocol.TCP, host, port, hints); outputStream = socket.getOutputStream(); inputStream = socket.getInputStream(); isConnected = true; callback.onConnect(socket); Thread thread = new Thread(this); thread.start(); } catch (Exception e) { isConnected = false; error("connection failed to host " + host); callback.onEnd(); //e.printStackTrace(); } } @Override public void dispose() { if(isConnected) isConnected = false; try { if (socket != null) { inputStream.close(); outputStream.close(); socket.dispose(); L.wtf("client dispose..."); } } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { try { byte[] buffer = new byte[1024]; while (isConnected()) { buffer = new byte[1024]; inputStream.read(buffer); callback.onUpdate(buffer); } } catch (Exception e) { e.printStackTrace(); error("Error while retreiving data..."); } finally { isConnected = false; dispose(); end(); } L.wtf("thread end..."); } public void sendData(byte[] data) { try { outputStream.write(data); } catch (Exception e) { e.printStackTrace(); dispose(); error("Error while sending data..."); end(); } } private void end() { callback.onEnd(); } private void error(String txt) { L.e(txt); callback.onError(); } public boolean isConnected() { return isConnected; } }