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 | }
|
---|