[1227] | 1 | package gov.va.med.edp.util {
|
---|
| 2 | import flash.events.TimerEvent;
|
---|
| 3 | import flash.utils.Timer;
|
---|
| 4 | import flash.utils.getTimer;
|
---|
| 5 |
|
---|
| 6 | import gov.va.med.edp.control.ClearUnsavedViewsModelEvent;
|
---|
| 7 | import gov.va.med.edp.model.TrackingModelLocator;
|
---|
| 8 |
|
---|
| 9 | import mx.core.Application;
|
---|
| 10 | import mx.core.SoundAsset;
|
---|
| 11 | public class InactivityTimeout {
|
---|
| 12 | // private var timeOutInterval:uint;
|
---|
| 13 | private var confirmInterval:uint;
|
---|
| 14 | private var sessionTimeOutTimer:Timer;
|
---|
| 15 |
|
---|
| 16 | private var confirmTimer:Timer;
|
---|
| 17 | private var countdownTimer:Timer = new Timer(1000)
|
---|
| 18 | private var lastActivityTime:Number = 0;
|
---|
| 19 | private var counter:uint = 0;
|
---|
| 20 | private var timersStarted:Boolean = false;
|
---|
| 21 |
|
---|
| 22 | [Embed(source="Timeout.mp3")]
|
---|
| 23 | private var alertSound: Class;
|
---|
| 24 |
|
---|
| 25 | [Bindable]
|
---|
| 26 | public var status:String = "";
|
---|
| 27 |
|
---|
| 28 | private var model:TrackingModelLocator = TrackingModelLocator.getInstance();
|
---|
| 29 |
|
---|
| 30 | public function start():void {
|
---|
| 31 | sessionTimeOutTimer = new Timer(model.session.timeOut);
|
---|
| 32 | sessionTimeOutTimer.addEventListener(TimerEvent.TIMER, onTimeOutTimer);
|
---|
| 33 |
|
---|
| 34 | confirmTimer = new Timer(model.session.countDown);
|
---|
| 35 | confirmTimer.addEventListener(TimerEvent.TIMER, onConfirmTimer);
|
---|
| 36 | countdownTimer.addEventListener(TimerEvent.TIMER, onCountdownTimer);
|
---|
| 37 |
|
---|
| 38 | confirmInterval = model.session.countDown;
|
---|
| 39 |
|
---|
| 40 | Application.application.addEventListener("keyDown", activity);
|
---|
| 41 | Application.application.addEventListener("mouseMove", activity);
|
---|
| 42 |
|
---|
| 43 | sessionTimeOutTimer.start();
|
---|
| 44 | timersStarted = true;
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | public function reset():void
|
---|
| 48 | {
|
---|
| 49 | lastActivityTime = getTimer();
|
---|
| 50 | //For some reason the reset method in the Timer class is flaky..Not reliable..
|
---|
| 51 | if (sessionTimeOutTimer != null) {
|
---|
| 52 | sessionTimeOutTimer.stop();
|
---|
| 53 | sessionTimeOutTimer.start();
|
---|
| 54 | }
|
---|
| 55 |
|
---|
| 56 | if (timersStarted && confirmTimer.running) {
|
---|
| 57 | confirmTimer.stop();
|
---|
| 58 | countdownTimer.stop();
|
---|
| 59 | counter = 0;
|
---|
| 60 | status = "";
|
---|
| 61 | }
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | private function activity(event:Event):void {
|
---|
| 65 | reset();
|
---|
| 66 | }
|
---|
| 67 |
|
---|
| 68 | private function onTimeOutTimer(event:TimerEvent):void
|
---|
| 69 | {
|
---|
| 70 | confirmTimer.start();
|
---|
| 71 | countdownTimer.start();
|
---|
| 72 | }
|
---|
| 73 |
|
---|
| 74 |
|
---|
| 75 | private function onConfirmTimer(event:TimerEvent):void
|
---|
| 76 | {
|
---|
| 77 | status = "Session timed out..Redirecting to Logout...";
|
---|
| 78 | //Make sure you clear out any unsaved views
|
---|
| 79 | //other wise the javascript will not let you navigate out..
|
---|
| 80 | var clearUnsavedViewsEvent: ClearUnsavedViewsModelEvent = new ClearUnsavedViewsModelEvent(ClearUnsavedViewsModelEvent.EVENT_CLEAR_UNSAVED_VIEWS);
|
---|
| 81 | clearUnsavedViewsEvent.dispatch();
|
---|
| 82 |
|
---|
| 83 | Application.application.removeEventListener("keyDown", reset);
|
---|
| 84 | Application.application.removeEventListener("mouseMove", reset);
|
---|
| 85 |
|
---|
| 86 | confirmTimer.stop();
|
---|
| 87 | countdownTimer.stop();
|
---|
| 88 |
|
---|
| 89 | model.logout();
|
---|
| 90 | }
|
---|
| 91 |
|
---|
| 92 | private function onCountdownTimer(event:TimerEvent):void
|
---|
| 93 | {
|
---|
| 94 | counter++;
|
---|
| 95 | var seconds:String = String(confirmInterval / 1000 - counter);
|
---|
| 96 |
|
---|
| 97 | trace("Counter: ", counter);
|
---|
| 98 | if (counter == 1) playAlertSound();
|
---|
| 99 | status = "EDIS has been idle and will close in " + seconds + " seconds.";
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 | private function playAlertSound(): void
|
---|
| 103 | {
|
---|
| 104 | var chime: SoundAsset = new alertSound() as SoundAsset;
|
---|
| 105 | chime.play(0,1);
|
---|
| 106 | }
|
---|
| 107 | }
|
---|
| 108 | }
|
---|