1+ import esp from 'esp-js' ;
2+ import _ from 'lodash' ;
3+ import moment from 'moment' ;
4+ import UpdateType from './updateType' ;
5+ import RegisteredModel from './registeredModel' ;
6+
7+ export default class DebugToolsModel extends esp . model . DisposableBase {
8+ constructor ( router ) {
9+ super ( ) ;
10+ this . _router = router ;
11+ this . _registeredModels = { } ;
12+ this . _eventsByNumber = { } ;
13+ this . _lastEvent = null ;
14+ this . _selectedEvent = null ;
15+ this . _updateType = UpdateType . none ;
16+ this . _eventCounter = 0 ;
17+ this . _timerSubscription = null ;
18+ this . addDisposable ( ( ) => {
19+ if ( this . _timerSubscription != null ) {
20+ clearInterval ( this . _timerSubscription ) ;
21+ }
22+ } ) ;
23+ this . _now = moment ( ) ;
24+ this . _shouldAutoScroll = true ;
25+ this . _shouldCaptureEvents = true ;
26+ this . _shouldLogToConsole = false ;
27+ }
28+ static get modelId ( ) {
29+ return 'esp-debugTools-modelId' ;
30+ }
31+ get updateType ( ) {
32+ return this . _updateType ;
33+ }
34+ get registeredModels ( ) {
35+ return _ . values ( this . _registeredModels ) ;
36+ }
37+ get lastEvent ( ) {
38+ return this . _lastEvent ;
39+ }
40+ get selectedEvent ( ) {
41+ return this . _selectedEvent ;
42+ }
43+ get now ( ) {
44+ return this . _now ;
45+ }
46+ get shouldAutoScroll ( ) {
47+ return this . _shouldAutoScroll ;
48+ }
49+ get totalEventCount ( ) {
50+ return this . _eventCounter ;
51+ }
52+ observeEvents ( ) {
53+ this . addDisposable ( this . _router . observeEventsOn ( this ) ) ;
54+ }
55+ preProcess ( ) {
56+ this . _updateType = UpdateType . none ;
57+ this . _lastEvent = null ;
58+ }
59+ @esp . observeEvent ( 'modelAdded' , esp . ObservationStage . preview )
60+ @esp . observeEvent ( 'modelRemoved' , esp . ObservationStage . preview )
61+ @esp . observeEvent ( 'eventPublished' , esp . ObservationStage . preview )
62+ _previewEvents ( event , context ) {
63+ if ( ! this . _shouldCaptureEvents ) {
64+ context . cancel ( ) ;
65+ }
66+ }
67+ @esp . observeEvent ( 'initEvent' )
68+ _onInitEvent ( ) {
69+ this . _startTimer ( ) ;
70+ }
71+ @esp . observeEvent ( 'modelAdded' )
72+ _onModelAdded ( event ) {
73+ this . _updateType = UpdateType . modelsChanged ;
74+ this . _addModel ( event . modelId ) ;
75+ }
76+ @esp . observeEvent ( 'modelRemoved' )
77+ _onModelRemoved ( event ) {
78+ this . _updateType = UpdateType . modelsChanged ;
79+ delete this . _registeredModels [ event . modelId ] ;
80+ }
81+ @esp . observeEvent ( 'eventPublished' )
82+ _onEventPublished ( event ) {
83+ this . _updateType = UpdateType . eventsChanged ;
84+ let registeredModel = this . _registeredModels [ event . modelId ] ;
85+ if ( ! registeredModel ) {
86+ registeredModel = this . _addModel ( event . modelId ) ;
87+ }
88+ this . _eventCounter ++ ;
89+ this . _lastEvent = registeredModel . eventPublished ( this . _eventCounter , event . modelId , event . eventType ) ;
90+ this . _eventsByNumber [ this . _eventCounter ] = this . _lastEvent ;
91+ if ( this . _shouldLogToConsole ) {
92+ console . log ( `[ESP-Event] ModelId:[${ event . modelId } ] EventType:[${ event . eventType } ]` , event . event ) ;
93+ }
94+ }
95+ _addModel ( modelId ) {
96+ this . _updateType = UpdateType . modelsChanged ;
97+ let registeredModel = this . _registeredModels [ modelId ] ;
98+ if ( registeredModel ) {
99+ throw new Error ( `model with id ${ modelId } already registered` ) ;
100+ }
101+ registeredModel = new RegisteredModel ( modelId ) ;
102+ this . _registeredModels [ modelId ] = registeredModel ;
103+ return registeredModel ;
104+ }
105+ @esp . observeEvent ( 'eventSelected' )
106+ _onEventSelected ( event ) {
107+ this . _shouldAutoScroll = false ;
108+ this . _selectedEvent = this . _eventsByNumber [ event . eventNumber ] ;
109+ }
110+ @esp . observeEvent ( 'disableAutoScroll' )
111+ _onDisableAutoScroll ( event ) {
112+ this . _shouldAutoScroll = false ;
113+ }
114+ @esp . observeEvent ( 'autoscrollToggled' )
115+ _onAutoscrollToggled ( event ) {
116+ this . _shouldAutoScroll = event . shouldAutoScroll ;
117+ }
118+ @esp . observeEvent ( 'captureEventsToggled' )
119+ _onCaptureEventsToggled ( event ) {
120+ this . _shouldCaptureEvents = event . shouldCaptureEvents ;
121+ }
122+ @esp . observeEvent ( 'logEventsConsoleToggled' )
123+ _onLogEventsConsoleToggled ( event ) {
124+ this . _shouldLogToConsole = event . shouldLogToConsole ;
125+ }
126+ @esp . observeEvent ( 'resetChart' )
127+ _onResetChart ( ) {
128+ this . _updateType = UpdateType . reset ;
129+ this . _registeredModels = { } ;
130+ }
131+ _startTimer ( ) {
132+ // start a timer so we can keep moving the chart forward
133+ this . _timerSubscription = setInterval ( ( ) => {
134+ this . _router . runAction ( ( ) => {
135+ this . _updateType = UpdateType . timeChanged ;
136+ this . _now = moment ( ) ;
137+ } ) ;
138+ } , 1000 ) ;
139+ }
140+ }
0 commit comments