TROEventReceiver
Overview
The Event Receiver component is used on the client to enable receiving callback events from the server.
Depending on the channel type, this will be done by regularly polling the server for new events or, if the Channel supports active sending of events, by simply awaiting events to be sent from the server.
Location
- Unit: uROEventReceiver.pas
- Ancestry: TComponent | TROComponent | TROMessageAwareComponent | TROChannelAwareComponent | TROEventReceiver
constructor Create override
Standard component constructor
constructor Create(aOwner: TComponent)
Parameters:
- aOwner: Owner
Activate
Activates and will start receiving events.
procedure Activate
Active
Specifies whether the event receiver is currently processing events (true), or not (false).
This property must be set to true before any actual event processing will occur.
property Active: Boolean read write
AreEventHandlersRegistered
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
function AreEventHandlersRegistered(const anEventIDs: array of string; const anEventHandlers: array of TObject): Boolean
Parameters:
- anEventIDs: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandlers: array of classes which implements event syncs interfaces.
Assign override
Copies the contents of another, similar object.
procedure Assign(Source: TPersistent)
Parameters:
- Source: Instance whose properties will be copied
AsyncPolling
property AsyncPolling: Boolean read write
Channel
The channel to be used for receiving events. Unless the channel type is explicitly designed for consecutive requests (such as the Super TCP Channel), it is recommended that you use a different channel instance from the one used for your regular communication.
property Channel: TROTransportChannel read write
CheckProperties
Validates the event receiver properties.
procedure CheckProperties(CheckServiceName: Boolean)
Parameters:
- CheckServiceName: Validate ServiceName or not
ClientID
The unique identifier for the client connected to the service.
property ClientID: TGUID read
Deactivate
Deactivates and will stop receiving events.
procedure Deactivate
Dispatch protected reintroduce
This method is called whenever the client channel receives an event from the server. If your client channel supports the IROActiveEventChannel interface, you will receive only one event at a time and the aStream
parameter will hold the IROMessage data, otherwise aStream
may contain multiple events data.
procedure Dispatch(aStream: TStream; aCaller: TThread)
Parameters:
- aStream: Stream that contains the event data
- aCaller: Thread that calls this method
EventHandlersIsRegistered deprecated
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
function EventHandlersIsRegistered(const anEventIDs: array of string; const anEventHandlers: array of TObject): Boolean
Parameters:
- anEventIDs: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandlers: array of classes which implements event syncs interfaces.
FireEvents protected virtual
procedure FireEvents(EventsDataStream: TStream)
Parameters:
- EventsDataStream:
GetObject protected
Returns self.
function GetObject: TObject
Interval
The interval, in milliseconds, at which the receiver will poll for new events. Default is 30,000 (30 seconds).
property Interval: Integer read write
Invoke_GetEventsData protected
This method is used to acquire events data from the server. It is used if the client channel does not support the IROActiveEventChannel and cannot notify the TROEventReceiver about incoming events data itself, in this case, TROEventReceiver calls this method in a background thread to obtain events from the server. When this method receives new events, it stores them in the EventsData stream and returns the received events count.
function Invoke_GetEventsData(out EventsData: TROBinaryMemoryStream): Integer
Parameters:
- EventsData: Binary stream that holds the event data
Invoke_RegisterEventClient protected
Notifies the server that the client can handle event types specified by the EventTypes
parameter.
procedure Invoke_RegisterEventClient(const EventTypes: string)
Parameters:
- EventTypes: Holds a comma-separated list of event types that the client can recieve from the server.
Invoke_UnregisterEventClient protected
Notifies the server that the client cannot receive events with the specified types any more.
procedure Invoke_UnregisterEventClient(const EventTypes: string)
Parameters:
- EventTypes: Holds a comma-separated list of event types that the client cannot recieve from the server anymore.
IsEventHandlerRegistered
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
function IsEventHandlerRegistered(const anEventID: string; const anEventHandler: TObject): Boolean
Parameters:
- anEventID: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandler: array of classes which implements event syncs interfaces.
IsRetained
Returns true if anObject
is retained by Self
.
function IsRetained(const anObject: TObject): Boolean
Parameters:
- anObject: Object to check
LegacyEvents
Enables or disables legacy events mode for the receiver. Default is true. Legacy mode is less secure and is not compatible with .NET servers. It is recommended to set this property to false for new projects.
property LegacyEvents: Boolean read write
MaximumMessagesPerPoll
Gets or sets the maximum number of messages to receive with one message call.
If a poll indicates that more messages have been queued than could be retrieved in a single call, subsequent calls are initiated immediately to receive all messages.
property MaximumMessagesPerPoll: Integer read write
Message
The message format used to decode the events received. Because events are handled based on the ClientID stored in the message, it is recommended to assign the same message that you are also using for your regular communication or to manually sync the ClientID between the two messages.
property Message: TROMessage read write
Notification protected override (declared in TROChannelAwareComponent)
Forwards notification messages to all owned components.
procedure Notification(AComponent: TComponent; Operation: TOperation)
Parameters:
- AComponent: component
- Operation: operation
OnActivate
Fired when the event receiver has been activated and will start receiving events.
property OnActivate: TNotifyEvent read write
OnDeactivate
Fired when the event receiver has been deactivated and will stop receiving events.
property OnDeactivate: TNotifyEvent read write
OnPollException
Fired when the event receiver has encountered an error while polling for events.
Because event polling happens in a background thread, exceptions that occur during polling will not automatically bubble up to the main application and show an exception dialog. As such, it is important to handle this event of the Event Receiver in order to be notified of any problems that might arise during event polling.
property OnPollException: TROOnEventExceptionEvent read write
delegate: procedure OnPollException(Sender: TObject; anException: Exception)
OnTimerTick
procedure OnTimerTick(Dummy: Cardinal)
Parameters:
- Dummy:
RegisterEventHandler
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure RegisterEventHandler(const anEventID: string; const anEventHandler: TObject)
Parameters:
- anEventID: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandler: array of classes which implements event syncs interfaces.
RegisterEventHandlers (array of string, array of TObject) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure RegisterEventHandlers(const anEventIDs: array of string; const anEventHandlers: array of TObject)
Parameters:
- anEventIDs: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandlers: array of classes which implements event syncs interfaces.
ReleaseObject
Takes away the hold of anObject
set by RetainObject.
procedure ReleaseObject(const anObject: TObject)
Parameters:
- anObject: Object to release
RetainObject
Sets the hold of anObject
.
procedure RetainObject(const anObject: TObject)
Parameters:
- anObject: Object to hold
ROFreeNotification (declared in TROComponent)
Forwards notification messages to all owned components.
procedure ROFreeNotification(aComponent: TComponent)
Parameters:
- aComponent: component
RORemoveFreeNotification (declared in TROComponent)
Forwards notification messages to all owned components.
procedure RORemoveFreeNotification(aComponent: TComponent)
Parameters:
- aComponent: component
SendRemoveNotification protected (declared in TROComponent)
Forwards notification messages to all owned components.
procedure SendRemoveNotification(aComponent: TComponent)
Parameters:
- aComponent: component
ServersideRegisterEvents
property ServersideRegisterEvents: Boolean read write
ServiceName
The name of the Service from where events are to be received.
property ServiceName: string read write
SynchronizeInvoke
Whether events will be fired in the context of the main VCL thread (true, default) or not (false). By default, the Event Receiver will synchronize all events back to the main VCL thread, which makes it safe to access the user interface from your event handler code.
If UI access is not needed, and your event handlers are implemented in a thread-safe fashion, you can disable this property to gain performance by having events fire in the thread where they were received. Also, if you are performing lengthy operations in your event handlers, your UI might freeze while event handlers execute and block the main VCL thread (which is responsible for user interaction); disable this property to avoid that.
property SynchronizeInvoke: Boolean read write
UnregisterEventHandler (TObject) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandler(const anEventHandler: TObject)
Parameters:
- anEventHandler: An array of objects that were registered to receive the events.
UnregisterEventHandler (string, TObject) overload
procedure UnregisterEventHandler(const anEventID: string; const anEventHandler: TObject)
Parameters:
- anEventID:
- anEventHandler:
UnregisterEventHandler (string) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandler(const anEventIDs: string)
Parameters:
- anEventIDs: An array of objects that were registered to receive the events.
UnregisterEventHandlers (array of string) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandlers(const anEventIDs: array of string)
Parameters:
- anEventIDs: An array of objects that were registered to receive the events.
UnregisterEventHandlersByObject
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandlersByObject(const anEventHandlers: array of TObject)
Parameters:
- anEventHandlers: An array of objects that were registered to receive the events.
Active
Specifies whether the event receiver is currently processing events (true), or not (false).
This property must be set to true before any actual event processing will occur.
property Active: Boolean read write
AsyncPolling
property AsyncPolling: Boolean read write
Channel
The channel to be used for receiving events. Unless the channel type is explicitly designed for consecutive requests (such as the Super TCP Channel), it is recommended that you use a different channel instance from the one used for your regular communication.
property Channel: TROTransportChannel read write
ClientID
The unique identifier for the client connected to the service.
property ClientID: TGUID read
Interval
The interval, in milliseconds, at which the receiver will poll for new events. Default is 30,000 (30 seconds).
property Interval: Integer read write
LegacyEvents
Enables or disables legacy events mode for the receiver. Default is true. Legacy mode is less secure and is not compatible with .NET servers. It is recommended to set this property to false for new projects.
property LegacyEvents: Boolean read write
MaximumMessagesPerPoll
Gets or sets the maximum number of messages to receive with one message call.
If a poll indicates that more messages have been queued than could be retrieved in a single call, subsequent calls are initiated immediately to receive all messages.
property MaximumMessagesPerPoll: Integer read write
Message
The message format used to decode the events received. Because events are handled based on the ClientID stored in the message, it is recommended to assign the same message that you are also using for your regular communication or to manually sync the ClientID between the two messages.
property Message: TROMessage read write
ServersideRegisterEvents
property ServersideRegisterEvents: Boolean read write
ServiceName
The name of the Service from where events are to be received.
property ServiceName: string read write
SynchronizeInvoke
Whether events will be fired in the context of the main VCL thread (true, default) or not (false). By default, the Event Receiver will synchronize all events back to the main VCL thread, which makes it safe to access the user interface from your event handler code.
If UI access is not needed, and your event handlers are implemented in a thread-safe fashion, you can disable this property to gain performance by having events fire in the thread where they were received. Also, if you are performing lengthy operations in your event handlers, your UI might freeze while event handlers execute and block the main VCL thread (which is responsible for user interaction); disable this property to avoid that.
property SynchronizeInvoke: Boolean read write
constructor Create override
Standard component constructor
constructor Create(aOwner: TComponent)
Parameters:
- aOwner: Owner
Activate
Activates and will start receiving events.
procedure Activate
AreEventHandlersRegistered
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
function AreEventHandlersRegistered(const anEventIDs: array of string; const anEventHandlers: array of TObject): Boolean
Parameters:
- anEventIDs: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandlers: array of classes which implements event syncs interfaces.
Assign override
Copies the contents of another, similar object.
procedure Assign(Source: TPersistent)
Parameters:
- Source: Instance whose properties will be copied
CheckProperties
Validates the event receiver properties.
procedure CheckProperties(CheckServiceName: Boolean)
Parameters:
- CheckServiceName: Validate ServiceName or not
Deactivate
Deactivates and will stop receiving events.
procedure Deactivate
Dispatch protected reintroduce
This method is called whenever the client channel receives an event from the server. If your client channel supports the IROActiveEventChannel interface, you will receive only one event at a time and the aStream
parameter will hold the IROMessage data, otherwise aStream
may contain multiple events data.
procedure Dispatch(aStream: TStream; aCaller: TThread)
Parameters:
- aStream: Stream that contains the event data
- aCaller: Thread that calls this method
EventHandlersIsRegistered deprecated
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
function EventHandlersIsRegistered(const anEventIDs: array of string; const anEventHandlers: array of TObject): Boolean
Parameters:
- anEventIDs: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandlers: array of classes which implements event syncs interfaces.
FireEvents protected virtual
procedure FireEvents(EventsDataStream: TStream)
Parameters:
- EventsDataStream:
GetObject protected
Returns self.
function GetObject: TObject
Invoke_GetEventsData protected
This method is used to acquire events data from the server. It is used if the client channel does not support the IROActiveEventChannel and cannot notify the TROEventReceiver about incoming events data itself, in this case, TROEventReceiver calls this method in a background thread to obtain events from the server. When this method receives new events, it stores them in the EventsData stream and returns the received events count.
function Invoke_GetEventsData(out EventsData: TROBinaryMemoryStream): Integer
Parameters:
- EventsData: Binary stream that holds the event data
Invoke_RegisterEventClient protected
Notifies the server that the client can handle event types specified by the EventTypes
parameter.
procedure Invoke_RegisterEventClient(const EventTypes: string)
Parameters:
- EventTypes: Holds a comma-separated list of event types that the client can recieve from the server.
Invoke_UnregisterEventClient protected
Notifies the server that the client cannot receive events with the specified types any more.
procedure Invoke_UnregisterEventClient(const EventTypes: string)
Parameters:
- EventTypes: Holds a comma-separated list of event types that the client cannot recieve from the server anymore.
IsEventHandlerRegistered
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
function IsEventHandlerRegistered(const anEventID: string; const anEventHandler: TObject): Boolean
Parameters:
- anEventID: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandler: array of classes which implements event syncs interfaces.
IsRetained
Returns true if anObject
is retained by Self
.
function IsRetained(const anObject: TObject): Boolean
Parameters:
- anObject: Object to check
Notification protected override (declared in TROChannelAwareComponent)
Forwards notification messages to all owned components.
procedure Notification(AComponent: TComponent; Operation: TOperation)
Parameters:
- AComponent: component
- Operation: operation
OnTimerTick
procedure OnTimerTick(Dummy: Cardinal)
Parameters:
- Dummy:
RegisterEventHandler
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure RegisterEventHandler(const anEventID: string; const anEventHandler: TObject)
Parameters:
- anEventID: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandler: array of classes which implements event syncs interfaces.
RegisterEventHandlers (array of string, array of TObject) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure RegisterEventHandlers(const anEventIDs: array of string; const anEventHandlers: array of TObject)
Parameters:
- anEventIDs: An array of strings containing the IDs of the events you want to subscribe to. Event ID constants are generated in the Intf unit of your library for each defined Event Sink, and start with EID.
- anEventHandlers: array of classes which implements event syncs interfaces.
ReleaseObject
Takes away the hold of anObject
set by RetainObject.
procedure ReleaseObject(const anObject: TObject)
Parameters:
- anObject: Object to release
RetainObject
Sets the hold of anObject
.
procedure RetainObject(const anObject: TObject)
Parameters:
- anObject: Object to hold
ROFreeNotification (declared in TROComponent)
Forwards notification messages to all owned components.
procedure ROFreeNotification(aComponent: TComponent)
Parameters:
- aComponent: component
RORemoveFreeNotification (declared in TROComponent)
Forwards notification messages to all owned components.
procedure RORemoveFreeNotification(aComponent: TComponent)
Parameters:
- aComponent: component
SendRemoveNotification protected (declared in TROComponent)
Forwards notification messages to all owned components.
procedure SendRemoveNotification(aComponent: TComponent)
Parameters:
- aComponent: component
UnregisterEventHandler (TObject) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandler(const anEventHandler: TObject)
Parameters:
- anEventHandler: An array of objects that were registered to receive the events.
UnregisterEventHandler (string, TObject) overload
procedure UnregisterEventHandler(const anEventID: string; const anEventHandler: TObject)
Parameters:
- anEventID:
- anEventHandler:
UnregisterEventHandler (string) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandler(const anEventIDs: string)
Parameters:
- anEventIDs: An array of objects that were registered to receive the events.
UnregisterEventHandlers (array of string) overload
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandlers(const anEventIDs: array of string)
Parameters:
- anEventIDs: An array of objects that were registered to receive the events.
UnregisterEventHandlersByObject
Used to unregister one or more event handlers previously registered via RegisterEventHandlers.
procedure UnregisterEventHandlersByObject(const anEventHandlers: array of TObject)
Parameters:
- anEventHandlers: An array of objects that were registered to receive the events.
OnActivate
Fired when the event receiver has been activated and will start receiving events.
property OnActivate: TNotifyEvent read write
OnDeactivate
Fired when the event receiver has been deactivated and will stop receiving events.
property OnDeactivate: TNotifyEvent read write
OnPollException
Fired when the event receiver has encountered an error while polling for events.
Because event polling happens in a background thread, exceptions that occur during polling will not automatically bubble up to the main application and show an exception dialog. As such, it is important to handle this event of the Event Receiver in order to be notified of any problems that might arise during event polling.
property OnPollException: TROOnEventExceptionEvent read write
delegate: procedure OnPollException(Sender: TObject; anException: Exception)