[1146] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Text;
|
---|
| 4 | using System.Windows.Forms;
|
---|
| 5 |
|
---|
| 6 | namespace IndianHealthService.BMXNet
|
---|
| 7 | {
|
---|
| 8 | /// <summary>
|
---|
| 9 | /// All async communications with RPMS is performed through the RemoteEventService which
|
---|
| 10 | /// is found by calling aRemoteSession.EventServices.
|
---|
| 11 | /// </summary>
|
---|
| 12 | /// <remarks>
|
---|
| 13 | /// <list>
|
---|
| 14 | /// <para>By default remote events are asynchronous and are not on the UI thread. The development
|
---|
| 15 | /// must handed the events propertly and if interacting with a user interface control must use
|
---|
| 16 | /// Invoke(). As a convinenence, InvokedControl can be set to any non-disposed Control and the
|
---|
| 17 | /// event service is use Invoke() so that the event is triggered on the UI thread</para>
|
---|
| 18 | /// <para>The Event timer, IsEventPollingEnabled and EventPollingInterval, is used by the Async RPC calls
|
---|
| 19 | /// and is automattically turned on with IsEventPollingEnabled. If the developer turns on polling or
|
---|
| 20 | /// changes the EventPollingInterval to be a long period, then the Async RPC calls will not respond in
|
---|
| 21 | /// a timely manner if at all.
|
---|
| 22 | /// </para>
|
---|
| 23 | /// </list>
|
---|
| 24 | /// </remarks>
|
---|
| 25 | public interface RemoteEventService
|
---|
| 26 | {
|
---|
| 27 | /// <summary>
|
---|
| 28 | /// This event is triggered when an event named anEventType is published and the
|
---|
| 29 | /// receiver has a subscription. Remember that this event is not on the UI-thread unless InvokedControl is properly set.
|
---|
| 30 | /// </summary>
|
---|
| 31 | event EventHandler<RemoteEventArgs> RpmsEvent;
|
---|
| 32 |
|
---|
| 33 | /// <summary>
|
---|
| 34 | /// This event is triggered every time the event timer is triggered, based on the EventPollingInterval.
|
---|
| 35 | /// Remember that this event is not on the UI-thread unless InvokedControl is properly set.
|
---|
| 36 | /// </summary>
|
---|
| 37 | /// <remarks>
|
---|
| 38 | /// Respond quickly to this event.
|
---|
| 39 | /// </remarks>
|
---|
| 40 | event EventHandler TimerEvent;
|
---|
| 41 |
|
---|
| 42 | /// <summary>
|
---|
| 43 | /// Set InvokedControl to a form or control of your WinForm application or EHR/VueCentric component that
|
---|
| 44 | /// will live the lifetime of your RemoteSession. The RemoteEventServices will Invoke() on the InvokedControl
|
---|
| 45 | /// to ensure all events are triggered on the UI thread.
|
---|
| 46 | /// </summary>
|
---|
| 47 | Control InvokedControl { get; set; }
|
---|
| 48 |
|
---|
| 49 |
|
---|
| 50 | /// <summary>
|
---|
| 51 | /// Subscribe to an event named anEventType. These events are trigger exclusivley by other BMXNet remote services and
|
---|
| 52 | /// travel from client-to-server-to-client. Once subscribed, the RemoteSession will poll based on the EventPollingInterval to
|
---|
| 53 | /// see if a server-side event is waiting to be triggered on the client.
|
---|
| 54 | /// </summary>
|
---|
| 55 | /// <param name="anEventType">The name of the event to subscribe to</param>
|
---|
| 56 | /// <returns>1 if successful, otherwise it's an error. Refer to KIDS source for error codes.</returns>
|
---|
| 57 | int Subscribe(String anEventType);
|
---|
| 58 |
|
---|
| 59 | /// <summary>
|
---|
| 60 | /// Unsubscribe from an event named anEventType. Once unsubscribed, published events named anEventType will no longer
|
---|
| 61 | /// trigger an event for this RemoteSession.
|
---|
| 62 | /// </summary>
|
---|
| 63 | /// <param name="anEventType">The name of the event to unsubscribe from</param>
|
---|
| 64 | /// <returns>1 if successful, otherwise it's an error. Refer to KIDS source for error codes.</returns>
|
---|
| 65 | int Unsubscribe(String anEventType);
|
---|
| 66 |
|
---|
| 67 | /// <summary>
|
---|
| 68 | /// Access to a RemoteEventService also allows you to publish your own events. Publishing is done through design and
|
---|
| 69 | /// documentation to notify other developers what events you will trigger. An event is published, or triggered, by using TriggerEvent
|
---|
| 70 | /// with the name of the event, an optional event specific string with data, and whether or not the publisher, if subsubscribed,
|
---|
| 71 | /// wants the event published to them.
|
---|
| 72 | /// </summary>
|
---|
| 73 | /// <param name="anEventType">Name of the event to publish</param>
|
---|
| 74 | /// <param name="aParameter">An optional string with event specific data</param>
|
---|
| 75 | /// <param name="raiseBack">Set to True if the publisher of anEventType, that is also a subscriber to anEventType,
|
---|
| 76 | /// also wants the event to be triggered back to them</param>
|
---|
| 77 | /// <returns></returns>
|
---|
| 78 | int TriggerEvent(String anEventType, String aParameter,bool raiseBack);
|
---|
| 79 |
|
---|
| 80 | /// <summary>
|
---|
| 81 | /// EventPolling is used for RemoteService events and Async RPC calls. IsEventPollingEnabled is used
|
---|
| 82 | /// to turn polling on and off: True for on and False for off. The Async RPC framework and remote event service
|
---|
| 83 | /// needs polling to be turned on.
|
---|
| 84 | /// </summary>
|
---|
| 85 | /// <remarks>
|
---|
| 86 | /// If Async RPC's or remote events are not working debug the RemoteEventService to verify polling is enabled
|
---|
| 87 | /// and configured.
|
---|
| 88 | /// </remarks>
|
---|
| 89 | /// <example>
|
---|
| 90 | /// If using Async RPC or remote service events activate and configure the timer when your applications starts
|
---|
| 91 | /// <code>
|
---|
| 92 | /// ... //Poll every 10000 ms, or 10 seconds
|
---|
| 93 | /// this.RemoteSession.EventServices.EventPollingInterval=10000;
|
---|
| 94 | /// this.RemoteSession.EventServices.IsEventPollingEnabled=True;
|
---|
| 95 | /// ...
|
---|
| 96 | /// ... //Perhaps in another part of your application you have a small active Chat Window
|
---|
| 97 | /// ... //Increase the frequency of polling by decreasing the EventPollingInterval to every 2 seconds
|
---|
| 98 | /// this.RemoteSession.EventServices.EventPollingInterval=2000;
|
---|
| 99 | /// </code>
|
---|
| 100 | /// </example>
|
---|
| 101 | bool IsEventPollingEnabled { get; set; }
|
---|
| 102 |
|
---|
| 103 | /// <summary>
|
---|
| 104 | /// The number of milliseconds (ms) to wait before polling. If a polling event is currently being processed
|
---|
| 105 | /// when a second event is trigger, the second event is skipped. It's recommended to keep this interval at
|
---|
| 106 | /// 5000 (5 seconds) or higher.
|
---|
| 107 | /// </summary>
|
---|
| 108 | int EventPollingInterval { get; set; }
|
---|
| 109 | }
|
---|
| 110 | }
|
---|