pro-xy-ui 0.5.8 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.esformatter +28 -28
- package/.eslintrc +15 -15
- package/bin/pro-xy-ui +25 -27
- package/index.html +38 -38
- package/lib/app/_common/app-menu.js +42 -42
- package/lib/app/_common/app-menu.ts +41 -41
- package/lib/app/_common/patchResize.js +33 -33
- package/lib/app/_common/patchResize.ts +32 -32
- package/lib/app/_common/pipes.js +33 -33
- package/lib/app/_common/pipes.ts +21 -21
- package/lib/app/_common/rxjs-extensions.js +20 -20
- package/lib/app/_common/rxjs-extensions.ts +21 -21
- package/lib/app/app.component.css +39 -39
- package/lib/app/app.component.html +35 -35
- package/lib/app/app.module.js +92 -92
- package/lib/app/app.module.ts +89 -89
- package/lib/app/main.js +11 -11
- package/lib/app/main.ts +11 -11
- package/lib/app/model/config.js +69 -69
- package/lib/app/model/config.ts +79 -79
- package/lib/app/model/http.js +116 -116
- package/lib/app/service/config.defaultConfig.js +74 -74
- package/lib/app/service/config.defaultConfig.ts +72 -72
- package/lib/app/service/config.service.js +44 -44
- package/lib/app/service/config.service.ts +39 -39
- package/lib/app/service/socket.service.js +109 -109
- package/lib/app/service/socket.service.ts +131 -131
- package/lib/app/service/traffic.service.js +98 -98
- package/lib/app/views/auto-responder/auto-responder.component.css +37 -37
- package/lib/app/views/auto-responder/auto-responder.component.html +41 -41
- package/lib/app/views/auto-responder/auto-responder.component.js +102 -102
- package/lib/app/views/auto-responder/auto-responder.component.ts +110 -110
- package/lib/app/views/composer/composer.component.css +7 -7
- package/lib/app/views/composer/composer.component.html +9 -9
- package/lib/app/views/composer/composer.component.js +147 -147
- package/lib/app/views/composer/composer.component.ts +148 -148
- package/lib/app/views/config/config.component.css +13 -13
- package/lib/app/views/config/config.component.html +14 -14
- package/lib/app/views/config/config.component.js +163 -163
- package/lib/app/views/config/diff.dialog.html +3 -3
- package/lib/app/views/config/diff.dialog.js +29 -29
- package/lib/app/views/config/diff.dialog.ts +17 -17
- package/lib/app/views/config/plugins.dialog.html +17 -17
- package/lib/app/views/config/plugins.dialog.js +29 -29
- package/lib/app/views/config/plugins.dialog.ts +17 -17
- package/lib/app/views/config-list-base.js +44 -44
- package/lib/app/views/config-list-base.ts +66 -66
- package/lib/app/views/connection/connection.component.html +9 -9
- package/lib/app/views/connection/connection.component.js +87 -89
- package/lib/app/views/connection/connection.component.ts +83 -85
- package/lib/app/views/delay/delay.component.css +23 -23
- package/lib/app/views/delay/delay.component.html +35 -35
- package/lib/app/views/delay/delay.component.js +34 -34
- package/lib/app/views/find/find.component.css +30 -30
- package/lib/app/views/find/find.component.html +10 -10
- package/lib/app/views/find/find.component.js +113 -113
- package/lib/app/views/find/find.component.ts +111 -111
- package/lib/app/views/inspector/inspector.component.css +14 -14
- package/lib/app/views/inspector/inspector.component.html +17 -17
- package/lib/app/views/inspector/inspector.component.js +64 -64
- package/lib/app/views/inspector/inspector.component.ts +54 -54
- package/lib/app/views/logs/logs.component.css +7 -7
- package/lib/app/views/logs/logs.component.html +13 -13
- package/lib/app/views/logs/logs.component.js +56 -56
- package/lib/app/views/logs/logs.component.ts +46 -46
- package/lib/app/views/requests/request-row.component.css +15 -15
- package/lib/app/views/requests/request-row.component.html +7 -7
- package/lib/app/views/requests/request-row.component.js +68 -68
- package/lib/app/views/requests/request.bodyMenu.js +41 -41
- package/lib/app/views/requests/request.bodyMenu.ts +61 -61
- package/lib/app/views/requests/request.headMenu.js +25 -25
- package/lib/app/views/requests/requests.component.css +49 -49
- package/lib/app/views/requests/requests.component.html +33 -33
- package/lib/app/views/requests/requests.component.js +127 -127
- package/lib/app/views/status/status.component.css +18 -18
- package/lib/app/views/status/status.component.html +8 -8
- package/lib/app/views/status/status.component.js +49 -49
- package/lib/app/views/status/status.component.ts +45 -45
- package/lib/app/views/url-replace/url-replace.component.css +32 -32
- package/lib/app/views/url-replace/url-replace.component.html +36 -36
- package/lib/app/views/url-replace/url-replace.component.js +34 -34
- package/lib/index.js +23 -23
- package/lib/lib.d.ts +2 -2
- package/lib/style.css +100 -100
- package/lib/systemjs.config.js +75 -75
- package/package.json +64 -64
- package/readme.md +5 -5
- package/tsconfig.json +23 -23
- package/typings.json +11 -11
- package/npm-shrinkwrap.json +0 -2568
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const core_1 = require("@angular/core");
|
|
13
|
-
const Observable_1 = require("rxjs/Observable");
|
|
14
|
-
const ReplaySubject_1 = require("rxjs/ReplaySubject");
|
|
15
|
-
const config_1 = require("../model/config");
|
|
16
|
-
const config_service_1 = require("./config.service");
|
|
17
|
-
const io = require("socket.io-client");
|
|
18
|
-
var url = nw.require("url");
|
|
19
|
-
let SocketService = class SocketService {
|
|
20
|
-
constructor(configService) {
|
|
21
|
-
this.configService = configService;
|
|
22
|
-
this.logsObservable = new ReplaySubject_1.ReplaySubject(20);
|
|
23
|
-
var socket = this.socket = this.connect(this._getSocketPath());
|
|
24
|
-
this.configObservable = Observable_1.Observable.fromEvent(socket, "config").map(c => new config_1.Config(c)).publishBehavior(new config_1.Config());
|
|
25
|
-
this.reqObservable = Observable_1.Observable.fromEvent(socket, "request");
|
|
26
|
-
this.resObservable = Observable_1.Observable.fromEvent(socket, "response");
|
|
27
|
-
this.reqBodyChunkObservable = Observable_1.Observable.fromEvent(socket, "request-body-chunk");
|
|
28
|
-
this.resBodyChunkObservable = Observable_1.Observable.fromEvent(socket, "response-body-chunk");
|
|
29
|
-
this.reqBodyEndObservable = Observable_1.Observable.fromEvent(socket, "request-body-end");
|
|
30
|
-
this.resBodyEndObservable = Observable_1.Observable.fromEvent(socket, "response-body-end");
|
|
31
|
-
this.connectStatusObservable = Observable_1.Observable.merge(Observable_1.Observable.fromEvent(socket, "connect", () => true), Observable_1.Observable.fromEvent(socket, "disconnect", () => false)).publishBehavior(false);
|
|
32
|
-
this.connectConnectables([
|
|
33
|
-
this.configObservable,
|
|
34
|
-
this.connectStatusObservable
|
|
35
|
-
]);
|
|
36
|
-
this.configObservable.subscribe((conf) => conf && this.log(`new config received`));
|
|
37
|
-
}
|
|
38
|
-
connectConnectables(observables) {
|
|
39
|
-
observables.forEach(c => c.connect());
|
|
40
|
-
}
|
|
41
|
-
log(str) {
|
|
42
|
-
this.logsObservable.next(str);
|
|
43
|
-
}
|
|
44
|
-
connect(socketPath) {
|
|
45
|
-
this.log(`trying to connect to ${socketPath}`);
|
|
46
|
-
var _socket = io.connect(socketPath, {
|
|
47
|
-
reconnectionAttempts: 2,
|
|
48
|
-
transports: ["websocket"]
|
|
49
|
-
});
|
|
50
|
-
_socket.on("connect", () => this.log(`connected`));
|
|
51
|
-
_socket.on("disconnect", (reason) => this.log(`disconnect: ${reason}`));
|
|
52
|
-
_socket.on("connect_error", (err) => this.log(`connect_error: ${err}`));
|
|
53
|
-
_socket.on("connect_timeout", (err) => this.log(`connect_timeout: ${err}`));
|
|
54
|
-
_socket.on("reconnect_error", (err) => this.log(`reconnect_error: ${err}`));
|
|
55
|
-
_socket.on("reconnecting", (err) => this.log(`reconnecting: ${err}`));
|
|
56
|
-
_socket.on("reconnect_failed", (err) => {
|
|
57
|
-
this.log(`reconnect_failed: ${err}`);
|
|
58
|
-
_socket.io.uri = this._getSocketPath();
|
|
59
|
-
this.log(`trying to connect to ${_socket.io.uri}`);
|
|
60
|
-
_socket.io.connect();
|
|
61
|
-
});
|
|
62
|
-
return _socket;
|
|
63
|
-
}
|
|
64
|
-
getPort() {
|
|
65
|
-
var defPort = this.configService.DEFAULT_PORT;
|
|
66
|
-
try {
|
|
67
|
-
return this.configService.getConfig().port || defPort;
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
this.log(err.message);
|
|
71
|
-
return defPort;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
_getSocketPath() {
|
|
75
|
-
return url.format({
|
|
76
|
-
hostname: "localhost",
|
|
77
|
-
protocol: "http",
|
|
78
|
-
port: this.getPort()
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
updateConfig(config) {
|
|
82
|
-
//will be mixin to current config in pro-xy-ws-api
|
|
83
|
-
this.log(`sendending config update`);
|
|
84
|
-
this.socket.emit("configupdate", config);
|
|
85
|
-
}
|
|
86
|
-
replaceConfig(config) {
|
|
87
|
-
this.log(`sendending config replace`);
|
|
88
|
-
this.socket.emit("configreplace", config);
|
|
89
|
-
}
|
|
90
|
-
sendKillSignal() {
|
|
91
|
-
this.socket.emit("kill");
|
|
92
|
-
}
|
|
93
|
-
connectToRemote() {
|
|
94
|
-
var path = prompt("Remote path (e.g. http://server:8000)");
|
|
95
|
-
if (!path) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
this.socket.io.close();
|
|
99
|
-
this.socket.io.uri = path;
|
|
100
|
-
this.socket.io.skipReconnect = false;
|
|
101
|
-
this.log(`trying to connect to ${path}`);
|
|
102
|
-
this.socket.io.reconnect();
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
SocketService = __decorate([
|
|
106
|
-
core_1.Injectable(),
|
|
107
|
-
__metadata("design:paramtypes", [config_service_1.ConfigService])
|
|
108
|
-
], SocketService);
|
|
109
|
-
exports.SocketService = SocketService;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const core_1 = require("@angular/core");
|
|
13
|
+
const Observable_1 = require("rxjs/Observable");
|
|
14
|
+
const ReplaySubject_1 = require("rxjs/ReplaySubject");
|
|
15
|
+
const config_1 = require("../model/config");
|
|
16
|
+
const config_service_1 = require("./config.service");
|
|
17
|
+
const io = require("socket.io-client");
|
|
18
|
+
var url = nw.require("url");
|
|
19
|
+
let SocketService = class SocketService {
|
|
20
|
+
constructor(configService) {
|
|
21
|
+
this.configService = configService;
|
|
22
|
+
this.logsObservable = new ReplaySubject_1.ReplaySubject(20);
|
|
23
|
+
var socket = this.socket = this.connect(this._getSocketPath());
|
|
24
|
+
this.configObservable = Observable_1.Observable.fromEvent(socket, "config").map(c => new config_1.Config(c)).publishBehavior(new config_1.Config());
|
|
25
|
+
this.reqObservable = Observable_1.Observable.fromEvent(socket, "request");
|
|
26
|
+
this.resObservable = Observable_1.Observable.fromEvent(socket, "response");
|
|
27
|
+
this.reqBodyChunkObservable = Observable_1.Observable.fromEvent(socket, "request-body-chunk");
|
|
28
|
+
this.resBodyChunkObservable = Observable_1.Observable.fromEvent(socket, "response-body-chunk");
|
|
29
|
+
this.reqBodyEndObservable = Observable_1.Observable.fromEvent(socket, "request-body-end");
|
|
30
|
+
this.resBodyEndObservable = Observable_1.Observable.fromEvent(socket, "response-body-end");
|
|
31
|
+
this.connectStatusObservable = Observable_1.Observable.merge(Observable_1.Observable.fromEvent(socket, "connect", () => true), Observable_1.Observable.fromEvent(socket, "disconnect", () => false)).publishBehavior(false);
|
|
32
|
+
this.connectConnectables([
|
|
33
|
+
this.configObservable,
|
|
34
|
+
this.connectStatusObservable
|
|
35
|
+
]);
|
|
36
|
+
this.configObservable.subscribe((conf) => conf && this.log(`new config received`));
|
|
37
|
+
}
|
|
38
|
+
connectConnectables(observables) {
|
|
39
|
+
observables.forEach(c => c.connect());
|
|
40
|
+
}
|
|
41
|
+
log(str) {
|
|
42
|
+
this.logsObservable.next(str);
|
|
43
|
+
}
|
|
44
|
+
connect(socketPath) {
|
|
45
|
+
this.log(`trying to connect to ${socketPath}`);
|
|
46
|
+
var _socket = io.connect(socketPath, {
|
|
47
|
+
reconnectionAttempts: 2,
|
|
48
|
+
transports: ["websocket"]
|
|
49
|
+
});
|
|
50
|
+
_socket.on("connect", () => this.log(`connected`));
|
|
51
|
+
_socket.on("disconnect", (reason) => this.log(`disconnect: ${reason}`));
|
|
52
|
+
_socket.on("connect_error", (err) => this.log(`connect_error: ${err}`));
|
|
53
|
+
_socket.on("connect_timeout", (err) => this.log(`connect_timeout: ${err}`));
|
|
54
|
+
_socket.on("reconnect_error", (err) => this.log(`reconnect_error: ${err}`));
|
|
55
|
+
_socket.on("reconnecting", (err) => this.log(`reconnecting: ${err}`));
|
|
56
|
+
_socket.on("reconnect_failed", (err) => {
|
|
57
|
+
this.log(`reconnect_failed: ${err}`);
|
|
58
|
+
_socket.io.uri = this._getSocketPath();
|
|
59
|
+
this.log(`trying to connect to ${_socket.io.uri}`);
|
|
60
|
+
_socket.io.connect();
|
|
61
|
+
});
|
|
62
|
+
return _socket;
|
|
63
|
+
}
|
|
64
|
+
getPort() {
|
|
65
|
+
var defPort = this.configService.DEFAULT_PORT;
|
|
66
|
+
try {
|
|
67
|
+
return this.configService.getConfig().port || defPort;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
this.log(err.message);
|
|
71
|
+
return defPort;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
_getSocketPath() {
|
|
75
|
+
return url.format({
|
|
76
|
+
hostname: "localhost",
|
|
77
|
+
protocol: "http",
|
|
78
|
+
port: this.getPort()
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
updateConfig(config) {
|
|
82
|
+
//will be mixin to current config in pro-xy-ws-api
|
|
83
|
+
this.log(`sendending config update`);
|
|
84
|
+
this.socket.emit("configupdate", config);
|
|
85
|
+
}
|
|
86
|
+
replaceConfig(config) {
|
|
87
|
+
this.log(`sendending config replace`);
|
|
88
|
+
this.socket.emit("configreplace", config);
|
|
89
|
+
}
|
|
90
|
+
sendKillSignal() {
|
|
91
|
+
this.socket.emit("kill");
|
|
92
|
+
}
|
|
93
|
+
connectToRemote() {
|
|
94
|
+
var path = prompt("Remote path (e.g. http://server:8000)");
|
|
95
|
+
if (!path) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.socket.io.close();
|
|
99
|
+
this.socket.io.uri = path;
|
|
100
|
+
this.socket.io.skipReconnect = false;
|
|
101
|
+
this.log(`trying to connect to ${path}`);
|
|
102
|
+
this.socket.io.reconnect();
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
SocketService = __decorate([
|
|
106
|
+
core_1.Injectable(),
|
|
107
|
+
__metadata("design:paramtypes", [config_service_1.ConfigService])
|
|
108
|
+
], SocketService);
|
|
109
|
+
exports.SocketService = SocketService;
|
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { Observable } from 'rxjs/Observable';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
|
4
|
-
import { Subject } from 'rxjs/Subject';
|
|
5
|
-
import { ReplaySubject } from 'rxjs/ReplaySubject';
|
|
6
|
-
import { ConnectableObservable } from 'rxjs/observable/ConnectableObservable';
|
|
7
|
-
import { Req, Res } from '../model/http';
|
|
8
|
-
import { Config } from '../model/config';
|
|
9
|
-
import { ConfigService } from './config.service';
|
|
10
|
-
import * as io from "socket.io-client";
|
|
11
|
-
|
|
12
|
-
var url = nw.require("url");
|
|
13
|
-
|
|
14
|
-
@Injectable()
|
|
15
|
-
export class SocketService {
|
|
16
|
-
|
|
17
|
-
private socket: any
|
|
18
|
-
|
|
19
|
-
logsObservable: Observable<string>
|
|
20
|
-
configObservable: Observable<Config>
|
|
21
|
-
connectStatusObservable: Observable<boolean>
|
|
22
|
-
|
|
23
|
-
reqObservable: Observable<Req>
|
|
24
|
-
resObservable: Observable<Res>
|
|
25
|
-
reqBodyChunkObservable: Observable<any>
|
|
26
|
-
resBodyChunkObservable: Observable<any>
|
|
27
|
-
reqBodyEndObservable: Observable<any>
|
|
28
|
-
resBodyEndObservable: Observable<any>
|
|
29
|
-
|
|
30
|
-
constructor(private configService: ConfigService) {
|
|
31
|
-
|
|
32
|
-
this.logsObservable = new ReplaySubject(20);
|
|
33
|
-
|
|
34
|
-
var socket = this.socket = this.connect(this._getSocketPath());
|
|
35
|
-
this.configObservable = Observable.fromEvent(socket, "config").map(c => new Config(c)).publishBehavior(new Config());
|
|
36
|
-
this.reqObservable = Observable.fromEvent(socket, "request");
|
|
37
|
-
this.resObservable = Observable.fromEvent(socket, "response");
|
|
38
|
-
|
|
39
|
-
this.reqBodyChunkObservable = Observable.fromEvent(socket, "request-body-chunk");
|
|
40
|
-
this.resBodyChunkObservable = Observable.fromEvent(socket, "response-body-chunk");
|
|
41
|
-
this.reqBodyEndObservable = Observable.fromEvent(socket, "request-body-end");
|
|
42
|
-
this.resBodyEndObservable = Observable.fromEvent(socket, "response-body-end");
|
|
43
|
-
|
|
44
|
-
this.connectStatusObservable = Observable.merge(
|
|
45
|
-
Observable.fromEvent(socket, "connect", () => true),
|
|
46
|
-
Observable.fromEvent(socket, "disconnect", () => false)
|
|
47
|
-
).publishBehavior(false);
|
|
48
|
-
|
|
49
|
-
this.connectConnectables([
|
|
50
|
-
this.configObservable,
|
|
51
|
-
this.connectStatusObservable
|
|
52
|
-
]);
|
|
53
|
-
|
|
54
|
-
this.configObservable.subscribe((conf) => conf && this.log(`new config received`));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
private connectConnectables(observables: any[]) {
|
|
58
|
-
(<ConnectableObservable<any>[]>observables).forEach(c => c.connect());
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private log(str) {
|
|
62
|
-
(<Subject<string>>this.logsObservable).next(str);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
private connect(socketPath) {
|
|
66
|
-
this.log(`trying to connect to ${socketPath}`);
|
|
67
|
-
var _socket = io.connect(socketPath, {
|
|
68
|
-
reconnectionAttempts: 2,
|
|
69
|
-
transports: ["websocket"]
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
_socket.on("connect", () => this.log(`connected`));
|
|
73
|
-
_socket.on("disconnect", (reason) => this.log(`disconnect: ${reason}`));
|
|
74
|
-
_socket.on("connect_error", (err) => this.log(`connect_error: ${err}`));
|
|
75
|
-
_socket.on("connect_timeout", (err) => this.log(`connect_timeout: ${err}`));
|
|
76
|
-
_socket.on("reconnect_error", (err) => this.log(`reconnect_error: ${err}`));
|
|
77
|
-
_socket.on("reconnecting", (err) => this.log(`reconnecting: ${err}`));
|
|
78
|
-
_socket.on("reconnect_failed", (err) => {
|
|
79
|
-
this.log(`reconnect_failed: ${err}`);
|
|
80
|
-
_socket.io.uri = this._getSocketPath();
|
|
81
|
-
this.log(`trying to connect to ${_socket.io.uri}`);
|
|
82
|
-
_socket.io.connect();
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
return _socket;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
private getPort() {
|
|
89
|
-
var defPort = this.configService.DEFAULT_PORT;
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
return this.configService.getConfig().port || defPort;
|
|
93
|
-
} catch (err) {
|
|
94
|
-
this.log(err.message);
|
|
95
|
-
return defPort;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
private _getSocketPath() {
|
|
100
|
-
return url.format({
|
|
101
|
-
hostname: "localhost",
|
|
102
|
-
protocol: "http",
|
|
103
|
-
port: this.getPort()
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
updateConfig(config) {
|
|
108
|
-
//will be mixin to current config in pro-xy-ws-api
|
|
109
|
-
this.log(`sendending config update`);
|
|
110
|
-
this.socket.emit("configupdate", config);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
replaceConfig(config) {
|
|
114
|
-
this.log(`sendending config replace`);
|
|
115
|
-
this.socket.emit("configreplace", config);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
sendKillSignal() {
|
|
119
|
-
this.socket.emit("kill");
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
connectToRemote() {
|
|
123
|
-
var path = prompt("Remote path (e.g. http://server:8000)");
|
|
124
|
-
if (!path) { return; }
|
|
125
|
-
this.socket.io.close();
|
|
126
|
-
this.socket.io.uri = path;
|
|
127
|
-
this.socket.io.skipReconnect = false;
|
|
128
|
-
this.log(`trying to connect to ${path}`);
|
|
129
|
-
this.socket.io.reconnect();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { Observable } from 'rxjs/Observable';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
|
4
|
+
import { Subject } from 'rxjs/Subject';
|
|
5
|
+
import { ReplaySubject } from 'rxjs/ReplaySubject';
|
|
6
|
+
import { ConnectableObservable } from 'rxjs/observable/ConnectableObservable';
|
|
7
|
+
import { Req, Res } from '../model/http';
|
|
8
|
+
import { Config } from '../model/config';
|
|
9
|
+
import { ConfigService } from './config.service';
|
|
10
|
+
import * as io from "socket.io-client";
|
|
11
|
+
|
|
12
|
+
var url = nw.require("url");
|
|
13
|
+
|
|
14
|
+
@Injectable()
|
|
15
|
+
export class SocketService {
|
|
16
|
+
|
|
17
|
+
private socket: any
|
|
18
|
+
|
|
19
|
+
logsObservable: Observable<string>
|
|
20
|
+
configObservable: Observable<Config>
|
|
21
|
+
connectStatusObservable: Observable<boolean>
|
|
22
|
+
|
|
23
|
+
reqObservable: Observable<Req>
|
|
24
|
+
resObservable: Observable<Res>
|
|
25
|
+
reqBodyChunkObservable: Observable<any>
|
|
26
|
+
resBodyChunkObservable: Observable<any>
|
|
27
|
+
reqBodyEndObservable: Observable<any>
|
|
28
|
+
resBodyEndObservable: Observable<any>
|
|
29
|
+
|
|
30
|
+
constructor(private configService: ConfigService) {
|
|
31
|
+
|
|
32
|
+
this.logsObservable = new ReplaySubject(20);
|
|
33
|
+
|
|
34
|
+
var socket = this.socket = this.connect(this._getSocketPath());
|
|
35
|
+
this.configObservable = Observable.fromEvent(socket, "config").map(c => new Config(c)).publishBehavior(new Config());
|
|
36
|
+
this.reqObservable = Observable.fromEvent(socket, "request");
|
|
37
|
+
this.resObservable = Observable.fromEvent(socket, "response");
|
|
38
|
+
|
|
39
|
+
this.reqBodyChunkObservable = Observable.fromEvent(socket, "request-body-chunk");
|
|
40
|
+
this.resBodyChunkObservable = Observable.fromEvent(socket, "response-body-chunk");
|
|
41
|
+
this.reqBodyEndObservable = Observable.fromEvent(socket, "request-body-end");
|
|
42
|
+
this.resBodyEndObservable = Observable.fromEvent(socket, "response-body-end");
|
|
43
|
+
|
|
44
|
+
this.connectStatusObservable = Observable.merge(
|
|
45
|
+
Observable.fromEvent(socket, "connect", () => true),
|
|
46
|
+
Observable.fromEvent(socket, "disconnect", () => false)
|
|
47
|
+
).publishBehavior(false);
|
|
48
|
+
|
|
49
|
+
this.connectConnectables([
|
|
50
|
+
this.configObservable,
|
|
51
|
+
this.connectStatusObservable
|
|
52
|
+
]);
|
|
53
|
+
|
|
54
|
+
this.configObservable.subscribe((conf) => conf && this.log(`new config received`));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private connectConnectables(observables: any[]) {
|
|
58
|
+
(<ConnectableObservable<any>[]>observables).forEach(c => c.connect());
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private log(str) {
|
|
62
|
+
(<Subject<string>>this.logsObservable).next(str);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private connect(socketPath) {
|
|
66
|
+
this.log(`trying to connect to ${socketPath}`);
|
|
67
|
+
var _socket = io.connect(socketPath, {
|
|
68
|
+
reconnectionAttempts: 2,
|
|
69
|
+
transports: ["websocket"]
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
_socket.on("connect", () => this.log(`connected`));
|
|
73
|
+
_socket.on("disconnect", (reason) => this.log(`disconnect: ${reason}`));
|
|
74
|
+
_socket.on("connect_error", (err) => this.log(`connect_error: ${err}`));
|
|
75
|
+
_socket.on("connect_timeout", (err) => this.log(`connect_timeout: ${err}`));
|
|
76
|
+
_socket.on("reconnect_error", (err) => this.log(`reconnect_error: ${err}`));
|
|
77
|
+
_socket.on("reconnecting", (err) => this.log(`reconnecting: ${err}`));
|
|
78
|
+
_socket.on("reconnect_failed", (err) => {
|
|
79
|
+
this.log(`reconnect_failed: ${err}`);
|
|
80
|
+
_socket.io.uri = this._getSocketPath();
|
|
81
|
+
this.log(`trying to connect to ${_socket.io.uri}`);
|
|
82
|
+
_socket.io.connect();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
return _socket;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private getPort() {
|
|
89
|
+
var defPort = this.configService.DEFAULT_PORT;
|
|
90
|
+
|
|
91
|
+
try {
|
|
92
|
+
return this.configService.getConfig().port || defPort;
|
|
93
|
+
} catch (err) {
|
|
94
|
+
this.log(err.message);
|
|
95
|
+
return defPort;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private _getSocketPath() {
|
|
100
|
+
return url.format({
|
|
101
|
+
hostname: "localhost",
|
|
102
|
+
protocol: "http",
|
|
103
|
+
port: this.getPort()
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
updateConfig(config) {
|
|
108
|
+
//will be mixin to current config in pro-xy-ws-api
|
|
109
|
+
this.log(`sendending config update`);
|
|
110
|
+
this.socket.emit("configupdate", config);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
replaceConfig(config) {
|
|
114
|
+
this.log(`sendending config replace`);
|
|
115
|
+
this.socket.emit("configreplace", config);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
sendKillSignal() {
|
|
119
|
+
this.socket.emit("kill");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
connectToRemote() {
|
|
123
|
+
var path = prompt("Remote path (e.g. http://server:8000)");
|
|
124
|
+
if (!path) { return; }
|
|
125
|
+
this.socket.io.close();
|
|
126
|
+
this.socket.io.uri = path;
|
|
127
|
+
this.socket.io.skipReconnect = false;
|
|
128
|
+
this.log(`trying to connect to ${path}`);
|
|
129
|
+
this.socket.io.reconnect();
|
|
130
|
+
}
|
|
131
|
+
}
|