This commit is contained in:
crusader 2018-03-19 12:58:00 +09:00
parent a39c130633
commit 851c0f1462
16 changed files with 83 additions and 37 deletions

View File

@ -9,7 +9,10 @@ import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/timeout';
import 'rxjs/add/observable/throw';
import { RESTError } from '../error';
import {
RESTError,
RESTServerError,
} from '../error';
export class RESTClient {
constructor(
@ -39,14 +42,23 @@ export class RESTClient {
.request<T>(method, Location.joinWithSlash(this._baseURL, entry), options)
.map(response => response)
.catch((error: HttpErrorResponse) => {
console.error(error);
const aryMsg = error.error.message.split('|');
const resError: RESTError = {
code: error.error.code,
message: aryMsg[0],
data: aryMsg[1] === 'null' ? '' : aryMsg[1],
const restError: RESTError = {
request: {
method: method,
entry: entry,
options: options,
},
response: error.error,
};
return Observable.throw(resError);
console.error(restError);
// const aryMsg = error.error.message.split('|');
// const resError: RESTError = {
// code: error.error.code,
// message: aryMsg[0],
// data: aryMsg[1] === 'null' ? '' : aryMsg[1],
// };
return Observable.throw(restError);
});
}
}

View File

@ -1,4 +1,13 @@
export interface RESTError {
request: {
method: string;
entry: string;
options?: any;
};
response: RESTServerError;
}
export interface RESTServerError {
code: number;
message: string;
data?: any;

View File

@ -1,6 +1,8 @@
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { RPCError } from '../error';
import { RPCClientRWC } from './rwc/RPCClientRWC';
import {
@ -11,14 +13,17 @@ import {
export interface RPCRequestState {
subject: Subject<any>;
request: any;
request: {
method: string;
params: any[];
};
}
export abstract class RPCClient {
private _requestID: number;
private _pendingRequestsCount: number;
private _pendingRequests: Map<number, Subject<any>>;
private _pendingRequests: Map<number, RPCRequestState>;
public constructor(
private _codec: RPCClientCodec,
@ -85,7 +90,14 @@ export abstract class RPCClient {
if (hasResponse) {
id = this.getRequestID();
resSubject = new Subject<T>();
this._pendingRequests.set(id, resSubject);
const reqState: RPCRequestState = {
subject: resSubject,
request: {
method: method,
params: args,
}
};
this._pendingRequests.set(id, reqState);
this._pendingRequestsCount++;
}
@ -114,15 +126,20 @@ export abstract class RPCClient {
const result = resCodec.result();
const error = resCodec.error();
const resSubject: Subject<any> = this._pendingRequests.get(id);
const reqState: RPCRequestState = this._pendingRequests.get(id);
this._pendingRequests.delete(id);
this._pendingRequestsCount--;
if (undefined !== result) {
resSubject.next(result);
reqState.subject.next(result);
} else if (undefined !== error) {
console.error(error);
resSubject.error(error);
const rpcError: RPCError = {
request: reqState.request,
response: error,
};
console.error(rpcError);
reqState.subject.error(rpcError);
}
}

View File

@ -1,7 +1,15 @@
export interface RPCError {
request: {
method: string,
params: any[],
};
response: RPCServerError;
}
/**
* Error object representation when a method invocation fails.
*/
export interface RPCError {
export interface RPCServerError {
/** Indicates the error type that occurred. */
code: ErrorCode;

View File

@ -1,4 +1,4 @@
import { RPCError } from '../error';
import { RPCServerError } from '../error';
export abstract class RPCClientCodec {
abstract request(method: string, args: any[], id: number): any;
@ -7,7 +7,7 @@ export abstract class RPCClientCodec {
export abstract class RPCClientResponseCodec {
abstract id(): number | undefined;
abstract error(): RPCError | undefined;
abstract error(): RPCServerError | undefined;
abstract result(): any | undefined;
abstract isNotification(): boolean;

View File

@ -5,7 +5,7 @@ import {
} from '../RPCClientCodec';
import {
RPCError,
RPCServerError,
} from '../../error';
export interface ClientNotification {
@ -23,7 +23,7 @@ export interface ClientRequest {
export interface ClientResponse {
jsonrpc: string;
result?: any;
error?: RPCError;
error?: RPCServerError;
id?: number;
}
@ -56,7 +56,7 @@ export class RPCClientJSONResponseCodec extends RPCClientResponseCodec {
public id(): number | undefined {
return this._res.id;
}
public error(): RPCError | undefined {
public error(): RPCServerError | undefined {
return this._res.error;
}
public result(): any | undefined {

View File

@ -44,7 +44,7 @@ export class Effects {
return new SettingSuccess(discoveryStartInfo);
})
.catch((error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
return of(new SettingFailure(error));
});
}

View File

@ -34,7 +34,7 @@ export class MapComponent implements OnInit, AfterContentInit {
}
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
}

View File

@ -45,7 +45,7 @@ export class ListComponent implements OnInit, AfterContentInit {
this.dataSource.sort = this.sort;
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
}
@ -67,7 +67,7 @@ export class ListComponent implements OnInit, AfterContentInit {
this.dataSource.sort = this.sort;
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
console.log(this.selected.id + ' accept');
@ -81,9 +81,9 @@ export class ListComponent implements OnInit, AfterContentInit {
this.dataSource.sort = this.sort;
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
)
);
console.log(this.selected.id + ' deny');
}
}

View File

@ -38,7 +38,7 @@ export class NotificationBadgeComponent implements OnInit, AfterContentInit {
}
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
this.mark$.subscribe(
@ -48,7 +48,7 @@ export class NotificationBadgeComponent implements OnInit, AfterContentInit {
}
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
}

View File

@ -40,7 +40,7 @@ export class NotificationComponent implements OnInit, AfterContentInit {
}
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
}

View File

@ -44,7 +44,7 @@ export class Effects {
return new MarkAsReadSuccess(notification);
})
.catch((error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
return of(new MarkAsReadFailure(error));
});
}

View File

@ -58,7 +58,7 @@ export class Effects {
return new MarkAllAsReadSuccess(page);
})
.catch((error: RPCError) => {
console.log('errrrrrrrrrrrrrr : ' + error.message);
console.log('errrrrrrrrrrrrrr : ' + error.response.message);
return of(new MarkAllAsReadFailure(error));
});
}

View File

@ -41,7 +41,7 @@ export class DetailComponent implements OnInit, AfterContentInit {
}
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);
}

View File

@ -50,7 +50,7 @@ export class ListComponent implements OnInit, AfterContentInit {
this.dataSource.sort = this.sort;
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);

View File

@ -70,7 +70,7 @@ export class ListComponent implements OnInit, AfterContentInit {
this.dataSource.sort = this.sort;
},
(error: RPCError) => {
console.log(error.message);
console.log(error.response.message);
}
);