Skip to content

Commit 7f46b39

Browse files
committed
Each segment has its own yakindu message topic, each node of the distributed yakindu statecharts subscribes only for those yakindu topics in which it is interested in (controlled sections + turnout + neighbour segment topics), yakindu messages are moved to the common messages package and sending yakindu message is also possible using the communication lib.
1 parent 5e805f6 commit 7f46b39

File tree

33 files changed

+285
-187
lines changed

33 files changed

+285
-187
lines changed

src/java/components/barrier/src/main/java/hu/bme/mit/inf/modes3/components/barrier/app/Main.xtend

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ class Main {
2020

2121
registry.parseArguments(args)
2222

23-
val occupancyTopics = TopicFactory::createSegmentTopics(#{SegmentOccupancyMessage}).toSet
23+
val supervisedSections = #{15, 24}
24+
val occupancyTopics = TopicFactory::createSegmentTopics(supervisedSections, #{SegmentOccupancyMessage}).toSet
2425
val railwayTrackCommunicationStack = MessagingServiceFactory::createStackForTopics(registry, loggerFactory, occupancyTopics)
2526

2627
val barrierCommunicationStack = JsonDispatcherFactory::createMQTTStackWithJSON(registry, loggerFactory)
27-
val supervisedSections = #{15, 24}
2828

2929
val component = new TrackSupervisor(supervisedSections)
3030
val componentWrapper = new TrackSupervisorBridge(component, railwayTrackCommunicationStack, barrierCommunicationStack, loggerFactory)

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/SafetyLogicInitializer.xtend

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import hu.bme.mit.gamma.impl.async_t4.AsyncT4Component
77
import hu.bme.mit.gamma.impl.async_t5.AsyncT5Component
88
import hu.bme.mit.gamma.impl.async_t6.AsyncT6Component
99
import hu.bme.mit.gamma.impl.interfaces.ProtocolInterface
10-
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.dispatcher.IYakinduMessageSender
1110
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.IYakinduProtocolDispatcher
1211
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.IYakinduProtocolRestarter
1312
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.PortWithDirection
@@ -17,10 +16,11 @@ import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.Tu
1716
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.YakinduProtocolAdapter
1817
import hu.bme.mit.inf.modes3.messaging.communication.command.trackelement.interfaces.ITrackElementCommander
1918
import hu.bme.mit.inf.modes3.messaging.communication.state.trackelement.interfaces.ITrackElementStateRegistry
19+
import hu.bme.mit.inf.modes3.messaging.communication.yakindu.interfaces.IYakinduMessageSender
2020
import org.slf4j.ILoggerFactory
2121
import org.slf4j.Logger
2222

23-
import static hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.ConnectionDirection.*
23+
import static hu.bme.mit.inf.modes3.messaging.messages.enums.ConnectionDirection.*
2424

2525
class SafetyLogicInitializer {
2626
val Logger logger

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/app/Main.xtend

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.dispa
77
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.YakinduProtocolDispatcher
88
import hu.bme.mit.inf.modes3.messaging.communication.factory.MessagingServiceFactory
99
import hu.bme.mit.inf.modes3.messaging.communication.factory.TopicFactory
10+
import hu.bme.mit.inf.modes3.messaging.communication.factory.YakinduTopicFactory
1011
import hu.bme.mit.inf.modes3.messaging.messages.command.SegmentCommand
1112
import hu.bme.mit.inf.modes3.messaging.messages.status.SegmentOccupancyMessage
12-
import hu.bme.mit.inf.modes3.messaging.messages.status.SegmentStateMessage
1313
import hu.bme.mit.inf.modes3.utils.common.jopt.ArgumentDescriptorWithParameter
1414
import hu.bme.mit.inf.modes3.utils.common.jopt.ArgumentRegistry
1515
import hu.bme.mit.inf.modes3.utils.conf.layout.LayoutConfiguration
@@ -20,27 +20,27 @@ class Main {
2020

2121
def static void main(String[] args) {
2222
System.setProperty(SimpleLogger.LOG_FILE_KEY, "System.out")
23-
//System.setProperty(SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "trace")
23+
System.setProperty(SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "info")
2424

2525
val loggerFactory = new SimpleLoggerFactory
2626
val logger = loggerFactory.getLogger(Main.name)
27+
val layout = LayoutConfiguration.INSTANCE
2728

2829
val registry = new ArgumentRegistry(loggerFactory)
2930
registry.registerArgumentWithOptions(new ArgumentDescriptorWithParameter("id", "ID of the turnout", String))
3031
registry.registerArgumentWithOptions(new ArgumentDescriptorWithParameter("address", "The address of the transport server", String))
3132
registry.registerArgumentWithOptions(new ArgumentDescriptorWithParameter("port", "The port used by the transport server", Integer))
3233

33-
registry.parseArguments(args);
34+
registry.parseArguments(args)
3435

3536
val hostname = registry.getParameterStringValue("id")
3637
val turnoutID = Integer.valueOf(hostname.split("\\.").head.replace('t', ''))
3738

38-
val controlledSections = LayoutConfiguration.INSTANCE.getControlledSections(turnoutID)
39-
val turnoutSegmentItself = LayoutConfiguration.INSTANCE.getSegmentIdsOfTurnout(turnoutID)
40-
41-
val sectionTopics = controlledSections.map[TopicFactory::createSegmentTopics(it, #{SegmentCommand, SegmentStateMessage, SegmentOccupancyMessage})].flatten.toSet
42-
val turnoutOccupancyTopic = turnoutSegmentItself.map[TopicFactory::createSegmentTopics(it, #{SegmentOccupancyMessage})].flatten.toSet
39+
val controlledSections = layout.getControlledSections(turnoutID)
40+
val turnoutSegmentItself = layout.getSegmentIdsOfTurnout(turnoutID)
4341

42+
val sectionTopics = TopicFactory::createSegmentTopics(controlledSections, #{SegmentCommand, SegmentOccupancyMessage})
43+
val turnoutOccupancyTopic = TopicFactory::createSegmentTopics(turnoutSegmentItself, #{SegmentOccupancyMessage})
4444
val turnoutTopics = TopicFactory::createTurnoutTopics(turnoutID)
4545

4646
val topics = newHashSet
@@ -51,7 +51,21 @@ class Main {
5151
val communicationStack = MessagingServiceFactory::createStackForTopics(registry, loggerFactory, topics)
5252
logger.debug('''Subscribed for railway track topics: «topics»''')
5353

54-
val yakinduStack = JsonDispatcherFactory::createMQTTStackWithJSON(registry, loggerFactory)
54+
val neighbourSections = controlledSections.map[layout.getNeighbourSectionIds(it)].flatten.toSet
55+
val turnoutSegments = layout.getSegmentIdsOfTurnout(turnoutID)
56+
57+
val neighbourSectionYakinduTopics = YakinduTopicFactory::createYakinduTopics(neighbourSections)
58+
val controlledSectionsYakinduTopics = YakinduTopicFactory::createYakinduTopics(controlledSections)
59+
val turnoutYakinduTopics = YakinduTopicFactory::createYakinduTopics(turnoutSegments)
60+
61+
val yakinduTopics = newHashSet
62+
yakinduTopics.addAll(neighbourSectionYakinduTopics)
63+
yakinduTopics.addAll(controlledSectionsYakinduTopics)
64+
yakinduTopics.addAll(turnoutYakinduTopics)
65+
66+
val yakinduStack = JsonDispatcherFactory::createMQTTStackWithJSON(registry, loggerFactory, yakinduTopics)
67+
logger.debug('''Subscribed for yakindu topics: «yakinduTopics»''')
68+
5569
val yakinduDispatcher = (yakinduStack.dispatcher as JsonMessageDispatcher)
5670
val yakinduProtocolDispatcher = new YakinduProtocolDispatcher(loggerFactory)
5771
yakinduDispatcher.canGoToListener = yakinduProtocolDispatcher

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/bridge/ISafetyLogicBridge.xtend

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.bridge
22

3-
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.dispatcher.IYakinduMessageSender
43
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.IYakinduProtocolDispatcher
54
import hu.bme.mit.inf.modes3.messaging.communication.command.trackelement.interfaces.ITrackElementCommander
65
import hu.bme.mit.inf.modes3.messaging.communication.state.trackelement.interfaces.ITrackElementStateRegistry
6+
import hu.bme.mit.inf.modes3.messaging.communication.yakindu.interfaces.IYakinduMessageSender
77

88
interface ISafetyLogicBridge extends IYakinduMessageSender, IYakinduProtocolDispatcher {
99

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/bridge/SafetyLogicBridge.xtend

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.bridge
22

3-
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.ConnectionDirection
43
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.ISafetyLogic
5-
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.dispatcher.IYakinduMessageSender
6-
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.dispatcher.YakinduMessageSender
74
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.IYakinduProtocolDispatcher
85
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.wrapper.PortWithDirection
96
import hu.bme.mit.inf.modes3.messaging.communication.common.AbstractCommunicationComponent
7+
import hu.bme.mit.inf.modes3.messaging.communication.yakindu.YakinduMessageSender
8+
import hu.bme.mit.inf.modes3.messaging.communication.yakindu.interfaces.IYakinduMessageSender
9+
import hu.bme.mit.inf.modes3.messaging.messages.enums.ConnectionDirection
1010
import hu.bme.mit.inf.modes3.messaging.mms.MessagingService
1111
import org.eclipse.xtend.lib.annotations.Accessors
1212
import org.slf4j.ILoggerFactory

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/comm/dispatcher/ICanGoToListener.xtend

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/comm/dispatcher/ICannotGoToListener.xtend

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/comm/dispatcher/IReleaseToListener.xtend

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/java/components/safetylogic/componentlevel.sc/src/main/java/hu/bme/mit/inf/modes3/components/safetylogic/componentlevel/sc/comm/dispatcher/IReserveToListener.xtend

Lines changed: 0 additions & 7 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
package hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.dispatcher
22

3-
import hu.bme.mit.inf.modes3.components.safetylogic.componentlevel.sc.comm.messages.YakinduProtocolMessage
43
import hu.bme.mit.inf.modes3.messaging.communication.factory.MessagingServiceFactory
5-
import hu.bme.mit.inf.modes3.messaging.messages.core.InternalMessageToTopicMapper
64
import hu.bme.mit.inf.modes3.utils.common.jopt.ArgumentRegistry
5+
import java.util.Set
76
import org.slf4j.ILoggerFactory
87

98
class JsonDispatcherFactory {
109

11-
def static createMQTTStackWithJSON(ArgumentRegistry argumentRegistry, ILoggerFactory factory) {
12-
val topics = InternalMessageToTopicMapper.INSTANCE.getTopics(YakinduProtocolMessage.simpleName)
13-
val dispatcher = new JsonMessageDispatcher(factory)
14-
val communicationStack = MessagingServiceFactory::createStackForTopics(argumentRegistry, factory, topics, dispatcher)
15-
16-
val logger = factory.getLogger(JsonDispatcherFactory.name)
17-
logger.debug('''Subscribed for Yakindu topics: «topics»''')
18-
19-
return communicationStack
10+
def static createMQTTStackWithJSON(ArgumentRegistry argumentRegistry, ILoggerFactory factory, Set<String> topics) {
11+
return MessagingServiceFactory::createStackForTopics(argumentRegistry, factory, topics, new JsonMessageDispatcher(factory))
2012
}
2113
}

0 commit comments

Comments
 (0)