Zdravim,
snažím se udělat robota, kterej čte pomocí rconu chat ve hře serveru a pokud někdo napíše příkaz, měl by na něho zareagovat.
V podstatě potřebuju každých 5sec zkontrolovat příkaz chat.tail <pocet_radku> (vypíše posledních x řádků z chatu ve formátu JSON) vyfiltrování nových zpráv a podobně mám hotové, ale když si pošlu víc jak asi 8 posledních zpráv, tak mí java hodí chybu, že je stream poškozen:
java.io.IOException: Stream corrupted.
at rconbot.base.Packet.read(Packet.java:47)
at rconbot.base.RconClient.read(RconClient.java:56)
at rconbot.base.RconClient.read(RconClient.java:58)
at rconbot.Rconbot.readPackets(Rconbot.java:91)
at rconbot.Rconbot.main(Rconbot.java:46)
Packet.java:
public void read(InputStream in) throws IOException {
packetLength = readBigEndianInt(in);
packetId = readBigEndianInt(in);
packetType = Type.valueOfServer(readBigEndianInt(in));
byte[] bodyBytes = new byte[packetLength - 10];
if (bodyBytes.length != 0) {
if (in.read(bodyBytes) == -1)
throw new IOException("Stream corrupted.");
}
if (in.read() != 0 || in.read() != 0)
throw new IOException("Stream corrupted."); // - - - - řádek 47
body = new String(bodyBytes, Charset.forName("ASCII"));
}
rconbot.java: (už jen zpracování přijatého stringu)
public void readPackets() throws IOException {
while (client.connected()) {
String ret;
ret = client.read().getBody();
readJSON(ret);
log.add(ret);
}
}
Další otázka je:
Program sám o sobě je jedno vlákno (připojení na server, čtení dat ze serveru).
Druhé vlákno mám jen na tehle cyklus posílání tohoto příkazu.
Ted me jde o to, jak LIVE přenášet nějaký proměný mezi těma vláknama?
Příklad:
Ve hře napíšu příkaz !online - ten zjistim
ted v programu potřebuju poslat příkaz "status" na zjištění počet hráčů na serveru
Následně zase potřebuju počkat na odpověd a vrátit jí do stejný třídy, kde byl vykonán požadavek aby se mohl returnout zpět a udělat příkaz /say <pocetonline>
Napadá vás nějaký jednoduchý řešení? udělat další vlákno na tyhle mezipříkazy? díky