nutella_framework 0.4.23 → 0.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/framework_components/monitoring-bot/monitoring-bot.rb +11 -2
  4. data/framework_components/monitoring-interface/.gitignore +2 -0
  5. data/framework_components/monitoring-interface/README.md +1 -0
  6. data/framework_components/monitoring-interface/bower.json +29 -0
  7. data/framework_components/monitoring-interface/bower_components/bower-mqttws/.bower.json +23 -0
  8. data/framework_components/monitoring-interface/bower_components/bower-mqttws/bower.json +14 -0
  9. data/framework_components/monitoring-interface/bower_components/bower-mqttws/mqttws31.js +2081 -0
  10. data/framework_components/monitoring-interface/bower_components/bower-mqttws/readme.md +4 -0
  11. data/framework_components/monitoring-interface/bower_components/nutella_lib/.bower.json +37 -0
  12. data/framework_components/monitoring-interface/bower_components/nutella_lib/LICENSE +21 -0
  13. data/framework_components/monitoring-interface/bower_components/nutella_lib/README.md +15 -0
  14. data/framework_components/monitoring-interface/bower_components/nutella_lib/bower.json +28 -0
  15. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/browser/mqtt_client_hello_world.html +23 -0
  16. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/browser/nutella_hello_world.html +52 -0
  17. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/node/mqtt_client_hello_world.js +14 -0
  18. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/node/nutella_hello_world.js +38 -0
  19. data/framework_components/monitoring-interface/bower_components/nutella_lib/nutella_lib.js +789 -0
  20. data/framework_components/monitoring-interface/bower_components/nutella_lib/package.json +30 -0
  21. data/framework_components/monitoring-interface/css/Monitoring Interface.html +215 -0
  22. data/framework_components/monitoring-interface/css/Monitoring Interface_files/animations.js +27 -0
  23. data/framework_components/monitoring-interface/css/Monitoring Interface_files/application-view-controller.js +232 -0
  24. data/framework_components/monitoring-interface/css/Monitoring Interface_files/applications-model.js +61 -0
  25. data/framework_components/monitoring-interface/css/Monitoring Interface_files/bootstrap.min.js +7 -0
  26. data/framework_components/monitoring-interface/css/Monitoring Interface_files/cursor.css +7 -0
  27. data/framework_components/monitoring-interface/css/Monitoring Interface_files/d3.v3.min.js +5 -0
  28. data/framework_components/monitoring-interface/css/Monitoring Interface_files/graphics.js +156 -0
  29. data/framework_components/monitoring-interface/css/Monitoring Interface_files/grid-layout.js +103 -0
  30. data/framework_components/monitoring-interface/css/Monitoring Interface_files/highlight.min.js +2 -0
  31. data/framework_components/monitoring-interface/css/Monitoring Interface_files/instance-view-controller.js +104 -0
  32. data/framework_components/monitoring-interface/css/Monitoring Interface_files/jquery-1.10.0.min.js +6 -0
  33. data/framework_components/monitoring-interface/css/Monitoring Interface_files/notification-center.js +63 -0
  34. data/framework_components/monitoring-interface/css/Monitoring Interface_files/notifications.js +14 -0
  35. data/framework_components/monitoring-interface/css/Monitoring Interface_files/page.css +33 -0
  36. data/framework_components/monitoring-interface/css/Monitoring Interface_files/radial-layout.js +175 -0
  37. data/framework_components/monitoring-interface/css/Monitoring Interface_files/tab-table.js +8 -0
  38. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-application.css +0 -0
  39. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-application.js +320 -0
  40. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-connection-view.css +10 -0
  41. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-connection-view.js +426 -0
  42. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-element.js +205 -0
  43. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-notification.js +94 -0
  44. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-tab.js +229 -0
  45. data/framework_components/monitoring-interface/css/Monitoring Interface_files/underscore-min.js +5 -0
  46. data/framework_components/monitoring-interface/css/Monitoring Interface_files/view-controller.js +68 -0
  47. data/framework_components/monitoring-interface/css/Monitoring Interface_files/window-view-controller.js +169 -0
  48. data/framework_components/monitoring-interface/css/alerts.css +3 -0
  49. data/framework_components/monitoring-interface/css/bootstrap.min.css +5 -0
  50. data/framework_components/monitoring-interface/css/cursor.css +7 -0
  51. data/framework_components/monitoring-interface/css/highlight.default.min.css +1 -0
  52. data/framework_components/monitoring-interface/css/page.css +41 -0
  53. data/framework_components/monitoring-interface/css/ui-application.css +0 -0
  54. data/framework_components/monitoring-interface/css/ui-connection-view.css +10 -0
  55. data/framework_components/monitoring-interface/css/ui-legend-view.css +7 -0
  56. data/framework_components/monitoring-interface/data/alert.json +8 -0
  57. data/framework_components/monitoring-interface/data/data.json +2118 -0
  58. data/framework_components/monitoring-interface/data/data2.json +814 -0
  59. data/framework_components/monitoring-interface/data/data3.json +823 -0
  60. data/framework_components/monitoring-interface/data/data4.json +848 -0
  61. data/framework_components/monitoring-interface/data/message.json +999 -0
  62. data/framework_components/monitoring-interface/gulpfile.js +29 -0
  63. data/framework_components/monitoring-interface/img/arrow_white.svg +120 -0
  64. data/framework_components/monitoring-interface/img/arrow_white_right.svg +104 -0
  65. data/framework_components/monitoring-interface/img/back.svg +164 -0
  66. data/framework_components/monitoring-interface/img/cross_red_border_white.svg +143 -0
  67. data/framework_components/monitoring-interface/img/cross_red_border_white_mouseover.svg +143 -0
  68. data/framework_components/monitoring-interface/img/email.svg +89 -0
  69. data/framework_components/monitoring-interface/img/email_highlighted.svg +89 -0
  70. data/framework_components/monitoring-interface/index.html +144 -0
  71. data/framework_components/monitoring-interface/js/d3/layout/grid-layout.js +103 -0
  72. data/framework_components/monitoring-interface/js/d3/layout/radial-layout.js +184 -0
  73. data/framework_components/monitoring-interface/js/d3/plugin/graphics.js +156 -0
  74. data/framework_components/monitoring-interface/js/d3/plugin/tab-table.js +8 -0
  75. data/framework_components/monitoring-interface/js/d3/ui/animations.js +27 -0
  76. data/framework_components/monitoring-interface/js/d3/ui/ui-application.js +471 -0
  77. data/framework_components/monitoring-interface/js/d3/ui/ui-connection-view.js +847 -0
  78. data/framework_components/monitoring-interface/js/d3/ui/ui-element.js +245 -0
  79. data/framework_components/monitoring-interface/js/d3/ui/ui-legend.js +174 -0
  80. data/framework_components/monitoring-interface/js/d3/ui/ui-notification.js +90 -0
  81. data/framework_components/monitoring-interface/js/d3/ui/ui-tab.js +309 -0
  82. data/framework_components/monitoring-interface/js/lib/JSXTransformer-0.12.2.js +15199 -0
  83. data/framework_components/monitoring-interface/js/lib/bootstrap.min.js +7 -0
  84. data/framework_components/monitoring-interface/js/lib/d3.v3.min.js +5 -0
  85. data/framework_components/monitoring-interface/js/lib/highlight.min.js +2 -0
  86. data/framework_components/monitoring-interface/js/lib/jquery-1.10.0.min.js +6 -0
  87. data/framework_components/monitoring-interface/js/lib/nutella_lib.js +5121 -0
  88. data/framework_components/monitoring-interface/js/lib/react-with-addons-0.12.2.js +19822 -0
  89. data/framework_components/monitoring-interface/js/lib/underscore-min.js +5 -0
  90. data/framework_components/monitoring-interface/js/model/alerts-model.js +74 -0
  91. data/framework_components/monitoring-interface/js/model/applications-model.js +78 -0
  92. data/framework_components/monitoring-interface/js/model/messages-model.js +112 -0
  93. data/framework_components/monitoring-interface/js/notification/notification-center.js +63 -0
  94. data/framework_components/monitoring-interface/js/notification/notifications.js +21 -0
  95. data/framework_components/monitoring-interface/js/react/dist/ui-alerts.js +178 -0
  96. data/framework_components/monitoring-interface/js/react/dist/ui-message-send.js +389 -0
  97. data/framework_components/monitoring-interface/js/react/dist/ui-messages.js +103 -0
  98. data/framework_components/monitoring-interface/js/react/src/ui-alerts.js +178 -0
  99. data/framework_components/monitoring-interface/js/react/src/ui-message-send.js +389 -0
  100. data/framework_components/monitoring-interface/js/react/src/ui-messages.js +103 -0
  101. data/framework_components/monitoring-interface/js/view-controller/application-view-controller.js +256 -0
  102. data/framework_components/monitoring-interface/js/view-controller/instance-view-controller.js +112 -0
  103. data/framework_components/monitoring-interface/js/view-controller/view-controller.js +74 -0
  104. data/framework_components/monitoring-interface/js/view-controller/window-view-controller.js +169 -0
  105. data/framework_components/monitoring-interface/nutella.json +6 -0
  106. data/framework_components/order.json +1 -0
  107. data/framework_components/roomcast-bot/roomcast_bot.rb +139 -117
  108. data/framework_components/roomcast-channel-creator/dist/app.js +9 -7
  109. data/framework_components/roomcast-channel-creator/index.html +1 -1
  110. data/framework_components/roomcast-channel-creator/src/app/components/main.js +8 -6
  111. data/framework_components/roomcast-package-creator/dist/app.js +4 -4
  112. data/framework_components/roomcast-package-creator/index.html +1 -1
  113. data/framework_components/roomcast-package-creator/package.json +3 -3
  114. data/framework_components/roomcast-package-creator/src/app/components/ConfigurationsPanel.js +2 -2
  115. data/framework_components/roomcast-package-creator/src/app/components/PoolRow.js +1 -1
  116. data/framework_components/roomcast-teacher-controls/.gitignore +2 -0
  117. data/framework_components/roomcast-teacher-controls/README.md +9 -0
  118. data/framework_components/roomcast-teacher-controls/dist/app.js +38327 -0
  119. data/framework_components/roomcast-teacher-controls/dist/main.css +3052 -0
  120. data/framework_components/roomcast-teacher-controls/dist/nutella_lib.js +5121 -0
  121. data/framework_components/roomcast-teacher-controls/gulp/config.js +51 -0
  122. data/framework_components/roomcast-teacher-controls/gulp/tasks/browserify.js +77 -0
  123. data/framework_components/roomcast-teacher-controls/gulp/tasks/build.js +3 -0
  124. data/framework_components/roomcast-teacher-controls/gulp/tasks/css.js +7 -0
  125. data/framework_components/roomcast-teacher-controls/gulp/tasks/default.js +3 -0
  126. data/framework_components/roomcast-teacher-controls/gulp/tasks/fonts.js +7 -0
  127. data/framework_components/roomcast-teacher-controls/gulp/tasks/less.js +16 -0
  128. data/framework_components/roomcast-teacher-controls/gulp/tasks/mui-fonts.js +7 -0
  129. data/framework_components/roomcast-teacher-controls/gulp/tasks/nutella.js +7 -0
  130. data/framework_components/roomcast-teacher-controls/gulp/tasks/setWatch.js +5 -0
  131. data/framework_components/roomcast-teacher-controls/gulp/tasks/svgs.js +7 -0
  132. data/framework_components/roomcast-teacher-controls/gulp/tasks/watch.js +12 -0
  133. data/framework_components/roomcast-teacher-controls/gulp/util/bundleLogger.js +21 -0
  134. data/framework_components/roomcast-teacher-controls/gulp/util/handleErrors.js +15 -0
  135. data/framework_components/roomcast-teacher-controls/gulpfile.js +16 -0
  136. data/framework_components/roomcast-teacher-controls/index.html +51 -0
  137. data/framework_components/roomcast-teacher-controls/nutella.json +6 -0
  138. data/framework_components/roomcast-teacher-controls/package.json +38 -0
  139. data/framework_components/roomcast-teacher-controls/src/app/app.js +22 -0
  140. data/framework_components/roomcast-teacher-controls/src/app/components/ActivitiesGrid.js +87 -0
  141. data/framework_components/roomcast-teacher-controls/src/app/components/ActivityCard.js +141 -0
  142. data/framework_components/roomcast-teacher-controls/src/app/components/Channel.js +70 -0
  143. data/framework_components/roomcast-teacher-controls/src/app/components/Footer.js +34 -0
  144. data/framework_components/roomcast-teacher-controls/src/app/components/main.js +74 -0
  145. data/framework_components/roomcast-teacher-controls/src/less/main.less +186 -0
  146. data/framework_components/roomcast-teacher-controls/src/less/my_overrides.less +14 -0
  147. data/lib/commands/meta/run_command.rb +11 -9
  148. metadata +135 -2
