Liebe com,
Mal eine Frage, zu der es zwar viele Antworten im netz gibt, mir aber keine hilft:
Wie kann ich einen Thread mit Laufendem BufferedReader.readLine() beenden, sodass auch das readLine() SOFORT unterbrochen wird, ohne jedoch den Stream zu closen?
Hintergrund:
Ich habe ein kleines Spiel geschriben, zu dem ich nun einen Server schreibe. Ich habe erst einmal ein Chatserver geschrieben, über den man auch einen Kampf eröffnen kann. Dazu übergebe ich die I/O-Streams, über die dann die Daten gesendet werden.
Nun ist es leider so, dass der Thread von der ChatServerConnection nicht richtig beendet wird, da bei immernoch auf in.readLine() gewartet wird, bevor sowohl mit Thread.stop als auch mit Thread.interrupt RICHTIG beendet wird.
Dadurch wird die nächste Zeile vom Clienten immernoch an diesen Thread geleitet und der FightThread bekommt nurnoch einen leeren String und nicht die für ihn bestimmten Daten.
Nun habe ich über google erfahren, dass man mit Socket.shutdownInput() genau dies beenden kann, nur leider wird damit der ganze Stram mit EOS geclosed, was ich ja nicht möchte
Ich habe es bisher (sehr unschön) so gelöst, dass ich einfach zum Beginn vor irgendwelchen Berechnungen des Kampfes "abc" sende, damit der ChatThread beendet wird und beim eigentlichen Spielserver leere Strings ignoriere.
Wie kann ich dies eleganter lösen?
mfg
BH16
Mal eine Frage, zu der es zwar viele Antworten im netz gibt, mir aber keine hilft:
Wie kann ich einen Thread mit Laufendem BufferedReader.readLine() beenden, sodass auch das readLine() SOFORT unterbrochen wird, ohne jedoch den Stream zu closen?
Hintergrund:
Ich habe ein kleines Spiel geschriben, zu dem ich nun einen Server schreibe. Ich habe erst einmal ein Chatserver geschrieben, über den man auch einen Kampf eröffnen kann. Dazu übergebe ich die I/O-Streams, über die dann die Daten gesendet werden.
Nun ist es leider so, dass der Thread von der ChatServerConnection nicht richtig beendet wird, da bei immernoch auf in.readLine() gewartet wird, bevor sowohl mit Thread.stop als auch mit Thread.interrupt RICHTIG beendet wird.
Dadurch wird die nächste Zeile vom Clienten immernoch an diesen Thread geleitet und der FightThread bekommt nurnoch einen leeren String und nicht die für ihn bestimmten Daten.
Nun habe ich über google erfahren, dass man mit Socket.shutdownInput() genau dies beenden kann, nur leider wird damit der ganze Stram mit EOS geclosed, was ich ja nicht möchte
Ich habe es bisher (sehr unschön) so gelöst, dass ich einfach zum Beginn vor irgendwelchen Berechnungen des Kampfes "abc" sende, damit der ChatThread beendet wird und beim eigentlichen Spielserver leere Strings ignoriere.
Wie kann ich dies eleganter lösen?
mfg
BH16