liulingling.177216
2024-08-26 349f1cfc5fa77fbc636d542df0d8050fddec48c2
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
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.dingzhuo.compute.engine;
 
import akka.actor.ActorSystem;
import akka.cluster.sharding.ClusterSharding;
import akka.cluster.sharding.ClusterShardingSettings;
import com.dingzhuo.compute.engine.actor.alarm.AlarmTimerActor;
import com.dingzhuo.compute.engine.actor.alarm.LoadAlarmActor;
import com.dingzhuo.compute.engine.actor.alarm.PeriodAlarmActor;
import com.dingzhuo.compute.engine.actor.alarm.RealtimeAlarmActor;
import com.dingzhuo.compute.engine.actor.device.DeviceStatusActor;
import com.dingzhuo.compute.engine.actor.device.DeviceStatusTimerActor;
import com.dingzhuo.compute.engine.actor.device.LoadDeviceStatusActor;
import com.dingzhuo.compute.engine.actor.indexcalc.CalculationIndexActor;
import com.dingzhuo.compute.engine.actor.indexcalc.LoadIndexActor;
import com.dingzhuo.compute.engine.actor.indexcalc.SavePeriodActor;
import com.dingzhuo.compute.engine.actor.indexcalc.TimerActor;
import com.dingzhuo.compute.engine.actor.monitor.RecastDataActor;
import com.dingzhuo.compute.engine.config.CalcMessageExtractor;
import com.dingzhuo.compute.engine.config.EngineArgOption;
import com.dingzhuo.compute.engine.utils.SpringAkkaExtension;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
 
/**
 * @author fanxinfu
 */
@Component
public class ComputeEngineRunner implements CommandLineRunner {
 
  private final Logger logger = LoggerFactory.getLogger(this.getClass());
  private final ActorSystem actorSystem;
  private final SpringAkkaExtension akkaExt;
 
  public ComputeEngineRunner(
      ActorSystem actorSystem, SpringAkkaExtension springAkkaExtension) {
    this.actorSystem = actorSystem;
    this.akkaExt = springAkkaExtension;
  }
 
  @Override
  public void run(String... args) {
    EngineArgOption argOption = new EngineArgOption();
    CmdLineParser cmdLineParser = new CmdLineParser(argOption);
    if (args.length == 0) {
      showHelp(cmdLineParser);
      return;
    }
 
    try {
      cmdLineParser.parseArgument(args);
    } catch (CmdLineException e) {
      logger.error(e.getLocalizedMessage());
    }
 
    if (argOption.isCalc()) {
      actorSystem
          .actorOf(akkaExt.props(CalculationIndexActor.ACTOR_NAME),
              CalculationIndexActor.ACTOR_NAME);
      actorSystem.actorOf(akkaExt.props(TimerActor.ACTOR_NAME), TimerActor.ACTOR_NAME);
      actorSystem.actorOf(akkaExt.props(LoadIndexActor.ACTOR_NAME), LoadIndexActor.ACTOR_NAME);
      actorSystem.actorOf(akkaExt.props(SavePeriodActor.ACTOR_NAME), SavePeriodActor.ACTOR_NAME);
    }
 
    if (argOption.isAlarm()) {
      actorSystem.actorOf(akkaExt.props(LoadAlarmActor.ACTOR_NAME), LoadAlarmActor.ACTOR_NAME);
      actorSystem
          .actorOf(akkaExt.props(RealtimeAlarmActor.ACTOR_NAME), RealtimeAlarmActor.ACTOR_NAME);
      actorSystem.actorOf(akkaExt.props(PeriodAlarmActor.ACTOR_NAME), PeriodAlarmActor.ACTOR_NAME);
      actorSystem.actorOf(akkaExt.props(AlarmTimerActor.ACTOR_NAME), AlarmTimerActor.ACTOR_NAME);
    }
 
    if (argOption.isDevice()) {
      actorSystem.actorOf(akkaExt.props(LoadDeviceStatusActor.ACTOR_NAME),
          LoadDeviceStatusActor.ACTOR_NAME);
      actorSystem.actorOf(akkaExt.props(DeviceStatusTimerActor.ACTOR_NAME),
          DeviceStatusTimerActor.ACTOR_NAME);
      actorSystem
          .actorOf(akkaExt.props(DeviceStatusActor.ACTOR_NAME), DeviceStatusActor.ACTOR_NAME);
    }
 
    if (argOption.isRecast()) {
      actorSystem.actorOf(akkaExt.props(RecastDataActor.ACTOR_NAME), RecastDataActor.ACTOR_NAME);
    }
  }
 
  private void showHelp(CmdLineParser cmdLineParser) {
    System.out.println("参数说明:");
    cmdLineParser.printUsage(System.out);
  }
}