Files
doneit-web/src/app/services/network-service.service.ts
T

67 lines
1.9 KiB
TypeScript
Raw Normal View History

2022-03-29 16:48:24 +01:00
import { Injectable } from '@angular/core';
import { ToastController, Platform } from '@ionic/angular';
import { BehaviorSubject, Observable } from 'rxjs';
import { Network } from '@ionic-native/network/ngx'
export enum ConnectionStatus {
Online,
Offline
}
@Injectable({
providedIn: 'root'
})
export class NetworkServiceService {
private status: BehaviorSubject<ConnectionStatus> = new BehaviorSubject(ConnectionStatus.Offline);
2023-09-22 15:17:25 +01:00
private wsCallbacks: {[key: string]: {
function: Function,
event: ConnectionStatus
}} = {}
2022-03-29 16:48:24 +01:00
constructor(private network: Network, private toastController: ToastController, private plt: Platform) {
this.plt.ready().then(() => {
this.initializeNetworkEvents();
let status = this.network.type !== 'none' ? ConnectionStatus.Online : ConnectionStatus.Offline;
this.status.next(status);
2023-09-22 15:17:25 +01:00
});
2023-01-09 17:07:02 +01:00
this.onNetworkChange().subscribe((status) => {
2023-05-26 14:23:37 +01:00
2023-01-09 17:07:02 +01:00
})
2022-03-29 16:48:24 +01:00
}
public initializeNetworkEvents() {
this.network.onDisconnect().subscribe(() => {
if (this.status.getValue() === ConnectionStatus.Online) {
this.updateNetworkStatus(ConnectionStatus.Offline);
}
});
this.network.onConnect().subscribe(() => {
if (this.status.getValue() === ConnectionStatus.Offline) {
this.updateNetworkStatus(ConnectionStatus.Online);
}
});
}
2023-09-22 15:17:25 +01:00
2022-03-29 16:48:24 +01:00
private async updateNetworkStatus(status: ConnectionStatus) {
this.status.next(status);
2023-09-22 15:17:25 +01:00
2022-03-29 16:48:24 +01:00
let connection = status == ConnectionStatus.Offline ? 'Offline' : 'Online';
let toast = this.toastController.create({
message: `You are now ${connection}`,
duration: 3000,
position: 'bottom'
});
toast.then(toast => toast.present());
}
public onNetworkChange(): Observable<ConnectionStatus> {
return this.status.asObservable();
}
public getCurrentNetworkStatus(): ConnectionStatus {
return this.status.getValue();
}
}