Experiment.java
2.11 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.example.mina.client.base;
import lombok.extern.slf4j.Slf4j;
import java.time.ZonedDateTime;
@Slf4j
public abstract class Experiment <T extends MatrixClient, O extends ExperimentOptions> extends Thread{
protected T client;
protected O options;
protected int iteratedTimes;
//this is used for stop the task manually
private volatile boolean isRunning;
protected ExperimentProgressListner progressListner;
public Experiment() {
}
public Experiment(T client, O options) {
this.client = client;
this.options = options;
this.setName(getExperimentTaskName());
this.iteratedTimes = 0;
}
private String getExperimentTaskName() {
return String.format("%s-%s", this.client.getDeviceType(), this.client.getDeviceName());
}
public void setClient(T t) {
this.client = t;
}
public void setOptions(O options) {
this.options = options;
}
public void setProgressListner(ExperimentProgressListner experimentProgressListner) {
this.progressListner = experimentProgressListner;
}
public String getExperimentId() {
return options.getExperimentId();
}
abstract public String getExperimentName();
abstract public void schedule();
public void sendCommand(MatrixCommand command){
client.sendCommand(command);
}
public boolean isContinue() {
return iteratedTimes < options.getMaxIterCount() &&
ZonedDateTime.now().isBefore(options.getFinishAt()) &&
isRunning;
}
public void start() {
progressListner.startExperiment(getExperimentId());
while (isContinue()) {
try{
schedule();
iteratedTimes++ ;
progressListner.updateProgress(getExperimentId(), iteratedTimes);
Thread.sleep(options.getPause() * 1000);
}catch (Exception e) {
log.info("thread sleep error", e);
}
}
progressListner.stopExperiment(getExperimentId());
}
public void finish() {
isRunning = false;
}
}