Anonymní profil JS – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil JS – Programujte.comAnonymní profil JS – Programujte.com

 

Příspěvky odeslané z IP adresy 185.99.119.–

JS
Java › RCON robot - chyba při čtení…
13. 11. 2016   #213606

Tak vyreseno:

public String doCmd(String cmd) throws IOException {
    String ret = null;
    log.add("Posilam dotaz o " + cmd);
    client.executeCommand(cmd);
    while(ret == null) {
        ret = client.read().getBody();
        if("".equals(ret)) ret = null;
    }
    return ret;
}
public String r() throws IOException {
    String ret;
    ret = client.read().getBody();
    return ret;
}

Ta podmínka if("".equals(ret)) ret = null;

je kvuli tomu, že to každej druhej read() vrátilo práznej string.

Takhle jak to je, to ale šlape... Jen by mě zajímalo, rpoč to občas pošle prázdnej String?

JS
Java › RCON robot - chyba při čtení…
13. 11. 2016   #213605

#4 gna
zkoušel jsem takhle  

public String doCmd(String cmd) throws IOException {
    client.executeCommand(cmd);
    while(client.connected()) {
        if(client.read().getBody() != null) {
           return client.read().getBody(); 
        }
    }
    return "";
}


V podstatě pošlu požadavek na zápis do rconu -> čekám dokud nepřijde odpověd, hned jak přijde ji vrátim returnem.

executecommad se provede, ale bohužel zpětně nic nepřečte.... v podstatě bez returnu

JS
Java › RCON robot - chyba při čtení…
2. 11. 2016   #213440

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
 

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý