package com.nj.simba;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.zip.GZIPOutputStream;
import android.os.IBinder;
import android.util.Log;
import android.app.Service;
import android.content.Intent;
public class SmartToolService extends Service {
private static final String TAG = "SmartTools";
private ServerSocket mServer;
private boolean mServerOn = true;
@Override
public void onCreate() {
Log.d(TAG, "onCreate!");
super.onCreate();
try {
mServer = new ServerSocket(13470);
mServerThread.start();
} catch (IOException e) {
Log.d(TAG, e.toString());
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy!");
super.onDestroy();
mServerOn = false;
}
/**
* Server thread accept PC client request CMD: only support list
* applications now TODO: XXXXX
*/
private Thread mServerThread = new Thread(new Runnable() {
@Override
public void run() {
Socket client = null;
while (mServerOn) {
try {
Log.d(TAG, "wait accept...!");
client = mServer.accept();
Log.d(TAG, "accept one pc client!");
talk(client.getInputStream(), client.getOutputStream());
} catch (IOException e) {
Log.d(TAG, e.toString());
}
}
}
/**
* talk with PC, and reply data to it
*
* @param in
* @param out
*/
void talk(InputStream in, OutputStream out) {
Log.d(TAG, "startSession!");
DataInputStream dis = new DataInputStream(in);
DataOutputStream dos = new DataOutputStream(out);
/******** 1��read command *******/
String cmd;
try {
cmd = dis.readUTF();
Log.d(TAG, "CMD: " + cmd);
} catch (IOException e1) {
e1.printStackTrace();
}
/******** 2��reply client *******/
try {
replyClient(dos);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/******** 3��wait ack *******/
try {
String ack = dis.readUTF();
Log.d(TAG, "ACK: " + ack);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 1)ͼ�� 2)���� 3)�Ƿ�ϵͳ�� 4)�Ƿ�Υ��CTS 5)���� 6)��·�� 7)�Ƿ������� 8)UID 1)���� 2)���� 3)��·��
* 4)�Ƿ�ϵͳ�� 5)�Ƿ�Υ��CTS 6)�Ƿ������� 7)UID 8)ͼ��
*
* @param dos
* @throws IOException
*/
void replyClient(DataOutputStream dos) throws IOException {
Log.d(TAG, "replyClient!");
DviceInfoCollector deviceInfo = new DviceInfoCollector(SmartToolService.this);
byte[] data = deviceInfo.toBytes();
Log.d(TAG, "data.len!" + data.length);
GZIPOutputStream gos = new GZIPOutputStream(dos);
gos.write(data);
dos.flush();
gos.finish();
}
});
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}