package com.packtpub.storm.topology; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.generated.StormTopology; import backtype.storm.tuple.Fields; import com.packtpub.storm.model.Board; import com.packtpub.storm.model.GameState; import com.packtpub.storm.operators.ScoreFunction; import com.packtpub.storm.operators.ScoreUpdater; import com.packtpub.storm.operators.isEndGame; import com.packtpub.storm.trident.spout.LocalQueueEmitter; import com.packtpub.storm.trident.spout.LocalQueueSpout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import storm.trident.Stream; import storm.trident.TridentTopology; public class ScoringTopology { private static final Logger LOG = LoggerFactory.getLogger(ScoringTopology.class); public static StormTopology buildTopology() { LOG.info("Building topology."); TridentTopology topology = new TridentTopology(); GameState exampleRecursiveState = GameState.playAtRandom(new Board(), "X"); LOG.info("SIMULATED LEAF NODE : [" + exampleRecursiveState.getBoard() + "] w/ state [" + exampleRecursiveState + "]"); // Scoring Queue / Spout LocalQueueEmitter<GameState> scoringSpoutEmitter = new LocalQueueEmitter<GameState>("ScoringQueue"); scoringSpoutEmitter.enqueue(exampleRecursiveState); LocalQueueSpout<GameState> scoringSpout = new LocalQueueSpout<GameState>(scoringSpoutEmitter); Stream inputStream = topology.newStream("scoring", scoringSpout); inputStream.each(new Fields("gamestate"), new isEndGame()) .each(new Fields("gamestate"), new ScoreFunction(), new Fields("board", "score", "player")) .each(new Fields("board", "score", "player"), new ScoreUpdater(), new Fields()); return topology.build(); } public static void main(String[] args) throws Exception { final Config conf = new Config(); final LocalCluster cluster = new LocalCluster(); LOG.info("Submitting topology."); cluster.submitTopology("scoringTopology", conf, ScoringTopology.buildTopology()); LOG.info("Topology submitted."); Thread.sleep(600000); } }