message event is modified
This commit is contained in:
parent
e644979645
commit
0703e2807a
|
@ -13,6 +13,7 @@ import {
|
||||||
} from '@ucap-webmessenger/protocol-authentication';
|
} from '@ucap-webmessenger/protocol-authentication';
|
||||||
|
|
||||||
import * as AuthenticationStore from '@app/store/account/authentication';
|
import * as AuthenticationStore from '@app/store/account/authentication';
|
||||||
|
import * as EventStore from '@app/store/messenger/event';
|
||||||
import { NGXLogger } from 'ngx-logger';
|
import { NGXLogger } from 'ngx-logger';
|
||||||
import {
|
import {
|
||||||
EventProtocolService,
|
EventProtocolService,
|
||||||
|
@ -20,7 +21,8 @@ import {
|
||||||
SendNotification,
|
SendNotification,
|
||||||
SSVC_TYPE_EVENT_READ_NOTI,
|
SSVC_TYPE_EVENT_READ_NOTI,
|
||||||
SSVC_TYPE_EVENT_CANCEL_NOTI,
|
SSVC_TYPE_EVENT_CANCEL_NOTI,
|
||||||
SSVC_TYPE_EVENT_DEL_RES
|
SSVC_TYPE_EVENT_DEL_RES,
|
||||||
|
Info
|
||||||
} from '@ucap-webmessenger/protocol-event';
|
} from '@ucap-webmessenger/protocol-event';
|
||||||
import {
|
import {
|
||||||
InfoProtocolService,
|
InfoProtocolService,
|
||||||
|
@ -105,6 +107,22 @@ export class AppNotificationService {
|
||||||
'Notification::eventProtocolService::SendNotification',
|
'Notification::eventProtocolService::SendNotification',
|
||||||
noti
|
noti
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const appendInfo: Info = {
|
||||||
|
seq: noti.seq,
|
||||||
|
type: noti.eventType,
|
||||||
|
senderSeq: noti.SENDER_SEQ,
|
||||||
|
sendDate: noti.sendDate,
|
||||||
|
sentMessage: noti.message,
|
||||||
|
receiverCount: noti.receiverCount
|
||||||
|
};
|
||||||
|
|
||||||
|
this.store.dispatch(
|
||||||
|
EventStore.newInfo({
|
||||||
|
roomSeq: noti.roomSeq,
|
||||||
|
info: appendInfo
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SSVC_TYPE_EVENT_READ_NOTI:
|
case SSVC_TYPE_EVENT_READ_NOTI:
|
||||||
|
|
|
@ -25,6 +25,14 @@ export const infoFailure = createAction(
|
||||||
props<{ error: any }>()
|
props<{ error: any }>()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const newInfo = createAction(
|
||||||
|
'[Messenger::Event] New Info',
|
||||||
|
props<{
|
||||||
|
roomSeq: string;
|
||||||
|
info: Info;
|
||||||
|
}>()
|
||||||
|
);
|
||||||
|
|
||||||
export const appendInfoList = createAction(
|
export const appendInfoList = createAction(
|
||||||
'[Messenger::Event] Append InfoList',
|
'[Messenger::Event] Append InfoList',
|
||||||
props<{
|
props<{
|
||||||
|
|
|
@ -2,12 +2,19 @@ import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
||||||
|
|
||||||
import { Store } from '@ngrx/store';
|
import { Store, select } from '@ngrx/store';
|
||||||
|
|
||||||
import { NGXLogger } from 'ngx-logger';
|
import { NGXLogger } from 'ngx-logger';
|
||||||
|
|
||||||
import { of } from 'rxjs';
|
import { of } from 'rxjs';
|
||||||
import { tap, switchMap, map, catchError, exhaustMap } from 'rxjs/operators';
|
import {
|
||||||
|
tap,
|
||||||
|
switchMap,
|
||||||
|
map,
|
||||||
|
catchError,
|
||||||
|
exhaustMap,
|
||||||
|
withLatestFrom
|
||||||
|
} from 'rxjs/operators';
|
||||||
import {
|
import {
|
||||||
InfoData,
|
InfoData,
|
||||||
Info,
|
Info,
|
||||||
|
@ -27,9 +34,11 @@ import {
|
||||||
send,
|
send,
|
||||||
sendSuccess,
|
sendSuccess,
|
||||||
sendFailure,
|
sendFailure,
|
||||||
appendInfoList
|
appendInfoList,
|
||||||
|
newInfo
|
||||||
} from './actions';
|
} from './actions';
|
||||||
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
||||||
|
import { RoomInfo } from '@ucap-webmessenger/protocol-room';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class Effects {
|
export class Effects {
|
||||||
|
@ -112,7 +121,28 @@ export class Effects {
|
||||||
receiverCount: res.receiverCount
|
receiverCount: res.receiverCount
|
||||||
};
|
};
|
||||||
|
|
||||||
this.store.dispatch(appendInfoList({ info: appendInfo }));
|
this.store.dispatch(
|
||||||
|
newInfo({ roomSeq: res.roomSeq, info: appendInfo })
|
||||||
|
);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
{ dispatch: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
newInfo$ = createEffect(
|
||||||
|
() => {
|
||||||
|
return this.actions$.pipe(
|
||||||
|
ofType(newInfo),
|
||||||
|
withLatestFrom(
|
||||||
|
this.store.pipe(
|
||||||
|
select((state: any) => state.messenger.room.roomInfo as RoomInfo)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
tap(([action, roomInfo]) => {
|
||||||
|
if (roomInfo.roomSeq === action.roomSeq) {
|
||||||
|
this.store.dispatch(appendInfoList({ info: action.info }));
|
||||||
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@ export interface Info {
|
||||||
// 발신자SEQ
|
// 발신자SEQ
|
||||||
senderSeq: number;
|
senderSeq: number;
|
||||||
// 발신일시
|
// 발신일시
|
||||||
sendDate: Date;
|
sendDate: string;
|
||||||
// 발신내용
|
// 발신내용
|
||||||
sentMessage: string;
|
sentMessage: string;
|
||||||
// 수신자수
|
// 수신자수
|
||||||
|
|
|
@ -63,7 +63,7 @@ export const decodeInfoData: ProtocolDecoder<InfoData> = (
|
||||||
seq: info[0],
|
seq: info[0],
|
||||||
type: info[1] as EventType,
|
type: info[1] as EventType,
|
||||||
senderSeq: Number(info[2]),
|
senderSeq: Number(info[2]),
|
||||||
sendDate: new Date(info[3]),
|
sendDate: info[3],
|
||||||
sentMessage: info[4],
|
sentMessage: info[4],
|
||||||
receiverCount: Number(info[5])
|
receiverCount: Number(info[5])
|
||||||
});
|
});
|
||||||
|
|
|
@ -30,7 +30,7 @@ export interface SendResponse extends ProtocolResponse {
|
||||||
// 이벤트타입(s)
|
// 이벤트타입(s)
|
||||||
eventType: EventType;
|
eventType: EventType;
|
||||||
// 발생일시(s)
|
// 발생일시(s)
|
||||||
sendDate: Date;
|
sendDate: string;
|
||||||
// 이벤트내용(s)
|
// 이벤트내용(s)
|
||||||
message: string;
|
message: string;
|
||||||
// 수신자수
|
// 수신자수
|
||||||
|
@ -44,27 +44,27 @@ export interface SendResponse extends ProtocolResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SendNotification extends ProtocolNotification {
|
export interface SendNotification extends ProtocolNotification {
|
||||||
// 대화방SEQ(s)
|
/** 대화방SEQ(s) */
|
||||||
roomSeq: string;
|
roomSeq: string;
|
||||||
// 이벤트SEQ(n)
|
/** 이벤트SEQ(n) */
|
||||||
seq: number;
|
seq: number;
|
||||||
// 이벤트타입(s)
|
/** 이벤트타입(s) */
|
||||||
eventType: EventType;
|
eventType: EventType;
|
||||||
// 발생일시(s)
|
/** 발생일시(s) */
|
||||||
sendDate: string;
|
sendDate: string;
|
||||||
// 이벤트내용(s)
|
/** 이벤트내용(s) */
|
||||||
message: string;
|
message: string;
|
||||||
// 수신자수
|
/** 수신자수 */
|
||||||
receiverCount: number;
|
receiverCount: number;
|
||||||
// 알림상태(s) PC 경우에만 관여됨 N: 푸시를 보내지 않은 이벤트 S: 푸시를 보낸 이벤트
|
/** 알림상태(s) PC 경우에만 관여됨 N: 푸시를 보내지 않은 이벤트 S: 푸시를 보낸 이벤트 */
|
||||||
pushStatus: PushStatus;
|
pushStatus: PushStatus;
|
||||||
// 강퇴 타입(s)
|
/** 강퇴 타입(s) */
|
||||||
ForcedExitType: string;
|
ForcedExitType: string;
|
||||||
// 요청자 이름(s)
|
/** 요청자 이름(s) */
|
||||||
senderName: string;
|
senderName: string;
|
||||||
// 사용자아이디(s)
|
/** 사용자아이디(s) */
|
||||||
id?: string;
|
id?: string;
|
||||||
// 회사코드(s)
|
/** 회사코드(s) */
|
||||||
companyCode?: string;
|
companyCode?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,6 @@
|
||||||
import { TestBed } from '@angular/core/testing';
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { EnviromentUtilService } from './enviroment-util.service';
|
import { EnviromentUtilService } from './enviroment-util.service';
|
||||||
import { interval, fromEvent, concat, merge, race, of, zip } from 'rxjs';
|
|
||||||
import {
|
|
||||||
take,
|
|
||||||
map,
|
|
||||||
combineAll,
|
|
||||||
tap,
|
|
||||||
mapTo,
|
|
||||||
delay,
|
|
||||||
switchMap
|
|
||||||
} from 'rxjs/operators';
|
|
||||||
|
|
||||||
describe('EnviromentUtilService', () => {
|
describe('EnviromentUtilService', () => {
|
||||||
beforeEach(() => TestBed.configureTestingModule({}));
|
beforeEach(() => TestBed.configureTestingModule({}));
|
||||||
|
@ -19,87 +9,4 @@ describe('EnviromentUtilService', () => {
|
||||||
const service: EnviromentUtilService = TestBed.get(EnviromentUtilService);
|
const service: EnviromentUtilService = TestBed.get(EnviromentUtilService);
|
||||||
expect(service).toBeTruthy();
|
expect(service).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
// it('rxjs combineAll', () => {
|
|
||||||
// const source = interval(1000).pipe(take(2));
|
|
||||||
// const example = source.pipe(
|
|
||||||
// map(sv => {
|
|
||||||
// console.log('sv', sv, new Date());
|
|
||||||
|
|
||||||
// return interval(1000).pipe(
|
|
||||||
// tap(ev => {
|
|
||||||
// console.log('sv', sv, 'ev', ev, new Date());
|
|
||||||
// }),
|
|
||||||
// map(ev => `Result (${sv}): ${ev}`),
|
|
||||||
// take(3)
|
|
||||||
// );
|
|
||||||
// })
|
|
||||||
// );
|
|
||||||
// const result = example.pipe(combineAll());
|
|
||||||
|
|
||||||
// result.subscribe(x => console.log('x', x, new Date()));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// it('rxjs merge', () => {
|
|
||||||
// // emit every 2.5 seconds
|
|
||||||
// const first = interval(2500);
|
|
||||||
// // emit every 2 seconds
|
|
||||||
// const second = interval(2000);
|
|
||||||
// // emit every 1.5 seconds
|
|
||||||
// const third = interval(1500);
|
|
||||||
// // emit every 1 second
|
|
||||||
// const fourth = interval(1000);
|
|
||||||
|
|
||||||
// // emit outputs from one observable
|
|
||||||
// const example = merge(
|
|
||||||
// first.pipe(mapTo('FIRST!')),
|
|
||||||
// second.pipe(mapTo('SECOND!')),
|
|
||||||
// third.pipe(mapTo('THIRD')),
|
|
||||||
// fourth.pipe(mapTo('FOURTH'))
|
|
||||||
// );
|
|
||||||
// // output: "FOURTH", "THIRD", "SECOND!", "FOURTH", "FIRST!", "THIRD", "FOURTH"
|
|
||||||
// const subscribe = example.subscribe(val => console.log(val));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// it('rxjs race', () => {
|
|
||||||
// // take the first observable to emit
|
|
||||||
// const example = race(
|
|
||||||
// // emit every 1.5s
|
|
||||||
// interval(1500).pipe(mapTo('1.5s won!')),
|
|
||||||
// // emit every 1s
|
|
||||||
// interval(1000).pipe(mapTo('1s won!')),
|
|
||||||
// // emit every 2s
|
|
||||||
// interval(2000).pipe(mapTo('2s won!')),
|
|
||||||
// // emit every 2.5s
|
|
||||||
// interval(2500).pipe(mapTo('2.5s won!'))
|
|
||||||
// );
|
|
||||||
// // output: "1s won!"..."1s won!"...etc
|
|
||||||
// const subscribe = example.subscribe(val => console.log(val));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// it('rxjs zip', () => {
|
|
||||||
// const sourceOne = of('Hello');
|
|
||||||
// const sourceTwo = of('World!');
|
|
||||||
// const sourceThree = of('Goodbye');
|
|
||||||
// const sourceFour = of('World!');
|
|
||||||
// // wait until all observables have emitted a value then emit all as an array
|
|
||||||
// const example = zip(
|
|
||||||
// sourceOne,
|
|
||||||
// sourceTwo.pipe(delay(2000)),
|
|
||||||
// sourceThree.pipe(delay(1000)),
|
|
||||||
// sourceFour.pipe(delay(3000))
|
|
||||||
// );
|
|
||||||
// // output: ["Hello", "World!", "Goodbye", "World!"]
|
|
||||||
// const subscribe = example.subscribe(val => console.log(val));
|
|
||||||
// });
|
|
||||||
|
|
||||||
it('rxjs zip', () => {
|
|
||||||
const switched = of(1, 2, 3).pipe(
|
|
||||||
switchMap((x: number) => {
|
|
||||||
console.log('x', x);
|
|
||||||
return of(x, x ** 2, x ** 3);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
switched.subscribe(x => console.log(x));
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user