package com.donghuan.c_interface;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.ServerSocket;
|
import java.net.Socket;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
|
import com.battdata_rt.BattData_RT_Array;
|
|
public class CInterface_DemoServer extends Thread{
|
private ServerSocket server = null;
|
private Socket sk = null;
|
private BattData_RT_Array m_Data;
|
|
public CInterface_DemoServer(BattData_RT_Array mdata)
|
{
|
m_Data = mdata;
|
|
try
|
{
|
server = new ServerSocket(7009);
|
}
|
catch (IOException e)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
public void run()
|
{
|
System.out.println(this.getName() + " - CInterface_DemoServer Started, Listenning For CInterface Client ...");
|
while (true)
|
{
|
try
|
{
|
sk = server.accept();
|
ServerThread th = new ServerThread(sk);
|
th.start();
|
}
|
catch (Exception e)
|
{
|
//e.printStackTrace();
|
System.err.println(e.getMessage());
|
try {
|
Thread.sleep(100);
|
} catch (InterruptedException e1) {
|
// TODO Auto-generated catch block
|
e1.printStackTrace();
|
}
|
}
|
}
|
}
|
|
class ServerThread extends Thread
|
{
|
Socket sk = null;
|
|
public ServerThread(Socket sk)
|
{
|
this.sk = sk;
|
try {
|
this.sk.setSoTimeout(5000);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
public void getData(byte[] bf) throws IOException
|
{
|
InputStream mInputStream = sk.getInputStream();
|
mInputStream.read(bf);
|
}
|
|
public void putData(byte[] bf) throws IOException
|
{
|
OutputStream mOutputStream = sk.getOutputStream();
|
mOutputStream.write(bf);
|
mOutputStream.flush();
|
}
|
|
public void close()
|
{
|
try {
|
sk.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
public void run()
|
{
|
CommData data_in = new CommData();
|
while(true)
|
{
|
try {
|
//-----------------------------------------------------//
|
getData(data_in.data_byte);
|
//-----------------------------------------------------//
|
byte[] pk = data_in.getDataFromByteArray();
|
if(null != pk)
|
{
|
putData(pk);
|
}
|
//-----------------------------------------------------//
|
} catch (IOException e) {
|
e.printStackTrace();
|
close();
|
break;
|
}
|
}
|
}
|
}
|
|
public class CommData {
|
static final int PK_Type_Login = 101;
|
static final int PK_Type_GetData = 401;
|
static final int tag = 0x7E7C6B5A;
|
|
byte[] data_byte;
|
ByteBuffer data_bf;
|
|
int pk_sum = 0;
|
int pk_sn = 0;
|
int pk_type = 0;
|
|
private CInterface_PkComm m_CInterface_PkComm;
|
|
/*****************************************************/
|
public CommData()
|
{
|
data_byte = new byte[4096];
|
data_bf = ByteBuffer.allocate(8192);
|
data_bf.order(ByteOrder.LITTLE_ENDIAN);
|
|
m_CInterface_PkComm = new CInterface_PkComm();
|
}
|
/*****************************************************/
|
|
public byte[] getDataFromByteArray()
|
{
|
byte[] res = null;
|
data_bf.clear();
|
data_bf.put(data_byte);
|
data_bf.flip(); //Çл»bytebufferµÄ¶Áд״̬
|
|
if(tag == data_bf.getInt())
|
{
|
pk_sum = data_bf.getInt();
|
pk_sn = data_bf.getInt();
|
pk_type = data_bf.getInt();
|
|
if(PK_Type_Login == pk_type)
|
{
|
res = m_CInterface_PkComm.makeLoginAckPkToByteArray("cdnt", "cdnt");
|
}
|
else if(PK_Type_GetData == pk_type)
|
{
|
/*int term_id = */data_bf.getInt();
|
int bg_id = data_bf.getInt();
|
/*int mode = */data_bf.getInt();
|
/*int polling_time = */data_bf.getInt();
|
int data_count = data_bf.getInt();
|
|
int[] ids = new int[data_count];
|
for(int n=0; n<data_count; n++)
|
{
|
ids[n] = data_bf.getInt();
|
}
|
res = m_CInterface_PkComm.makeBattDataAckToClientToByteArray(m_Data, bg_id, data_count, ids);
|
}
|
}
|
|
return res;
|
}
|
}
|
}
|