uprava ping probe
parent
8276df1596
commit
839231901f
|
|
@ -6,8 +6,9 @@ mysql_password=Michal2407
|
|||
mysql_database=jnet
|
||||
server_port=1225
|
||||
debug=true
|
||||
ping_attempt=2
|
||||
ping_timeout=2000
|
||||
ping_attempt=4
|
||||
ping_timeout=2
|
||||
ping_repeat=3
|
||||
instability_attempt=2
|
||||
instability_limit=1000
|
||||
instability_limit=1
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import jnet.lib.Status;
|
|||
import jnet.lib.object.MapObject;
|
||||
import jnet.server.Server;
|
||||
|
||||
|
||||
public class NettyPing extends Thread {
|
||||
|
||||
private static final HashedWheelTimer TIMER = new HashedWheelTimer(); // Netty časovač
|
||||
|
|
@ -19,10 +18,8 @@ public class NettyPing extends Thread {
|
|||
public NettyPing() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
public void run() {
|
||||
LogFile.printInfo("Ping probe start");
|
||||
for (MapObject mapObject : Server.mapObject) {
|
||||
schedulePing(mapObject);
|
||||
|
|
@ -34,7 +31,7 @@ public class NettyPing extends Thread {
|
|||
@Override
|
||||
public void run(Timeout timeout) {
|
||||
pingHost(object);
|
||||
timeout.timer().newTimeout(this, 3, TimeUnit.SECONDS); // Opakuje každých 5 sekund
|
||||
timeout.timer().newTimeout(this, Server.config.getInt("ping_repeat"), TimeUnit.SECONDS); // Opakuje každých x sekund
|
||||
}
|
||||
}, 0, TimeUnit.SECONDS);
|
||||
}
|
||||
|
|
@ -42,8 +39,8 @@ public class NettyPing extends Thread {
|
|||
private static void pingHost(MapObject object) {
|
||||
try {
|
||||
String command = System.getProperty("os.name").startsWith("Windows")
|
||||
? "ping -n 1 " + object.getIp()
|
||||
: "ping -c 1 " + object.getIp();
|
||||
? "ping -n 1 -w " + String.valueOf((Server.config.getInt("ping_timeout")*1000)) + " " + object.getIp() // Timeout 2000 ms (Windows)
|
||||
: "ping -c 1 -W " + String.valueOf(Server.config.getInt("ping_timeout")) + " " + object.getIp(); // Timeout 2 sec (Linux)
|
||||
|
||||
Process process = Runtime.getRuntime().exec(command);
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||
|
|
@ -60,16 +57,18 @@ public class NettyPing extends Thread {
|
|||
}
|
||||
|
||||
//System.out.println("Ping na " + object.getIp() + (success ? " uspesny! RTT: " + timeMs + " ms" : " selhal!"));
|
||||
if (success) {
|
||||
if (object.getStatus() != Status.OK) {
|
||||
PingResult.stateOnline(object);
|
||||
}
|
||||
|
||||
} else {
|
||||
PingResult.stateOffline(object);
|
||||
}
|
||||
|
||||
process.waitFor();
|
||||
} catch (Exception e) {
|
||||
System.err.println("Chyba pri pingu na " + object.getIp());
|
||||
PingResult.stateOffline(object);
|
||||
//e.printStackTrace();
|
||||
LogFile.printErr("Chyba pri pingu na " + object.getIp() + " " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -83,5 +82,4 @@ public class NettyPing extends Thread {
|
|||
return -1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,14 +10,26 @@ import jnet.server.ServerMessageParser;
|
|||
|
||||
public class PingResult {
|
||||
|
||||
private static final int POKUS = 2;
|
||||
|
||||
private static final int POKUS = Server.config.getInt("ping_attempt");
|
||||
|
||||
public static void stateOnline(MapObject obj) {
|
||||
// oveří jestli neni zarizeni vypnuto
|
||||
if (obj.isActive()) {
|
||||
if (obj.isActive() && obj.getStatus() != Status.OK) {
|
||||
// vynuluje ping pokusy
|
||||
obj.setPingAttemp(0);
|
||||
// pokud byl předchozí stav offline ukončí event
|
||||
if (obj.getStatus() == Status.OFFLINE) {
|
||||
// aktualizace eventu
|
||||
Event event = Database.endEvent(obj.getId(), Event.TYPE_PING);
|
||||
for (int i = 0; i < Server.events.size(); i++) {
|
||||
if (Server.events.get(i).getId() == event.getId()) {
|
||||
Server.events.set(i, event);
|
||||
}
|
||||
}
|
||||
// odeslani aktualizovaného eventu
|
||||
ServerMessageParser.sendAll(Message.EVENT_UPDATE, event);
|
||||
}
|
||||
|
||||
// nastavi status objektu
|
||||
obj.setStatus(Status.OK);
|
||||
// odesle informaci o novem stavu klientum
|
||||
|
|
@ -28,7 +40,8 @@ public class PingResult {
|
|||
public static void stateOffline(MapObject obj) {
|
||||
// oveří jestli neni zarizeni vypnuto
|
||||
if (obj.isActive()) {
|
||||
if (obj.getPingAttemp() >= POKUS) {
|
||||
if (obj.getPingAttemp() >= POKUS && obj.getStatus() != Status.OFFLINE) {
|
||||
System.err.println("objekt: " + obj.getName() + " pokus: " + obj.getPingAttemp());
|
||||
// nastavi status objektu
|
||||
obj.setStatus(Status.OFFLINE);
|
||||
// odesle informaci o novem stavu klientum
|
||||
|
|
|
|||
Loading…
Reference in New Issue