UNPKG

5.46 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.sendUpdate = undefined;
7exports.close = close;
8
9var _nightingale = require('nightingale');
10
11var _nightingale2 = _interopRequireDefault(_nightingale);
12
13var _os = require('os');
14
15var _socket = require('socket.io-client');
16
17var _socket2 = _interopRequireDefault(_socket);
18
19var _argv = require('./argv');
20
21var _config = require('./config');
22
23var _manager = require('./manager');
24
25var _display = require('./commands/display');
26
27var display = _interopRequireWildcard(_display);
28
29var _screen = require('./commands/screen');
30
31var screen = _interopRequireWildcard(_screen);
32
33var _networkInterface = require('./utils/networkInterface');
34
35var _networkInterface2 = _interopRequireDefault(_networkInterface);
36
37var _detectBoard = require('./utils/detectBoard');
38
39var _detectBoard2 = _interopRequireDefault(_detectBoard);
40
41var _update = require('./update');
42
43var _package = require('../package.json');
44
45var _flowRuntime = require('flow-runtime');
46
47var _flowRuntime2 = _interopRequireDefault(_flowRuntime);
48
49function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
50
51function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
52
53const logger = new _nightingale2.default('app:client');
54
55const socket = _argv.serverHost && _argv.serverPort && (0, _socket2.default)(`${_argv.serverHost}:${_argv.serverPort}/raspberry-client`, {
56 reconnectionDelay: 500,
57 reconnectionDelayMax: 120000,
58 timeout: 4000,
59 transports: ['websocket']
60});
61
62// wait 5s before connecting, leave the time to start display
63setTimeout(() => {
64 logger.debug('Connecting', { serverHost: _argv.serverHost, serverPort: _argv.serverPort });
65 if (socket) {
66 socket.connect();
67 }
68}, 5000);
69
70const board = (0, _detectBoard2.default)();
71const rpiVersion = board === 'rpi' && board.info;
72
73const emit = (eventName, ...args) => {
74 let _eventNameType = _flowRuntime2.default.string();
75
76 let _argsType = _flowRuntime2.default.array(_flowRuntime2.default.any());
77
78 _flowRuntime2.default.param('eventName', _eventNameType).assert(eventName);
79
80 _flowRuntime2.default.rest('args', _argsType).assert(args);
81
82 if (!socket) {
83 logger.warn('cannot emit', { eventName, args });
84 return;
85 }
86
87 logger.debug('emit', { eventName, args });
88 return socket.emit(eventName, ...args);
89};
90
91if (socket) {
92 socket.on('connect_error', err => logger.error('connect error', { serverHost: _argv.serverHost, serverPort: _argv.serverPort, errMessage: err.message }));
93 socket.on('reconnect_error', err => logger.debug('reconnect error', { serverHost: _argv.serverHost, serverPort: _argv.serverPort, err }));
94
95 socket.on('disconnect', () => logger.warn('disconnected'));
96
97 socket.on('reconnect', () => logger.success('reconnected'));
98
99 socket.on('connect', () => {
100 logger.success('connected');
101
102 const networkInterface = (0, _networkInterface2.default)();
103 const screenState = screen.getCurrentScreenState();
104 emit('hello', Object.assign({
105 configTime: (0, _config.getTime)(),
106 version: _package.version,
107 token: _argv.token,
108 userId: _argv.token, // deprecated
109 screenState }, networkInterface, {
110 hostname: (0, _os.hostname)(),
111 rpiVersion,
112 board,
113 screen: {
114 state: screenState,
115 screens: screen.getCurrentScreens()
116 },
117 availableDisplays: display.availableDisplays
118 }));
119 });
120
121 socket.on('updateConfig', _manager.onConfigUpdated);
122 socket.on('changeConfig', _manager.onConfigUpdated);
123
124 socket.on('selfUpdate', () => (0, _update.selfUpdate)());
125
126 socket.on('action', action => {
127 let _actionType = _flowRuntime2.default.string();
128
129 _flowRuntime2.default.param('action', _actionType).assert(action);
130
131 logger.info('received action', { action });
132 switch (action) {
133 case 'self-upgrade':
134 case 'self-update':
135 case 'selfUpdate':
136 return (0, _update.selfUpdate)();
137
138 case 'screen-off':
139 return screen.off();
140 case 'screen-on':
141 return screen.on();
142
143 case 'refresh':
144 return display.refresh();
145 }
146
147 logger.warn(`unknown action: ${action}`);
148 });
149
150 socket.on('screenshot', () => {
151 logger.info('screenshot');
152 const buffer = screen.screenshot();
153 if (!buffer) {
154 return;
155 }
156
157 logger.info('send screenshot');
158 socket.emit('screenshot', { image: true, buffer }, () => {
159 logger.info('screenshot callback');
160 });
161 });
162}
163
164const sendUpdate = exports.sendUpdate = data => {
165 let _dataType = _flowRuntime2.default.object();
166
167 _flowRuntime2.default.return(_flowRuntime2.default.void());
168
169 _flowRuntime2.default.param('data', _dataType).assert(data);
170
171 emit('update', data);
172};
173
174function close() {
175 const _returnType2 = _flowRuntime2.default.return(_flowRuntime2.default.union(_flowRuntime2.default.ref('Promise', _flowRuntime2.default.any()), _flowRuntime2.default.void()));
176
177 if (!socket || !socket.connected) {
178 return _returnType2.assert();
179 }
180
181 return _returnType2.assert(new Promise(resolve => {
182 logger.info('Closing...');
183 socket.once('disconnect', () => {
184 logger.info('Closed');
185 resolve();
186 });
187 socket.close();
188 }));
189}
190//# sourceMappingURL=client.js.map
\No newline at end of file