@@ -13,165 +13,187 @@ puts 'Initializing RoomCast...'
13
13
  #channelsData_db = nutella.persist.get_json_object_store('channels-data')
14
14
 
15
15
  nutella.f.net.subscribe_to_all_runs('configs/update', lambda do |message, app_id, run_id, from|
16
+ new_configs = message
16
17
 
17
- new_configs = message
18
-
19
- puts 'configs/update:'
20
- puts new_configs
21
-
22
- # Update
23
- configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
24
- if new_configs != nil
25
- configs_db['configs'] = new_configs
26
- end
27
-
28
- puts 'Updated DB'
29
-
30
- # Notify Update
31
-
32
- # Notify change of all configs
33
- publish_configs_update(app_id, run_id, new_configs)
34
-
35
- # Notify possible change of current config
36
- configs = configs_db['configs']
37
- id = '%d' % configs_db['currentConfig']
38
- config = configs[id]
39
- publish_mapping_update(app_id, run_id, config['mapping'])
40
-
41
- end)
18
+ # Update
19
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
20
+ if new_configs != nil
21
+ configs_db['configs'] = new_configs
22
+ end
23
+
24
+ # Notify change of all configs
25
+ publish_configs_update(app_id, run_id, new_configs)
26
+
27
+ # Notify possible change of current config
28
+ configs = configs_db['configs']
29
+ id = '%d' % configs_db['currentConfig']
30
+ if id == nil
31
+ id = 1
32
+ end
33
+ config = configs[id]
34
+ publish_mapping_update(app_id, run_id, config['mapping'])
35
+ end)
42
36
 
