/
GTEAliveMsgParser.java
62 lines (50 loc) · 1.58 KB
/
GTEAliveMsgParser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package scheduler;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.util.Hashtable;
import org.apache.log4j.Logger;
import GTEs.EngineIdentifier;
/**
* parses the alive-messages from the engine
* @author babz
*
*/
public class GTEAliveMsgParser implements Runnable {
// private static Logger log = Logger.getLogger("class gte alivemsg parser");
private static final Logger LOG = Logger.getLogger(GTEAliveMsgParser.class);
private DatagramPacket packet;
private Hashtable<EngineIdentifier, GTEInfo> engines;
public GTEAliveMsgParser(DatagramPacket packet,
Hashtable<EngineIdentifier, GTEInfo> engines) {
this.packet = packet;
this.engines = engines;
}
@Override
public void run() {
String msg = new String(packet.getData(), 0, packet.getLength());
//msg decode
int tcpPort = 0;
int minCons = 0;
int maxCons = 0;
String[] msgParts = msg.split(" ");
try {
tcpPort = Integer.parseInt(msgParts[0]);
minCons = Integer.parseInt(msgParts[1]);
maxCons = Integer.parseInt(msgParts[2]);
} catch (NumberFormatException exc) {
LOG.warn("parsing failed");
}
//update time if engine already in hashtable, add new engine with time otherwise
InetAddress ip = packet.getAddress();
int udp = packet.getPort();
EngineIdentifier currEngine = new EngineIdentifier(ip, tcpPort);
if(engines.containsKey(currEngine)) {
if(engines.get(currEngine).isOffline()) {
engines.get(currEngine).setActive();
}
engines.get(currEngine).updateEngine(udp);
} else {
engines.put(currEngine, new GTEInfo(ip, udp, tcpPort, minCons, maxCons));
}
}
}