next-ucap-messenger/projects/ucap-webmessenger-app/src/app/resolvers/messenger.resolver.ts

105 lines
3.3 KiB
TypeScript
Raw Normal View History

2019-09-19 05:15:43 +00:00
import { Injectable } from '@angular/core';
import {
Resolve,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from '@angular/router';
2019-09-24 09:42:53 +00:00
import { Observable, throwError } from 'rxjs';
import { map, tap, mergeMap, catchError, take } from 'rxjs/operators';
2019-09-19 05:15:43 +00:00
2019-09-24 09:42:53 +00:00
import { Store } from '@ngrx/store';
2019-09-19 05:15:43 +00:00
import { ProtocolService } from '@ucap-webmessenger/protocol';
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
import { PublicApiService } from '@ucap-webmessenger/api-public';
import * as AppStore from '../store';
import * as VersionInfoStore from '../store/setting/version-info';
import { LoginInfo, KEY_LOGIN_INFO } from '../types';
import { InnerProtocolService } from '@ucap-webmessenger/protocol-inner';
2019-09-19 06:51:42 +00:00
import {
AuthenticationProtocolService,
2019-09-24 09:42:53 +00:00
SSOMode,
LoginResponse
2019-09-19 06:51:42 +00:00
} from '@ucap-webmessenger/protocol-authentication';
2019-09-24 09:42:53 +00:00
2019-09-24 00:23:30 +00:00
import * as AuthenticationStore from '@app/store/account/authentication';
2019-09-19 05:15:43 +00:00
@Injectable()
export class AppMessengerResolver implements Resolve<void> {
2019-09-19 05:15:43 +00:00
constructor(
private store: Store<any>,
private sessionStorageService: SessionStorageService,
private publicApiService: PublicApiService,
private protocolService: ProtocolService,
2019-09-19 06:51:42 +00:00
private authenticationProtocolService: AuthenticationProtocolService,
2019-09-19 05:15:43 +00:00
private innerProtocolService: InnerProtocolService
) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): void | Observable<void> | Promise<void> {
const loginInfo = this.sessionStorageService.get<LoginInfo>(KEY_LOGIN_INFO);
2019-09-24 09:42:53 +00:00
return new Promise<void>((resolve, reject) => {
this.publicApiService
.versionInfo2({
deviceType: loginInfo.deviceType,
companyGroupType: 'C',
companyCode: loginInfo.companyCode,
loginId: loginInfo.loginId
2019-09-19 05:15:43 +00:00
})
2019-09-24 09:42:53 +00:00
.pipe(
take(1),
tap(versionInfo2Res => {
this.store.dispatch(VersionInfoStore.fetchSuccess(versionInfo2Res));
}),
mergeMap(versionInfo2Res =>
this.protocolService.connect(versionInfo2Res.serverIp)
),
mergeMap(() => this.innerProtocolService.conn({})),
mergeMap(connRres =>
this.authenticationProtocolService.login({
loginId: loginInfo.loginId,
loginPw: loginInfo.loginPw,
deviceType: loginInfo.deviceType,
deviceId: ' ',
token: '',
localeCode: loginInfo.localeCode,
pushId: ' ',
companyCode: loginInfo.companyCode,
passwordEncodingType: 1,
clientVersion: '',
reconnect: false,
ip: 'localhost',
hostName: '',
ssoMode: SSOMode.AUTH,
userSpecificInformation: 'PRO_000482',
productId: 'PRO_000482',
productName: 'EZMessenger'
})
),
map(loginRes => {
this.store.dispatch(
AuthenticationStore.loginSuccess({
loginInfo: loginRes
})
);
}),
catchError(err => {
return throwError(err);
})
)
.subscribe(
() => {
resolve();
},
err => {
reject();
}
);
});
2019-09-19 05:15:43 +00:00
}
}