43
37
  nutella.f.net.handle_requests_on_all_runs('configs/retrieve', lambda do |request, app_id, run_id, from|
44
- puts 'request: ' + request
45
- reply = {}
46
- if request == {}
47
- reply
48
- elsif request == 'all'
49
- configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
50
- reply = configs_db['configs']
51
- puts reply
52
- reply
53
- end
54
- end)
38
+ reply = {}
39
+ if request == {}
40
+ reply
41
+ elsif request == 'all'
42
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
43
+ reply = configs_db['configs']
44
+ if reply == nil
45
+ reply = {
46
+ "1"=> {
47
+ "name"=> "Default activity",
48
+ "mapping"=> [{
49
+ "family"=> "iPad",
50
+ "items"=> [{
51
+ "name"=> "",
52
+ "channels"=> []
53
+ }]
54
+ }, {
55
+ "family"=> "Mac",
56
+ "items"=> [{
57
+ "name"=> "",
58
+ "channels"=> []
59
+ }]
60
+ }]
61
+ }
62
+ }
63
+ configs_db['currentConfig'] = 1
64
+ end
65
+ reply
66
+ end
67
+ end)
55
68
 
56
69
  # 'mapping' is the current running configuration
57
70
  nutella.f.net.handle_requests_on_all_runs('mapping/retrieve', lambda do |request, app_id, run_id, from|
58
- puts 'request: ' + request
59
- reply = {}
60
- if request == {}
61
- reply
62
- elsif request == 'all'
63
- configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
64
- configs = configs_db['configs']
65
- id = '%d' % configs_db['currentConfig']
66
- config = configs[id]
67
- reply = config['mapping']
68
- puts reply
69
- reply
70
- end
71
- end)
71
+ reply = {}
72
+ if request == {}
73
+ reply
74
+ elsif request == 'all'
75
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
76
+ if configs_db == nil
77
+ reply = []
78
+ else
79
+ configs = configs_db['configs']
80
+ id = '%d' % configs_db['currentConfig']
81
+ config = configs[id]
82
+ reply = config['mapping']
83
+ end
84
+ reply
85
+ end
86
+ end)
72
87
 
