MASS TEXT 전달 수신 기능 추가.
This commit is contained in:
parent
a7218ebcef
commit
fcba726a2f
|
@ -4,8 +4,11 @@ import {
|
|||
APIResponse,
|
||||
APIEncoder,
|
||||
APIDecoder,
|
||||
ParameterUtil
|
||||
ParameterUtil,
|
||||
JsonAnalization,
|
||||
StatusCode
|
||||
} from '@ucap-webmessenger/api';
|
||||
import { JsonObject } from 'type-fest';
|
||||
|
||||
export interface MassTalkDownloadRequest extends APIRequest {
|
||||
userSeq: number;
|
||||
|
@ -36,11 +39,19 @@ export const encodeMassTalkDownload: APIEncoder<MassTalkDownloadRequest> = (
|
|||
export const decodeMassTalkDownload: APIDecoder<MassTalkDownloadResponse> = (
|
||||
res: any
|
||||
) => {
|
||||
return {
|
||||
statusCode: res.StatusCode,
|
||||
errorMessage: res.ErrorMessage,
|
||||
content: res.Content,
|
||||
userName: res.UserName,
|
||||
regDate: res.RegDate
|
||||
} as MassTalkDownloadResponse;
|
||||
try {
|
||||
const json: JsonObject | Error = JsonAnalization.receiveAnalization(res);
|
||||
return {
|
||||
statusCode: json.StatusCode,
|
||||
errorMessage: json.ErrorMessage,
|
||||
content: json.Content,
|
||||
userName: json.UserName,
|
||||
regDate: json.RegDate
|
||||
} as MassTalkDownloadResponse;
|
||||
} catch (e) {
|
||||
return {
|
||||
statusCode: StatusCode.Fail,
|
||||
errorMessage: e
|
||||
} as MassTalkDownloadResponse;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -4,25 +4,35 @@ import {
|
|||
APIResponse,
|
||||
APIEncoder,
|
||||
APIDecoder,
|
||||
ParameterUtil
|
||||
ParameterUtil,
|
||||
StatusCode,
|
||||
JsonAnalization
|
||||
} from '@ucap-webmessenger/api';
|
||||
import { JsonObject } from 'type-fest';
|
||||
|
||||
export interface MassTalkSaveRequest extends APIRequest {
|
||||
userSeq: string;
|
||||
userSeq: number;
|
||||
deviceType: DeviceType;
|
||||
token: string;
|
||||
content?: string;
|
||||
roomId?: string;
|
||||
roomSeq?: string;
|
||||
}
|
||||
|
||||
export interface MassTalkSaveResponse extends APIResponse {
|
||||
EventMassSEQ?: string;
|
||||
RoomID?: string;
|
||||
RegDate?: string;
|
||||
Content?: string;
|
||||
eventMassSeq?: string;
|
||||
roomID?: string;
|
||||
regDate?: string;
|
||||
content?: string;
|
||||
returnJson?: any;
|
||||
}
|
||||
|
||||
const massTalkSaveEncodeMap = {};
|
||||
const massTalkSaveEncodeMap = {
|
||||
userSeq: 'p_user_seq',
|
||||
deviceType: 'p_device_type',
|
||||
token: 'p_token',
|
||||
content: 'p_content',
|
||||
roomSeq: 'p_room_id'
|
||||
};
|
||||
|
||||
export const encodeMassTalkSave: APIEncoder<MassTalkSaveRequest> = (
|
||||
req: MassTalkSaveRequest
|
||||
|
@ -33,5 +43,21 @@ export const encodeMassTalkSave: APIEncoder<MassTalkSaveRequest> = (
|
|||
export const decodeMassTalkSave: APIDecoder<MassTalkSaveResponse> = (
|
||||
res: any
|
||||
) => {
|
||||
return {} as MassTalkSaveResponse;
|
||||
try {
|
||||
const json: JsonObject | Error = JsonAnalization.receiveAnalization(res);
|
||||
return {
|
||||
statusCode: json.StatusCode,
|
||||
errorMessage: json.ErrorMessage,
|
||||
content: json.Content,
|
||||
eventMassSeq: json.EventMassSeq,
|
||||
regDate: json.RegDate,
|
||||
roomID: json.RoomID,
|
||||
returnJson: res
|
||||
} as MassTalkSaveResponse;
|
||||
} catch (e) {
|
||||
return {
|
||||
statusCode: StatusCode.Fail,
|
||||
errorMessage: e
|
||||
} as MassTalkSaveResponse;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -134,7 +134,8 @@ export class CommonApiService {
|
|||
this.moduleConfig.urls.massTalkDownload,
|
||||
{},
|
||||
{
|
||||
params: encodeMassTalkDownload(req)
|
||||
params: encodeMassTalkDownload(req),
|
||||
responseType: 'text' as 'json'
|
||||
}
|
||||
)
|
||||
.pipe(map(res => decodeMassTalkDownload(res)));
|
||||
|
@ -148,7 +149,8 @@ export class CommonApiService {
|
|||
this.moduleConfig.urls.massTalkSave,
|
||||
{},
|
||||
{
|
||||
params: encodeMassTalkSave(req)
|
||||
params: encodeMassTalkSave(req),
|
||||
responseType: 'text' as 'json'
|
||||
}
|
||||
)
|
||||
.pipe(map(res => decodeMassTalkSave(res)));
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
export enum StatusCode {
|
||||
Success = '200'
|
||||
Success = '200',
|
||||
Fail = '500'
|
||||
}
|
||||
|
|
20
projects/ucap-webmessenger-api/src/lib/utils/json.util.ts
Normal file
20
projects/ucap-webmessenger-api/src/lib/utils/json.util.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
import { JsonObject } from 'type-fest';
|
||||
|
||||
export class JsonAnalization {
|
||||
public static receiveAnalization(jsonStr: string): JsonObject {
|
||||
const startJson = jsonStr.indexOf('{');
|
||||
const endJson = jsonStr.lastIndexOf('}');
|
||||
|
||||
if (startJson >= 0 && startJson < endJson) {
|
||||
jsonStr = jsonStr
|
||||
.substring(startJson, endJson + 1)
|
||||
.replace(/\n"/gi, '"')
|
||||
.replace(/\n}/gi, '}')
|
||||
.replace(/\n/gi, '\\n');
|
||||
|
||||
return JSON.parse(jsonStr);
|
||||
} else {
|
||||
throw new Error('Invalid Json String');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,5 +6,6 @@ export * from './lib/apis/api';
|
|||
|
||||
export * from './lib/types/status-code.type';
|
||||
|
||||
export * from './lib/utils/json.util';
|
||||
export * from './lib/utils/parameter.util';
|
||||
export * from './lib/utils/url.util';
|
||||
|
|
|
@ -50,6 +50,7 @@ import {
|
|||
CreateChatDialogData,
|
||||
CreateChatDialogResult
|
||||
} from '../dialogs/chat/create-chat.dialog.component';
|
||||
import { Maximum_Range } from '@ucap-webmessenger/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-layout-messenger-messages',
|
||||
|
@ -184,16 +185,31 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewChecked {
|
|||
selectContact() {}
|
||||
|
||||
onSendMessage(message: string) {
|
||||
this.store.dispatch(
|
||||
EventStore.send({
|
||||
senderSeq: this.loginRes.userSeq,
|
||||
req: {
|
||||
roomSeq: this.roomInfo.roomSeq,
|
||||
eventType: EventType.Character,
|
||||
sentMessage: message
|
||||
}
|
||||
})
|
||||
);
|
||||
if (message.trim().length > Maximum_Range.MassText) {
|
||||
// MASS TEXT
|
||||
this.store.dispatch(
|
||||
EventStore.sendMass({
|
||||
senderSeq: this.loginRes.userSeq,
|
||||
req: {
|
||||
roomSeq: this.roomInfo.roomSeq,
|
||||
eventType: EventType.MassText,
|
||||
// sentMessage: message.replace(/\n/gi, '\r\n')
|
||||
sentMessage: message
|
||||
}
|
||||
})
|
||||
);
|
||||
} else {
|
||||
this.store.dispatch(
|
||||
EventStore.send({
|
||||
senderSeq: this.loginRes.userSeq,
|
||||
req: {
|
||||
roomSeq: this.roomInfo.roomSeq,
|
||||
eventType: EventType.Character,
|
||||
sentMessage: message
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
onClickReceiveAlarm() {
|
||||
|
|
|
@ -95,6 +95,22 @@ export const forwardAfterRoomOpen = createAction(
|
|||
}>()
|
||||
);
|
||||
|
||||
export const sendMass = createAction(
|
||||
'[Messenger::Event] Send Mass',
|
||||
props<{ senderSeq: number; req: SendRequest }>()
|
||||
);
|
||||
export const sendMassSuccess = createAction(
|
||||
'[Messenger::Event] Send Mass Success',
|
||||
props<{
|
||||
senderSeq: number;
|
||||
res: SendResponse;
|
||||
}>()
|
||||
);
|
||||
export const sendMassFailure = createAction(
|
||||
'[Messenger::Event] Send Mass Failure',
|
||||
props<{ error: any }>()
|
||||
);
|
||||
|
||||
export const read = createAction(
|
||||
'[Messenger::Event] read',
|
||||
props<ReadRequest>()
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
import {
|
||||
CommonApiService,
|
||||
MassTalkSaveRequest
|
||||
} from '@ucap-webmessenger/api-common';
|
||||
import { KEY_ENVIRONMENTS_INFO } from './../../../types/environment.type';
|
||||
import { Injectable } from '@angular/core';
|
||||
|
||||
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
||||
|
@ -25,7 +30,8 @@ import {
|
|||
SendResponse,
|
||||
ReadResponse,
|
||||
DelResponse,
|
||||
CancelResponse
|
||||
CancelResponse,
|
||||
EventType
|
||||
} from '@ucap-webmessenger/protocol-event';
|
||||
|
||||
import * as ChatStore from '@app/store/messenger/chat';
|
||||
|
@ -54,7 +60,9 @@ import {
|
|||
cancelFailure,
|
||||
forward,
|
||||
forwardFailure,
|
||||
forwardAfterRoomOpen
|
||||
forwardAfterRoomOpen,
|
||||
sendMass,
|
||||
sendMassFailure
|
||||
} from './actions';
|
||||
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
||||
import {
|
||||
|
@ -62,9 +70,12 @@ import {
|
|||
RoomProtocolService,
|
||||
OpenResponse
|
||||
} from '@ucap-webmessenger/protocol-room';
|
||||
import { LoginInfo, KEY_LOGIN_INFO } from '@app/types';
|
||||
import { LoginInfo, KEY_LOGIN_INFO, EnvironmentsInfo } from '@app/types';
|
||||
import { Dictionary } from '@ngrx/entity';
|
||||
import { openSuccess, openFailure } from '../room';
|
||||
import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
|
||||
import { KEY_LOGIN_RES_INFO } from '@app/types/login-res-info.type';
|
||||
import { StatusCode } from '@ucap-webmessenger/api';
|
||||
|
||||
@Injectable()
|
||||
export class Effects {
|
||||
|
@ -289,6 +300,52 @@ export class Effects {
|
|||
)
|
||||
);
|
||||
|
||||
sendMass$ = createEffect(
|
||||
() => {
|
||||
return this.actions$.pipe(
|
||||
ofType(sendMass),
|
||||
exhaustMap(action => {
|
||||
const loginResInfo: LoginResponse = this.sessionStorageService.get<
|
||||
LoginResponse
|
||||
>(KEY_LOGIN_RES_INFO);
|
||||
|
||||
const environmentsInfo = this.sessionStorageService.get<
|
||||
EnvironmentsInfo
|
||||
>(KEY_ENVIRONMENTS_INFO);
|
||||
|
||||
const req: MassTalkSaveRequest = {
|
||||
userSeq: loginResInfo.userSeq,
|
||||
deviceType: environmentsInfo.deviceType,
|
||||
token: loginResInfo.tokenString,
|
||||
content: action.req.sentMessage,
|
||||
roomSeq: action.req.roomSeq
|
||||
};
|
||||
|
||||
return this.commonApiService.massTalkSave(req).pipe(
|
||||
map(res => {
|
||||
if (res.statusCode === StatusCode.Success) {
|
||||
this.store.dispatch(
|
||||
send({
|
||||
senderSeq: action.senderSeq,
|
||||
req: {
|
||||
roomSeq: res.roomID,
|
||||
eventType: EventType.MassText,
|
||||
sentMessage: res.returnJson
|
||||
}
|
||||
})
|
||||
);
|
||||
} else {
|
||||
this.store.dispatch(sendMassFailure({ error: res }));
|
||||
}
|
||||
}),
|
||||
catchError(error => of(sendMassFailure({ error })))
|
||||
);
|
||||
})
|
||||
);
|
||||
},
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
newInfo$ = createEffect(
|
||||
() => {
|
||||
return this.actions$.pipe(
|
||||
|
@ -428,6 +485,7 @@ export class Effects {
|
|||
constructor(
|
||||
private actions$: Actions,
|
||||
private store: Store<any>,
|
||||
private commonApiService: CommonApiService,
|
||||
private eventProtocolService: EventProtocolService,
|
||||
private roomProtocolService: RoomProtocolService,
|
||||
private sessionStorageService: SessionStorageService,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { JsonObject } from 'type-fest';
|
||||
import { createReducer, on } from '@ngrx/store';
|
||||
import {
|
||||
initialState,
|
||||
|
@ -30,6 +31,7 @@ import * as RoomStore from '@app/store/messenger/room';
|
|||
import { RoomInfo } from '@ucap-webmessenger/protocol-room';
|
||||
import { EventType } from '@ucap-webmessenger/protocol-event';
|
||||
import { FileType } from '@ucap-webmessenger/protocol-file';
|
||||
import { JsonAnalization } from '@ucap-webmessenger/api';
|
||||
|
||||
export const reducer = createReducer(
|
||||
initialState,
|
||||
|
@ -119,6 +121,18 @@ export const reducer = createReducer(
|
|||
case EventType.VideoConference:
|
||||
finalEventMessage = '화상회의';
|
||||
break;
|
||||
case EventType.MassText:
|
||||
{
|
||||
try {
|
||||
const json: JsonObject | Error = JsonAnalization.receiveAnalization(
|
||||
finalEventMessage
|
||||
);
|
||||
finalEventMessage = json.Content.toString();
|
||||
} catch (e) {
|
||||
finalEventMessage = '대용량 텍스트';
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
const roomInfo = {
|
||||
...state.room.entities[action.roomSeq],
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
export enum Maximum_Range {
|
||||
MassText = 800,
|
||||
ChatRoom = 300
|
||||
}
|
|
@ -12,6 +12,7 @@ export * from './lib/type/device-devision.type';
|
|||
export * from './lib/type/device-type.type';
|
||||
export * from './lib/type/file-transfer-permissions.type';
|
||||
export * from './lib/type/locale-code.type';
|
||||
export * from './lib/type/maximum-range.type';
|
||||
export * from './lib/type/notification-method.type';
|
||||
export * from './lib/type/organization-chart-permissions.type';
|
||||
export * from './lib/type/push-type.type';
|
||||
|
|
|
@ -3,6 +3,7 @@ import { Info } from '@ucap-webmessenger/protocol-event';
|
|||
import { NGXLogger } from 'ngx-logger';
|
||||
import { StatusCode } from '@ucap-webmessenger/api';
|
||||
import { MassTextInfo } from '../../models/mass-talk-info.json';
|
||||
import { StringUtil } from '@ucap-webmessenger/ui';
|
||||
|
||||
@Component({
|
||||
selector: 'ucap-chat-message-box-mass',
|
||||
|
@ -24,7 +25,9 @@ export class MassComponent implements OnInit {
|
|||
|
||||
ngOnInit() {
|
||||
try {
|
||||
const contentJson: MassTextInfo = JSON.parse(this.message.sentMessage);
|
||||
const contentJson: MassTextInfo = StringUtil.receiveAnalization(
|
||||
this.message.sentMessage
|
||||
);
|
||||
if (contentJson.StatusCode === StatusCode.Success) {
|
||||
this.content = contentJson.Content;
|
||||
} else {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import { JsonObject } from 'type-fest';
|
||||
|
||||
export class StringUtil {
|
||||
/**
|
||||
* linefeed > <br>
|
||||
|
@ -33,6 +35,26 @@ export class StringUtil {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Json String Analization.
|
||||
*/
|
||||
public static receiveAnalization(jsonStr: string): JsonObject {
|
||||
const startJson = jsonStr.indexOf('{');
|
||||
const endJson = jsonStr.lastIndexOf('}');
|
||||
|
||||
if (startJson >= 0 && startJson < endJson) {
|
||||
jsonStr = jsonStr
|
||||
.substring(startJson, endJson + 1)
|
||||
.replace(/\n"/gi, '"')
|
||||
.replace(/\n}/gi, '}')
|
||||
.replace(/\n/gi, '\\n');
|
||||
|
||||
return JSON.parse(jsonStr);
|
||||
} else {
|
||||
throw new Error('Invalid Json String');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* date formater
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue
Block a user