mirror of
https://github.com/fleetbase/fleetbase.git
synced 2025-12-20 06:32:18 +00:00
166 lines
4.5 KiB
JavaScript
166 lines
4.5 KiB
JavaScript
import Component from '@glimmer/component';
|
|
import { inject as service } from '@ember/service';
|
|
import { tracked } from '@glimmer/tracking';
|
|
import { action } from '@ember/object';
|
|
import { format } from 'date-fns';
|
|
|
|
export default class ConfigureSocketComponent extends Component {
|
|
/**
|
|
* Inject the `router` service
|
|
*
|
|
* @var {Service}
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@service router;
|
|
|
|
/**
|
|
* Inject the `fetch` service
|
|
*
|
|
* @var {Service}
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@service fetch;
|
|
|
|
/**
|
|
* Inject the `notifications` service
|
|
*
|
|
* @var {Service}
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@service notifications;
|
|
|
|
/**
|
|
* Inject the `socket` service
|
|
*
|
|
* @var {Service}
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@service socket;
|
|
|
|
/**
|
|
* State of the test request.
|
|
*
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@tracked isLoading = null;
|
|
|
|
/**
|
|
* The response form testing the socket.
|
|
*
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@tracked testResponse = null;
|
|
|
|
/**
|
|
* Incoming events logged from test socket channel.
|
|
*
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@tracked events = [];
|
|
|
|
/**
|
|
* Date format to use for socket console events.
|
|
*
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
consoleDateFormat = 'MMM-dd HH:mm';
|
|
|
|
/**
|
|
* Creates an instance of ConfigureSocketComponent.
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
constructor() {
|
|
super(...arguments);
|
|
this.listenToTestSocket();
|
|
}
|
|
|
|
/**
|
|
* Send a request to test the socket connection.
|
|
*
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@action testSocketConnection() {
|
|
this.isLoading = true;
|
|
|
|
this.fetch
|
|
.post('settings/test-socket', {
|
|
channel: 'test',
|
|
})
|
|
.then((response) => {
|
|
this.testResponse = response;
|
|
})
|
|
.finally(() => {
|
|
this.isLoading = false;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Opens socket and logs all incoming events.
|
|
*
|
|
* @memberof ConfigureSocketComponent
|
|
*/
|
|
@action async listenToTestSocket() {
|
|
// Create SocketClusterClient
|
|
const socket = this.socket.instance();
|
|
|
|
// Listen for socket connection errors
|
|
(async () => {
|
|
// eslint-disable-next-line no-unused-vars
|
|
for await (let event of socket.listener('error')) {
|
|
// Push an event or notification for socket connection here
|
|
this.events.pushObject({
|
|
time: format(new Date(), this.consoleDateFormat),
|
|
content: 'Socket connection error!',
|
|
color: 'red',
|
|
});
|
|
}
|
|
})();
|
|
|
|
// Listen for socket connection
|
|
(async () => {
|
|
// eslint-disable-next-line no-unused-vars
|
|
for await (let event of socket.listener('connect')) {
|
|
// Push an event or notification for socket connection here
|
|
this.events.pushObject({
|
|
time: format(new Date(), this.consoleDateFormat),
|
|
content: 'Socket is connected',
|
|
color: 'green',
|
|
});
|
|
}
|
|
})();
|
|
|
|
// Listed on company channel
|
|
const channel = socket.subscribe('test');
|
|
|
|
// Listen for channel subscription
|
|
(async () => {
|
|
// eslint-disable-next-line no-unused-vars
|
|
for await (let event of channel.listener('subscribe')) {
|
|
// Push an event or notification for channel subscription here
|
|
this.events.pushObject({
|
|
time: format(new Date(), this.consoleDateFormat),
|
|
content: `Socket subscribed to test channel`,
|
|
color: 'blue',
|
|
});
|
|
}
|
|
})();
|
|
|
|
// Listen for channel subscription
|
|
(async () => {
|
|
for await (let data of channel) {
|
|
this.events.pushObject({
|
|
time: format(new Date(), this.consoleDateFormat),
|
|
content: JSON.stringify(data, undefined, 2),
|
|
color: 'green',
|
|
});
|
|
}
|
|
})();
|
|
|
|
// disconnect when transitioning
|
|
this.router.on('routeWillChange', () => {
|
|
channel.close();
|
|
this.events = [];
|
|
});
|
|
}
|
|
}
|