73
88
  nutella.f.net.subscribe_to_all_runs('currentConfig/update', lambda do |message, app_id, run_id, from|
89
+ new_config = message
74
90
 
75
- new_config = message
76
-
77
- puts 'currentConfig/update:'
78
- puts new_config
91
+ # Update
92
+ if new_config != nil
93
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
94
+ configs_db['currentConfig'] = new_config
95
+ end
79
96
 
80
- # Update
81
- if new_config != nil
82
- configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
83
- configs_db['currentConfig'] = new_config
84
- end
85
-
86
- puts 'Updated DB'
87
-
88
- # Notify Update
89
- publish_current_config_update(app_id, run_id, new_config)
90
-
91
- end)
97
+ # Notify Update
98
+ publish_current_config_update(app_id, run_id, new_config)
99
+ end)
92
100
 
93
101
  # Reacts to updates to config id by publishing the updated mapping
94
- nutella.f.net.subscribe_to_all_runs('currentConfig/updated', lambda do |message, app_id, run_id, from|
95
-
96
- begin
97
- configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
98
- configs = configs_db['configs']
99
- id = '%d' % configs_db['currentConfig']
100
- config = configs[id]
101
- publish_switch_config(app_id, run_id, config['mapping'])
102
- rescue => exception
103
- puts exception
104
- puts exception.backtrace
105
- raise exception
106
- end
107
-
108
- end)
102
+ nutella.f.net.subscribe_to_all_runs('currentConfig/ack_updated', lambda do |message, app_id, run_id, from|
103
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
104
+ configs = configs_db['configs']
105
+ id = '%d' % configs_db['currentConfig']
106
+ config = configs[id]
107
+ publish_switch_config(app_id, run_id, config['mapping'])
108
+
109
+ # Publish activity name on RoomCast API
110
+ activity_name = config['name']
111
+ publish_activity_update(app_id, run_id, activity_name)
112
+ end)
109
113
 
