message event is modified

This commit is contained in:
병준 박 2019-10-10 13:35:32 +09:00
parent e644979645
commit 0703e2807a
7 changed files with 75 additions and 112 deletions

View File

@ -13,6 +13,7 @@ import {
} from '@ucap-webmessenger/protocol-authentication';
import * as AuthenticationStore from '@app/store/account/authentication';
import * as EventStore from '@app/store/messenger/event';
import { NGXLogger } from 'ngx-logger';
import {
EventProtocolService,
@ -20,7 +21,8 @@ import {
SendNotification,
SSVC_TYPE_EVENT_READ_NOTI,
SSVC_TYPE_EVENT_CANCEL_NOTI,
SSVC_TYPE_EVENT_DEL_RES
SSVC_TYPE_EVENT_DEL_RES,
Info
} from '@ucap-webmessenger/protocol-event';
import {
InfoProtocolService,
@ -105,6 +107,22 @@ export class AppNotificationService {
'Notification::eventProtocolService::SendNotification',
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;
case SSVC_TYPE_EVENT_READ_NOTI:

View File

@ -25,6 +25,14 @@ export const infoFailure = createAction(
props<{ error: any }>()
);
export const newInfo = createAction(
'[Messenger::Event] New Info',
props<{
roomSeq: string;
info: Info;
}>()
);
export const appendInfoList = createAction(
'[Messenger::Event] Append InfoList',
props<{

View File

@ -2,12 +2,19 @@ import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { Store } from '@ngrx/store';
import { Store, select } from '@ngrx/store';
import { NGXLogger } from 'ngx-logger';
import { of } from 'rxjs';
import { tap, switchMap, map, catchError, exhaustMap } from 'rxjs/operators';
import {
tap,
switchMap,
map,
catchError,
exhaustMap,
withLatestFrom
} from 'rxjs/operators';
import {
InfoData,
Info,
@ -27,9 +34,11 @@ import {
send,
sendSuccess,
sendFailure,
appendInfoList
appendInfoList,
newInfo
} from './actions';
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
import { RoomInfo } from '@ucap-webmessenger/protocol-room';
@Injectable()
export class Effects {
@ -112,7 +121,28 @@ export class Effects {
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 }));
}
})
);
},

View File

@ -8,7 +8,7 @@ export interface Info {
// 발신자SEQ
senderSeq: number;
// 발신일시
sendDate: Date;
sendDate: string;
// 발신내용
sentMessage: string;
// 수신자수

View File

@ -63,7 +63,7 @@ export const decodeInfoData: ProtocolDecoder<InfoData> = (
seq: info[0],
type: info[1] as EventType,
senderSeq: Number(info[2]),
sendDate: new Date(info[3]),
sendDate: info[3],
sentMessage: info[4],
receiverCount: Number(info[5])
});

View File

@ -30,7 +30,7 @@ export interface SendResponse extends ProtocolResponse {
// 이벤트타입(s)
eventType: EventType;
// 발생일시(s)
sendDate: Date;
sendDate: string;
// 이벤트내용(s)
message: string;
// 수신자수
@ -44,27 +44,27 @@ export interface SendResponse extends ProtocolResponse {
}
export interface SendNotification extends ProtocolNotification {
// 대화방SEQ(s)
/** 대화방SEQ(s) */
roomSeq: string;
// 이벤트SEQ(n)
/** 이벤트SEQ(n) */
seq: number;
// 이벤트타입(s)
/** 이벤트타입(s) */
eventType: EventType;
// 발생일시(s)
/** 발생일시(s) */
sendDate: string;
// 이벤트내용(s)
/** 이벤트내용(s) */
message: string;
// 수신자수
/** 수신자수 */
receiverCount: number;
// 알림상태(s) PC 경우에만 관여됨 N: 푸시를 보내지 않은 이벤트 S: 푸시를 보낸 이벤트
/** 알림상태(s) PC 경우에만 관여됨 N: 푸시를 보내지 않은 이벤트 S: 푸시를 보낸 이벤트 */
pushStatus: PushStatus;
// 강퇴 타입(s)
/** 강퇴 타입(s) */
ForcedExitType: string;
// 요청자 이름(s)
/** 요청자 이름(s) */
senderName: string;
// 사용자아이디(s)
/** 사용자아이디(s) */
id?: string;
// 회사코드(s)
/** 회사코드(s) */
companyCode?: string;
}

View File

@ -1,16 +1,6 @@
import { TestBed } from '@angular/core/testing';
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', () => {
beforeEach(() => TestBed.configureTestingModule({}));
@ -19,87 +9,4 @@ describe('EnviromentUtilService', () => {
const service: EnviromentUtilService = TestBed.get(EnviromentUtilService);
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));
});
});