package com.basic.security.utils.yuv.pull.client;
|
|
import com.basic.security.utils.Constants;
|
import com.google.gson.JsonElement;
|
import com.google.gson.JsonObject;
|
import com.google.gson.JsonParseException;
|
import com.google.gson.JsonParser;
|
|
import java.io.BufferedInputStream;
|
import java.io.BufferedOutputStream;
|
import java.io.ByteArrayOutputStream;
|
import java.io.DataInputStream;
|
import java.io.IOException;
|
import java.net.InetSocketAddress;
|
import java.net.Socket;
|
|
public class SocketClient2 extends Thread {
|
// private ServerSocket mServer;
|
Socket socket;
|
private DataListener mDataListener;
|
private BufferManager mBufferManager;
|
private String ip;
|
|
public SocketClient2(String ip) {
|
this.ip = ip;
|
}
|
|
@Override
|
public void run() {
|
super.run();
|
BufferedInputStream inputStream = null;
|
BufferedOutputStream outputStream = null;
|
Socket socket = null;
|
ByteArrayOutputStream byteArray = null;
|
try {
|
while (!Thread.currentThread().isInterrupted()) {
|
if (byteArray != null)
|
byteArray.reset();
|
else
|
byteArray = new ByteArrayOutputStream();
|
|
socket = new Socket();
|
// socket.connect(new InetSocketAddress("192.168.1.102", 8888), 10000);
|
socket.connect(new InetSocketAddress(ip, Constants.yuvServerPort), 10000);
|
System.out.println("new socket");
|
|
inputStream = new BufferedInputStream(socket.getInputStream());
|
outputStream = new BufferedOutputStream(socket.getOutputStream());
|
|
byte[] buff = new byte[256];
|
byte[] imageBuff = new byte[460800];
|
int len = 0;
|
String msg = null;
|
// read msg
|
while ((len = inputStream.read(buff)) != -1) {
|
|
msg = new String(buff, 0, len);
|
msg = msg.substring(0, msg.lastIndexOf("}") + 1);
|
// JSON analysis
|
JsonParser parser = new JsonParser();
|
boolean isJSON = true;
|
JsonElement element = null;
|
try {
|
element = parser.parse(msg);
|
} catch (JsonParseException e) {
|
System.out.println("exception: " + e);
|
isJSON = false;
|
}
|
if (isJSON && element != null) {
|
JsonObject obj = element.getAsJsonObject();
|
element = obj.get("type");
|
if (element != null && element.getAsString().equals("data")) {
|
element = obj.get("length");
|
int length = element.getAsInt();
|
element = obj.get("width");
|
int width = element.getAsInt();
|
element = obj.get("height");
|
int height = element.getAsInt();
|
element = obj.get("rotation");
|
int rotation = element.getAsInt();
|
|
imageBuff = new byte[length];
|
mBufferManager = new BufferManager(length, width, height);
|
mBufferManager.setOnDataListener(mDataListener);
|
break;
|
}
|
} else {
|
byteArray.write(buff, 0, len);
|
break;
|
}
|
}
|
|
|
if (imageBuff != null) {
|
// JsonObject jsonObj = new JsonObject();
|
// jsonObj.addProperty("state", "ok");
|
// outputStream.write(jsonObj.toString().getBytes());
|
// outputStream.flush();
|
mBufferManager = new BufferManager(460800, 640, 480);
|
mBufferManager.setOnDataListener(mDataListener);
|
// read image data
|
DataInputStream dataInputStream = new DataInputStream(inputStream);
|
byte[] data11 = new byte[460800];
|
while (true) {
|
dataInputStream.readFully(data11, 0, data11.length);
|
mBufferManager.fillBuffer(data11, data11.length);
|
}
|
// while ((len = inputStream.read(imageBuff)) != -1) {
|
// mBufferManager.fillBuffer(imageBuff, len);
|
// }
|
}
|
|
if (mBufferManager != null) {
|
mBufferManager.close();
|
}
|
}
|
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} finally {
|
try {
|
if (outputStream != null) {
|
outputStream.close();
|
outputStream = null;
|
}
|
|
if (inputStream != null) {
|
inputStream.close();
|
inputStream = null;
|
}
|
|
if (socket != null) {
|
socket.close();
|
socket = null;
|
}
|
|
if (byteArray != null) {
|
byteArray.close();
|
}
|
|
} catch (IOException e) {
|
|
}
|
|
}
|
|
}
|
|
public void setOnDataListener(DataListener listener) {
|
mDataListener = listener;
|
}
|
|
}
|