Jaaa, einen Listener ist hier leider nicht ganz möglich, da es sich um übertragungen übers netztwerk handelt.
Diese werden per Stream verschickt.
Das heißt:
Was du auf der einen Seite reinschmeißt, kommt auf der anderen seite wieder raus.
Erst danach können Listener zur weiteren Verarbeitung verwendet werden.
Und da es nur ein dummer Strom ist, braust du ein Protokoll.
Damit du weißt wann eine Naricht vollständig ist.
Ein Protokoll kann ganz unterschieldlich aussehen.
z.B.: eine & vor jeder nachricht und ein # nach jeder nachricht.
Oder bei komplexen Dingen etwas wie GSON.
Auch lässt sich mit Flush auf der Senderseite gut bübdeln....
Hier mal ein Unkommentierter Code von meinem Programm.
Der hat bisher keine Probleme gemacht.
public class ConnectionStream extends Thread {
private InputStream input;
private OutputStream output;
private IMessage message;
private boolean close;
public ConnectionStream(InputStream input, OutputStream output, IMessage message){
this.input = input;
this.output = output;
this.message = message;
StaticObjects.hasAStreamToBox = true;
}
@Override
public void run() {
super.run();
byte[] buffer = new byte[1024];
int bytes;
while (!close){
try{
bytes = input.read(buffer);
String readMessage = new String(buffer, 0, bytes);
message.newMessage(this, readMessage);
}catch (Exception e){
message.exceptionThrow(this, e);
break;
}
}
message.connectionClosed(this);
}
public InputStream getInputStream(){
return input;
}
public void close(){
this.close = true;
}
public void write(String json){
try {
output.write(json.getBytes());
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.