package com.o3dr.android.client.utils.connection; import android.os.Bundle; import android.os.Handler; import org.droidplanner.services.android.impl.utils.NetworkUtils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer; /** * Created by Fredia Huya-Kouadio on 2/18/15. */ public class TcpConnection extends AbstractIpConnection { private final String serverIp; private final int serverPort; private Socket socket; private BufferedOutputStream connOut; private BufferedInputStream connIn; public TcpConnection(Handler handler, String serverIp, int serverPort){ super(handler); this.serverIp = serverIp; this.serverPort = serverPort; } @Override protected void open(Bundle extras) throws IOException { final InetAddress serverAddr = InetAddress.getByName(serverIp); socket = new Socket(); socket.setReuseAddress(true); NetworkUtils.bindSocketToNetwork(extras, socket); socket.connect(new InetSocketAddress(serverAddr, serverPort), CONNECTION_TIMEOUT); connOut = new BufferedOutputStream(socket.getOutputStream()); connIn = new BufferedInputStream(socket.getInputStream()); } @Override protected int read(ByteBuffer buffer) throws IOException { return connIn.read(buffer.array()); } @Override protected void send(PacketData data) throws IOException { connOut.write(data.data, 0, data.dataLength); connOut.flush(); } @Override protected void close() throws IOException { if(socket != null) socket.close(); } }