com.r3corda.core.protocols

## Package com.r3corda.core.protocols

### Types

AppContext | `data class AppContext` This is just some way to track what attachments need to be in the class loader, but may later include some app properties loaded from the attachments. And perhaps the authenticated user for an API call?
ProtocolLogic | `abstract class ProtocolLogic<out T>` A sub-class of ProtocolLogic implements a protocol flow using direct, straight line blocking code. Thus you can write complex protocol logic in an ordinary fashion, without having to think about callbacks, restarting after a node crash, how many instances of your protocol there are running and so on.
ProtocolLogicRef | `data class ProtocolLogicRef` A class representing a ProtocolLogic instance which would be possible to safely pass out of the contract sandbox.
ProtocolLogicRefFactory | `class ProtocolLogicRefFactory : SingletonSerializeAsToken` A class for conversion to and from ProtocolLogic and ProtocolLogicRef instances.
ProtocolStateMachine | `interface ProtocolStateMachine<R>` A ProtocolStateMachine instance is a suspendable fiber that delegates all actual logic to a ProtocolLogic instance. For any given flow there is only one PSM, even if that protocol invokes subprotocols.
StateMachineRunId | `data class StateMachineRunId`

### Exceptions

IllegalProtocolLogicException | `class IllegalProtocolLogicException : IllegalArgumentException`
ProtocolSessionException | `class ProtocolSessionException : Exception`