110
114
  nutella.f.net.handle_requests_on_all_runs('currentConfig/retrieve', lambda do |request, app_id, run_id, from|
111
- puts 'request: ' + request
112
- reply = {}
113
- configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
114
- reply = configs_db['currentConfig']
115
- puts reply
116
- reply
117
- end)
115
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
116
+ reply = configs_db['currentConfig']
117
+ if reply == nil
118
+ reply = 1
119
+ end
120
+ reply
121
+ end)
118
122
 
119
123
  nutella.f.net.subscribe_to_all_runs('channels/update', lambda do |message, app_id, run_id, from|
124
+ new_channels = message
120
125
 
121
- new_channels = message
126
+ # Update
127
+ if new_channels != nil
128
+ channels_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'channels')
129
+ channels_db['channels'] = new_channels
130
+ end
122
131
 
123
- # Update
124
- if new_channels != nil
125
- channels_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'channels')
126
- channels_db['channels'] = new_channels
127
- end
128
-
129
- # Notify Update
130
- publish_channels_update(app_id, run_id, new_channels)
131
-
132
- end)
132
+ # Notify Update
133
+ publish_channels_update(app_id, run_id, new_channels)
134
+ end)
133
135
 
134
136
  nutella.f.net.handle_requests_on_all_runs('channels/retrieve', lambda do |request, app_id, run_id, from|
135
- reply = {}
136
- if request == {}
137
- reply
138
- elsif request == 'all'
139
- puts 'requesting channels'
140
- channels_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'channels')
141
- reply = channels_db['channels']
142
- puts reply
143
- reply
144
- end
145
- end)
137
+ reply = {}
138
+ if request == {}
139
+ reply
140
+ elsif request == 'all'
141
+ channels_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'channels')
142
+ reply = channels_db['channels']
143
+ if reply == nil
144
+ reply = {}
145
+ end
146
+ reply
147
+ end
148
+ end)
146
149
 
