Опитвам се да направя просто приложение за чат сървър/клиент. Моят сървър е направен на python, използвайки twisted. Всичко работи добре с него, тествано е с telnet.
По принцип сървърът изпраща на всички свои клиенти всяко съобщение, което получава. Трябва ми начин да чета завинаги от сокета, за да мога да получавам всички съобщения. Не мисля, че това е най-добрият подход, но се опитах да го направя с помощта на нишка, която се чете завинаги (засега). След като клиентът се свърже със сървъра, той ще стартира нишка, която ще проверява завинаги за актуализации.
Ето моя клас CheckUpdates, който имплементира Runnable:
class CheckUpdates implements Runnable{
@Override
public void run() {
Log.d("ME", "CHECKING FOR UPDATES");
while(true)
{
// reader.lines().forEach(System.out.println);
String line;
Log.d("ME","IN WHILE");
try {
while ((line = reader.readLine()) != null) {
Log.d("ME", "READING LINE");
Looper.prepare();
Toast.makeText(MainActivity.this, line, Toast.LENGTH_SHORT).show();
Looper.loop();
}
} catch (IOException e) {
Log.d("ME", "EXCEPTION IN WHILE: " + e.getMessage().toString());
}
Log.d("ME", "END OF WHILE CHECK UPDATES");
}
}
}
Стартирам темата веднага след като се свържа със сървъра. По принцип получавам първото съобщение (първи тост) и веднага след това не идва нищо повече, дори съобщението КРАЙ НА ПРОВЕРКАТА НА АКТУАЛИЗАЦИИТЕ logcat.
Може ли да се блокира завинаги, докато проверява за нова линия от сокета? Също така, ако има по-елегантен начин да направите това, наистина ще съм благодарен, ако някой ме насочи в правилната посока.