У меня есть соединение с сервером, и оно отправляет мне список пиров, ожидающих соединения.
Моя идея - создать класс с именем PeerManager, который будет иметь дело с этими пирами.
Я не знаю, правильно ли я устанавливаю прослушиватель для каждого из них, если они отправляют мне сообщение.
На данный момент я создал класс PeerManager с экземпляром ArrayList, цель которого состоит в том, чтобы содержатьвсе эти одноранговые узлы.
У меня также есть объект Runnable, который создает сокет на указанном нами узле.
Но я не знаю, куда поместить моего слушателя для отделения сообщения от разных узлов.
public class PeerManager {
private ArrayList<Peer> peers;
private boolean mRun = false;
private OutputStream mOutputStream;
private InputStream mInputStream;
public interface OnPeerMessageReceived {
void peerMessageReceived(PeerMessage peerMessage);
}
public PeerManager() {
this.peers = new ArrayList<Peer>();
}
public Peer connectToPeer(String username, String connectionType, String host, int port, String token, OnPeerMessageReceived listener) {
Runnable mRunnable = new PeerSocketRunnable(host, port);
OnPeerMessageReceived mPeerMessageListener = listener;
Thread mThread = new Thread(mRunnable);
mThread.start();
try {
mThread.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Peer peer = new Peer(username, connectionType, host, port, token);
return peer;
}
class PeerSocketRunnable implements Runnable {
private String mHost;
private int mPort;
PeerSocketRunnable(String host, int port) {
this.mHost = host;
this.mPort = port;
}
@Override
public void run() {
Socket socket = new Socket();
mRun = true;
try {
Log.d("PEERSOCKET", "C: Connecting...");
socket.connect(new InetSocketAddress(mHost, mPort), 2000);
try {
mOutputStream = socket.getOutputStream();
mInputStream = socket.getInputStream();
byte[] buffer = new byte[0];
byte[] data;
int sizeData;
while (mRun) {
int count;
data = new byte[65536];
//Log.d("ServerManager", "BufferSize: " + buffer.length);
if ((count = mInputStream.read(data, 0, data.length)) >= 0) {
if (buffer.length > 0)
buffer = concatBytesArrays(buffer, Arrays.copyOfRange(data, 0, count));
else
buffer = Arrays.copyOfRange(data, 0, count);
if (buffer.length > 4) {
sizeData = readIntLe(buffer, 0) + 4;
if (buffer.length >= sizeData) {
Log.d("PEERMANAGER", "PeerMessage: " + Arrays.toString(buffer));
//TODO call the interface to send to Activity
//mPeerMessageListener.peerMessageReceived(message);
buffer = Arrays.copyOfRange(buffer, sizeData, buffer.length);
}
}
}
}
} catch (Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
socket.close();
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
}
}
}
}
Спасибо всем