147
150
  def publish_configs_update(app_id, run_id, configs)
148
151
  nutella.f.net.publish_to_run(app_id, run_id, 'configs/updated', configs)
149
- puts 'Sent configs/updated'
150
152
  end
151
153
 
152
- # Sends the update config id
154
+ # Sends the updated config id
153
155
  def publish_current_config_update(app_id, run_id, config_id)
154
- nutella.f.net.publish_to_run(app_id, run_id, 'currentConfig/updated', config_id)
155
- puts 'Sent currentConfig/updated'
156
+ nutella.f.net.publish_to_run(app_id, run_id, 'currentConfig/ack_updated', config_id)
156
157
  end
157
158
 
158
159
  # Sends the whole new current configuration
159
160
  def publish_switch_config(app_id, run_id, mapping)
160
161
  nutella.f.net.publish_to_run(app_id, run_id, 'currentConfig/switched', mapping)
161
- puts 'Sent currentConfig/switched'
162
162
  end
163
163
 
164
164
  # Sends the current config (mapping), which might have been updated
165
165
  def publish_mapping_update(app_id, run_id, mapping)
166
166
  nutella.f.net.publish_to_run(app_id, run_id, 'mapping/updated', mapping)
167
- puts 'Sent mapping/updated'
168
167
  end
169
168
 
170
169
  def publish_channels_update(app_id, run_id, channels)
171
170
  nutella.f.net.publish_to_run(app_id, run_id, 'channels/updated', channels)
172
- puts 'Sent channels/updated'
173
171
  end
174
172
 
173
+ ################ RoomCast API ################
174
+
175
+ # Returns the name of the current running activity
176
+ nutella.f.net.handle_requests_on_all_runs('roomcast/activity', lambda do |request, app_id, run_id, from|
177
+ reply = {}
178
+ configs_db = nutella.f.persist.get_run_json_object_store(app_id, run_id, 'configs')
179
+ id = '%d' % configs_db['currentConfig']
180
+ if id != nil
181
+ configs = configs_db['configs']
182
+ if configs != nil
183
+ config = configs[id]
184
+ reply = config['name']
185
+ end
186
+ end
187
+ reply
188
+ end)
189
+
190
+ # Notifies a change of current running activity
191
+ def publish_activity_update(app_id, run_id, activity_name)
192
+ nutella.f.net.publish_to_run(app_id, run_id, 'roomcast/new_activity', activity_name)
193
+ end
194
+
195
+ ##############################################
196
+
175
197
  puts 'Initialization complete.'
176
198
 
177
199
  # Just sit there waiting for messages to come