notification is implemented

This commit is contained in:
병준 박 2019-09-19 18:05:59 +09:00
parent 036500f65e
commit a3e2f252b7
4 changed files with 144 additions and 47 deletions

View File

@ -7,7 +7,9 @@ import { Store } from '@ngrx/store';
import { ProtocolService } from '@ucap-webmessenger/protocol';
import {
SVC_TYPE_LOGOUT,
SSVC_TYPE_LOGOUT_RES
SSVC_TYPE_LOGOUT_RES,
SSVC_TYPE_LOGOUT_REMOTE_NOTI,
AuthenticationProtocolService
} from '@ucap-webmessenger/protocol-authentication';
import * as AuthenticationStore from '../store/account/authentication';
@ -16,17 +18,39 @@ import * as AuthenticationStore from '../store/account/authentication';
export class AppService {
constructor(
private protocolService: ProtocolService,
private authenticationProtocolService: AuthenticationProtocolService,
private store: Store<any>
) {
this.protocolService.serverMessage
.pipe(
filter(message => message.serviceType === SVC_TYPE_LOGOUT),
filter(
res =>
res.serviceType === SVC_TYPE_LOGOUT &&
res.subServiceType === SSVC_TYPE_LOGOUT_RES
message =>
message.subServiceType === SSVC_TYPE_LOGOUT_RES ||
message.subServiceType === SSVC_TYPE_LOGOUT_REMOTE_NOTI
),
tap(res => {
this.store.dispatch(AuthenticationStore.logout());
tap(message => {
switch (message.subServiceType) {
case SSVC_TYPE_LOGOUT_RES:
{
const logoutRes = this.authenticationProtocolService.decodeLogoutResponse(
message
);
this.store.dispatch(AuthenticationStore.logout());
}
break;
case SSVC_TYPE_LOGOUT_REMOTE_NOTI:
{
const logoutRemoteNoti = this.authenticationProtocolService.decodeLogoutRemoteNotification(
message
);
this.store.dispatch(AuthenticationStore.logout());
}
break;
default:
break;
}
})
)
.subscribe();

View File

@ -1,7 +1,25 @@
import { ProtocolRequest, ProtocolResponse } from '@ucap-webmessenger/protocol';
import { DeviceType } from '@ucap-webmessenger/core';
import {
ProtocolRequest,
ProtocolResponse,
ProtocolNotification
} from '@ucap-webmessenger/protocol';
// tslint:disable-next-line: no-empty-interface
export interface LogoutRequest extends ProtocolRequest {}
// tslint:disable-next-line: no-empty-interface
export interface LogoutResponse extends ProtocolResponse {}
export interface LogoutRemoteRequest extends ProtocolRequest {
targetDeviceType?: DeviceType;
requestDeviceType?: DeviceType;
}
export interface LogoutRemoteResponse extends ProtocolResponse {
targetDeviceType?: DeviceType;
resultCode?: number;
}
export interface LogoutRemoteNotification extends ProtocolNotification {
requestDeviceType?: DeviceType;
}

View File

@ -6,17 +6,25 @@ import { map } from 'rxjs/operators';
import {
ProtocolService,
PacketBody,
PacketBodyValue
PacketBodyValue,
ServerMessage
} from '@ucap-webmessenger/protocol';
import { LoginRequest, LoginResponse } from '../models/login';
import {
SVC_TYPE_LOGIN,
SSVC_TYPE_LOGIN_REQ,
SVC_TYPE_LOGOUT,
SSVC_TYPE_LOGOUT_REQ
SSVC_TYPE_LOGOUT_REQ,
SSVC_TYPE_LOGOUT_REMOTE_REQ
} from '../types/service';
import { RoleCode } from '../types/role-code';
import { LogoutRequest, LogoutResponse } from '../models/logout';
import {
LogoutRequest,
LogoutResponse,
LogoutRemoteRequest,
LogoutRemoteResponse,
LogoutRemoteNotification
} from '../models/logout';
@Injectable({
providedIn: 'root'
@ -58,53 +66,97 @@ export class AuthenticationProtocolService {
.call(SVC_TYPE_LOGIN, SSVC_TYPE_LOGIN_REQ, ...bodyList)
.pipe(
map(res => {
return {
loginId: res.bodyList[0],
userSeq: res.bodyList[1],
userInfo: res.bodyList[2],
token: res.bodyList[3],
companyCode: res.bodyList[4],
departmentCode: res.bodyList[5],
userId: res.bodyList[6],
passwordEncodingType: res.bodyList[7],
encriptionKey: res.bodyList[8],
existingPid: res.bodyList[9] === 'Y' ? true : false,
roleCode: res.bodyList[10] as RoleCode,
statusMessage1: res.bodyList[11],
statusMessage2: res.bodyList[12],
statusMessage3: res.bodyList[13],
fileDownloadAllow: res.bodyList[14] === 'Y' ? true : false,
fileRetentionPeriod: res.bodyList[15],
passwordValidityPeriod: res.bodyList[16],
privateInformationAgree: res.bodyList[17] === 'Y' ? true : false,
madn: res.bodyList[18],
hardPhoneSadn: res.bodyList[19],
fmcSadn: res.bodyList[20],
pbxIndex: res.bodyList[21],
passwordExpired: res.bodyList[22] === 'Y' ? true : false,
validAccount: res.bodyList[23] === 'Y' ? true : false,
validDevice: res.bodyList[24] === 'Y' ? true : false,
useableDevice: res.bodyList[25] === 'Y' ? true : false,
deviceScreenForcedLock: res.bodyList[26] === 'Y' ? true : false,
tokenString: res.bodyList[27],
havePermissionsForIntegratedMessageBox:
res.bodyList[28] === 'Y' ? true : false,
talkWithMeBotSeq: res.bodyList[29],
pinCode: res.bodyList[30],
permissionsForViewSchedule: res.bodyList[31],
havePermissionsForDevice: res.bodyList[32] === 'Y' ? true : false
} as LoginResponse;
return this.decodeLoginResponse(res);
})
);
}
public decodeLoginResponse(message: ServerMessage): LoginResponse {
return {
loginId: message.bodyList[0],
userSeq: message.bodyList[1],
userInfo: message.bodyList[2],
token: message.bodyList[3],
companyCode: message.bodyList[4],
departmentCode: message.bodyList[5],
userId: message.bodyList[6],
passwordEncodingType: message.bodyList[7],
encriptionKey: message.bodyList[8],
existingPid: message.bodyList[9] === 'Y' ? true : false,
roleCode: message.bodyList[10] as RoleCode,
statusMessage1: message.bodyList[11],
statusMessage2: message.bodyList[12],
statusMessage3: message.bodyList[13],
fileDownloadAllow: message.bodyList[14] === 'Y' ? true : false,
fileRetentionPeriod: message.bodyList[15],
passwordValidityPeriod: message.bodyList[16],
privateInformationAgree: message.bodyList[17] === 'Y' ? true : false,
madn: message.bodyList[18],
hardPhoneSadn: message.bodyList[19],
fmcSadn: message.bodyList[20],
pbxIndex: message.bodyList[21],
passwordExpired: message.bodyList[22] === 'Y' ? true : false,
validAccount: message.bodyList[23] === 'Y' ? true : false,
validDevice: message.bodyList[24] === 'Y' ? true : false,
useableDevice: message.bodyList[25] === 'Y' ? true : false,
deviceScreenForcedLock: message.bodyList[26] === 'Y' ? true : false,
tokenString: message.bodyList[27],
havePermissionsForIntegratedMessageBox:
message.bodyList[28] === 'Y' ? true : false,
talkWithMeBotSeq: message.bodyList[29],
pinCode: message.bodyList[30],
permissionsForViewSchedule: message.bodyList[31],
havePermissionsForDevice: message.bodyList[32] === 'Y' ? true : false
} as LoginResponse;
}
public logout(req: LogoutRequest): Observable<LogoutResponse> {
return this.protocolService
.call(SVC_TYPE_LOGOUT, SSVC_TYPE_LOGOUT_REQ)
.pipe(
map(res => {
return {} as LogoutResponse;
return this.decodeLogoutResponse(res);
})
);
}
public decodeLogoutResponse(message: ServerMessage): LogoutResponse {
return {} as LogoutResponse;
}
public logoutRemote(
req: LogoutRemoteRequest
): Observable<LogoutRemoteResponse> {
const bodyList: PacketBody[] = [];
bodyList.push(
{ type: PacketBodyValue.String, value: req.targetDeviceType },
{ type: PacketBodyValue.String, value: req.requestDeviceType }
);
return this.protocolService
.call(SVC_TYPE_LOGOUT, SSVC_TYPE_LOGOUT_REMOTE_REQ, ...bodyList)
.pipe(
map(res => {
return this.decodeLogoutRemoteResponse(res);
})
);
}
public decodeLogoutRemoteResponse(
message: ServerMessage
): LogoutRemoteResponse {
return {
targetDeviceType: message.bodyList[0],
resultCode: message.bodyList[1]
} as LogoutRemoteResponse;
}
public decodeLogoutRemoteNotification(
message: ServerMessage
): LogoutRemoteNotification {
return {
requestDeviceType: message.bodyList[0]
} as LogoutRemoteNotification;
}
}

View File

@ -5,3 +5,6 @@ export interface ProtocolRequest {
export interface ProtocolResponse {
_id?: string;
}
// tslint:disable-next-line: no-empty-interface
export interface ProtocolNotification {}