Package jmri.jmrix.srcp
Class SRCPTrafficController
java.lang.Object
jmri.jmrix.AbstractMRTrafficController
jmri.jmrix.srcp.SRCPTrafficController
- All Implemented Interfaces:
SRCPInterface
Converts Stream-based I/O to/from SRCP messages. The "SRCPInterface" side
sends/receives message objects.
The connection to a SRCPPortController is via a pair of *Streams, which then carry sequences of characters for transmission. Note that this processing is handled in an independent thread, which we need to clean up in tests.
This handles the state transitions, based on the necessary state in each message.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classInternal class to remember the Reply object and destination listener with a reply is received.Nested classes/interfaces inherited from class jmri.jmrix.AbstractMRTrafficController
AbstractMRTrafficController.RcvNotifier, AbstractMRTrafficController.XmtNotifier -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected SRCPSystemConnectionMemostatic intstatic int(package private) final RunnableFields inherited from class jmri.jmrix.AbstractMRTrafficController
allowUnexpectedReply, AUTORETRYSTATE, cmdListeners, connectionError, controller, flushReceiveChars, IDLESTATE, istream, listenerQueue, maxRcvExceptionCount, mCurrentMode, mCurrentState, mLastSender, msgQueue, mWaitBeforePoll, NORMALMODE, NOTIFIEDSTATE, OKSENDMSGSTATE, ostream, POLLSTATE, PROGRAMINGMODE, rcvException, rcvThread, replyInDispatch, threadStopRequest, timeoutFlag, timeouts, WAITMSGREPLYSTATE, WAITREPLYINNORMMODESTATE, WAITREPLYINPROGMODESTATE, waitTimePoll, xmtException, xmtRunnable, xmtThread -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected booleanprotected AbstractMRMessageSets the system to normal mode during programming while in IDLESTATE.protected AbstractMRMessageSet the system to programming mode.protected voidforwardMessage(AbstractMRListener client, AbstractMRMessage m) Forward a SRCPMessage to all registered SRCPInterface listeners.protected voidforwardReply(AbstractMRListener client, AbstractMRReply m) Forward a SRCPReply to all registered SRCPInterface listeners.protected voidforwardReply(AbstractMRListener client, SimpleNode n) Forward a SRCPReply to all registered SRCPInterface listeners.(package private) SRCPSystemConnectionMemoprotected AbstractMRReplynewReply()protected voidnotifyReply(SimpleNode r, AbstractMRListener dest) Forward a "Reply" from layout to registered listeners.protected AbstractMRMessageInvoked if it's appropriate to do low-priority polling of the command station, this should return the next message to send, or null if the TrafficController should just sleep.protected AbstractMRListenervoidHandle incoming characters.voidvoidsendSRCPMessage(SRCPMessage m, SRCPListener reply) void(package private) voidvoidTerminate the SRCP extra threads.Methods inherited from class jmri.jmrix.AbstractMRTrafficController
addConsoleListener, addHeaderToOutput, addListener, addTrailerToOutput, canReceive, connectionWarn, connectPort, disconnectPort, distributeReply, enterProgModeDelayTime, forwardToPort, getLastSender, getPortName, getSynchronizeRx, handleOneIncomingReply, handleTimeout, hasTimeouts, lengthOfByteStream, loadChars, newRcvNotifier, notifyMessage, notifyReply, portReadyToSend, portWarn, portWarnTCP, programmerIdle, readByteProtected, recovery, removeListener, reportReceiveLoopException, resetTimeout, sendMessage, setAllowUnexpectedReply, setSynchronizeRx, status, terminate, transmitLoop, transmitWait, unexpectedReplyStateError, waitForStartOfReply, warnOnTimeoutMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface jmri.jmrix.srcp.SRCPInterface
status
-
Field Details
-
_memo
-
shutDownTask
-
HANDSHAKEMODE
-
RUNMODE
-
-
Constructor Details
-
SRCPTrafficController
public SRCPTrafficController()Create a new SRCPTrafficController instance.
-
-
Method Details
-
addSRCPListener
- Specified by:
addSRCPListenerin interfaceSRCPInterface
-
removeSRCPListener
- Specified by:
removeSRCPListenerin interfaceSRCPInterface
-
setSystemConnectionMemo
-
getSystemConnectionMemo
-
receiveLoop
Description copied from class:AbstractMRTrafficControllerHandle incoming characters. This is a permanent loop, looking for input messages in character form on the stream connected to the PortController viaAbstractMRTrafficController.connectPort(AbstractPortController).Each turn of the loop is the receipt of a single message.
- Overrides:
receiveLoopin classAbstractMRTrafficController
-
terminateThreads
Terminate the SRCP extra threads.This is intended to be used only by testing subclasses.
- Overrides:
terminateThreadsin classAbstractMRTrafficController
-
forwardMessage
Forward a SRCPMessage to all registered SRCPInterface listeners.- Specified by:
forwardMessagein classAbstractMRTrafficController- Parameters:
client- abstract listener.m- message to forward.
-
forwardReply
Forward a SRCPReply to all registered SRCPInterface listeners.- Specified by:
forwardReplyin classAbstractMRTrafficController
-
forwardReply
Forward a SRCPReply to all registered SRCPInterface listeners.- Parameters:
client- WHo should receive the replyn- relevant node
-
setSensorManager
-
pollMessage
Description copied from class:AbstractMRTrafficControllerInvoked if it's appropriate to do low-priority polling of the command station, this should return the next message to send, or null if the TrafficController should just sleep.- Specified by:
pollMessagein classAbstractMRTrafficController- Returns:
- Formatted poll message
-
pollReplyHandler
- Specified by:
pollReplyHandlerin classAbstractMRTrafficController
-
sendSRCPMessage
- Specified by:
sendSRCPMessagein interfaceSRCPInterface
-
enterProgMode
Description copied from class:AbstractMRTrafficControllerSet the system to programming mode.- Specified by:
enterProgModein classAbstractMRTrafficController- Returns:
- any message that needs to be returned to the Command Station to change modes. If no message is needed, returns null.
- See Also:
-
enterNormalMode
Description copied from class:AbstractMRTrafficControllerSets the system to normal mode during programming while in IDLESTATE. IfAbstractMRTrafficController.programmerIdle()returns true, enterNormalMode() is called after a timeout.- Specified by:
enterNormalModein classAbstractMRTrafficController- Returns:
- any message that needs to be returned to the Command Station to change modes. If no message is needed, returns null.
- See Also:
-
newReply
- Specified by:
newReplyin classAbstractMRTrafficController
-
endOfMessage
- Specified by:
endOfMessagein classAbstractMRTrafficController
-
notifyReply
Forward a "Reply" from layout to registered listeners.- Parameters:
r- Reply to be forwarded intactdest- One (optional) listener to be skipped, usually because it's the originating object.
-