@opensumi/ide-terminal-next 3.1.5-next-1719987623.0 → 3.1.5-next-1720063337.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.
@@ -1,10 +1,19 @@
1
1
  /// <reference types="node" />
2
2
  import { SocketConnectOpts } from 'net';
3
3
  import { PtyServiceManager } from './pty.manager';
4
+ interface PtyServiceOptions {
5
+ /**
6
+ * 重连时间间隔
7
+ */
8
+ reconnectInterval?: number;
9
+ }
4
10
  export declare class PtyServiceManagerRemote extends PtyServiceManager {
5
- constructor(connectOpts?: SocketConnectOpts);
11
+ private disposer;
12
+ private options;
13
+ constructor(connectOpts?: SocketConnectOpts, options?: PtyServiceOptions);
6
14
  private initRPCService;
7
15
  private initRemoteConnectionMode;
8
16
  initLocal(): void;
9
17
  }
18
+ export {};
10
19
  //# sourceMappingURL=pty.manager.remote.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pty.manager.remote.d.ts","sourceRoot":"","sources":["../../src/node/pty.manager.remote.ts"],"names":[],"mappings":";AAAA,OAAY,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAc7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAKlD,qBACa,uBAAwB,SAAQ,iBAAiB;gBAEpC,WAAW,GAAE,iBAA2D;IAKhG,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,wBAAwB;IAiCvB,SAAS;CAGnB"}
1
+ {"version":3,"file":"pty.manager.remote.d.ts","sourceRoot":"","sources":["../../src/node/pty.manager.remote.ts"],"names":[],"mappings":";AAAA,OAAY,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAc7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,UAAU,iBAAiB;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD,qBACa,uBAAwB,SAAQ,iBAAiB;IAC5D,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAoB;gBAIrB,WAAW,GAAE,iBAA2D,EACxE,OAAO,CAAC,EAAE,iBAAiB;IAUzC,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,wBAAwB;IA0DvB,SAAS;CAGnB"}
@@ -14,8 +14,9 @@ const pty_manager_1 = require("./pty.manager");
14
14
  // 具体需要根据应用场景,通过DI注入覆盖PtyServiceManager使用
15
15
  let PtyServiceManagerRemote = class PtyServiceManagerRemote extends pty_manager_1.PtyServiceManager {
16
16
  // Pty运行在单独的容器上,通过Socket连接,可以自定义Socket连接参数
17
- constructor(connectOpts = { port: common_1.PTY_SERVICE_PROXY_SERVER_PORT }) {
17
+ constructor(connectOpts = { port: common_1.PTY_SERVICE_PROXY_SERVER_PORT }, options) {
18
18
  super();
19
+ this.options = Object.assign({ reconnectInterval: 2000 }, options);
19
20
  this.initRemoteConnectionMode(connectOpts);
20
21
  }
21
22
  initRPCService(socket) {
@@ -53,32 +54,55 @@ let PtyServiceManagerRemote = class PtyServiceManagerRemote extends pty_manager_
53
54
  });
54
55
  }
55
56
  initRemoteConnectionMode(connectOpts) {
57
+ if (this.disposer) {
58
+ this.disposer.dispose();
59
+ }
60
+ this.disposer = new ide_core_common_1.Disposable();
56
61
  const socket = new net_1.default.Socket();
57
- let rpcServiceDisposable;
62
+ let reconnectTimer = null;
63
+ const reconnect = () => {
64
+ if (reconnectTimer) {
65
+ return;
66
+ }
67
+ reconnectTimer = global.setTimeout(() => {
68
+ this.logger.log('PtyServiceManagerRemote reconnect');
69
+ socket.destroy();
70
+ this.initRemoteConnectionMode(connectOpts);
71
+ }, this.options.reconnectInterval);
72
+ };
58
73
  // UNIX Socket 连接监听,成功连接后再创建RPC服务
59
- socket.on('connect', () => {
74
+ socket.once('connect', () => {
60
75
  this.logger.log('PtyServiceManagerRemote connected');
61
- rpcServiceDisposable === null || rpcServiceDisposable === void 0 ? void 0 : rpcServiceDisposable.dispose();
62
- rpcServiceDisposable = this.initRPCService(socket);
76
+ socket.setTimeout(0);
77
+ if (reconnectTimer) {
78
+ global.clearTimeout(reconnectTimer);
79
+ reconnectTimer = null;
80
+ }
81
+ this.disposer.addDispose(this.initRPCService(socket));
63
82
  });
64
83
  // UNIX Socket 连接失败或者断开,此时需要等待 1.5s 后重新连接
65
- socket.on('close', () => {
66
- this.logger.log('PtyServiceManagerRemote connect failed, will reconnect after 2s');
67
- rpcServiceDisposable === null || rpcServiceDisposable === void 0 ? void 0 : rpcServiceDisposable.dispose();
68
- global.setTimeout(() => {
69
- this.initRemoteConnectionMode(connectOpts);
70
- }, 2000);
84
+ socket.on('close', (hadError) => {
85
+ this.logger.log('PtyServiceManagerRemote socket close, hadError:', hadError);
86
+ reconnect();
71
87
  });
72
88
  // 处理 Socket 异常
73
89
  socket.on('error', (e) => {
74
- this.logger.warn('pty unix domain socket error ', e);
90
+ this.logger.warn('PtyServiceManagerRemote socket error ', e);
91
+ });
92
+ socket.on('end', () => {
93
+ this.logger.log('PtyServiceManagerRemote socket end');
94
+ });
95
+ socket.on('timeout', () => {
96
+ this.logger.log('PtyServiceManagerRemote socket timeout');
97
+ reconnect();
75
98
  });
76
99
  try {
100
+ this.logger.log('PtyServiceManagerRemote socket start connect');
77
101
  socket.connect(connectOpts);
78
102
  }
79
103
  catch (e) {
80
104
  // 连接错误的时候会抛出异常,此时自动重连,同时需要 catch 错误
81
- this.logger.warn(e);
105
+ this.logger.warn('PtyServiceManagerRemote socket connect error', e);
82
106
  }
83
107
  }
84
108
  initLocal() {
@@ -88,7 +112,8 @@ let PtyServiceManagerRemote = class PtyServiceManagerRemote extends pty_manager_
88
112
  PtyServiceManagerRemote = tslib_1.__decorate([
89
113
  (0, di_1.Injectable)(),
90
114
  tslib_1.__param(0, (0, di_1.Optional)()),
91
- tslib_1.__metadata("design:paramtypes", [Object])
115
+ tslib_1.__param(1, (0, di_1.Optional)()),
116
+ tslib_1.__metadata("design:paramtypes", [Object, Object])
92
117
  ], PtyServiceManagerRemote);
93
118
  exports.PtyServiceManagerRemote = PtyServiceManagerRemote;
94
119
  //# sourceMappingURL=pty.manager.remote.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pty.manager.remote.js","sourceRoot":"","sources":["../../src/node/pty.manager.remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pty.manager.remote.js","sourceRoot":"","sources":["../../src/node/pty.manager.remote.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensumi/ide-terminal-next",
3
- "version": "3.1.5-next-1719987623.0",
3
+ "version": "3.1.5-next-1720063337.0",
4
4
  "files": [
5
5
  "lib",
6
6
  "src"
@@ -17,10 +17,10 @@
17
17
  "url": "git@github.com:opensumi/core.git"
18
18
  },
19
19
  "dependencies": {
20
- "@opensumi/ide-connection": "3.1.5-next-1719987623.0",
21
- "@opensumi/ide-core-common": "3.1.5-next-1719987623.0",
22
- "@opensumi/ide-core-node": "3.1.5-next-1719987623.0",
23
- "@opensumi/ide-file-service": "3.1.5-next-1719987623.0",
20
+ "@opensumi/ide-connection": "3.1.5-next-1720063337.0",
21
+ "@opensumi/ide-core-common": "3.1.5-next-1720063337.0",
22
+ "@opensumi/ide-core-node": "3.1.5-next-1720063337.0",
23
+ "@opensumi/ide-file-service": "3.1.5-next-1720063337.0",
24
24
  "node-pty": "1.0.0",
25
25
  "os-locale": "^4.0.0",
26
26
  "xterm": "5.3.0",
@@ -30,18 +30,18 @@
30
30
  "xterm-addon-webgl": "0.15.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@opensumi/ide-components": "3.1.5-next-1719987623.0",
34
- "@opensumi/ide-core-browser": "3.1.5-next-1719987623.0",
35
- "@opensumi/ide-dev-tool": "3.1.5-next-1719987623.0",
36
- "@opensumi/ide-editor": "3.1.5-next-1719987623.0",
37
- "@opensumi/ide-main-layout": "3.1.5-next-1719987623.0",
38
- "@opensumi/ide-overlay": "3.1.5-next-1719987623.0",
39
- "@opensumi/ide-status-bar": "3.1.5-next-1719987623.0",
40
- "@opensumi/ide-theme": "3.1.5-next-1719987623.0",
41
- "@opensumi/ide-variable": "3.1.5-next-1719987623.0",
42
- "@opensumi/ide-workspace": "3.1.5-next-1719987623.0",
33
+ "@opensumi/ide-components": "3.1.5-next-1720063337.0",
34
+ "@opensumi/ide-core-browser": "3.1.5-next-1720063337.0",
35
+ "@opensumi/ide-dev-tool": "3.1.5-next-1720063337.0",
36
+ "@opensumi/ide-editor": "3.1.5-next-1720063337.0",
37
+ "@opensumi/ide-main-layout": "3.1.5-next-1720063337.0",
38
+ "@opensumi/ide-overlay": "3.1.5-next-1720063337.0",
39
+ "@opensumi/ide-status-bar": "3.1.5-next-1720063337.0",
40
+ "@opensumi/ide-theme": "3.1.5-next-1720063337.0",
41
+ "@opensumi/ide-variable": "3.1.5-next-1720063337.0",
42
+ "@opensumi/ide-workspace": "3.1.5-next-1720063337.0",
43
43
  "@types/http-proxy": "^1.17.2",
44
44
  "http-proxy": "^1.18.0"
45
45
  },
46
- "gitHead": "beb4aff9f663eae1c6d3c8a0f53030171575d2c5"
46
+ "gitHead": "79fe80038c35d984d47f4f969a88c4159d46614d"
47
47
  }
@@ -14,14 +14,31 @@ import {
14
14
 
15
15
  import { PtyServiceManager } from './pty.manager';
16
16
 
17
+ interface PtyServiceOptions {
18
+ /**
19
+ * 重连时间间隔
20
+ */
21
+ reconnectInterval?: number;
22
+ }
23
+
17
24
  // 双容器架构 - 在IDE容器中远程运行,与DEV Server上的PtyService通信
18
25
  // 继承自PtyServiceManager,覆写了创建PtyProxyService连接的方法,用于需要远程连接PtyService的场景
19
26
  // 具体需要根据应用场景,通过DI注入覆盖PtyServiceManager使用
20
27
  @Injectable()
21
28
  export class PtyServiceManagerRemote extends PtyServiceManager {
29
+ private disposer: Disposable;
30
+ private options: PtyServiceOptions;
31
+
22
32
  // Pty运行在单独的容器上,通过Socket连接,可以自定义Socket连接参数
23
- constructor(@Optional() connectOpts: SocketConnectOpts = { port: PTY_SERVICE_PROXY_SERVER_PORT }) {
33
+ constructor(
34
+ @Optional() connectOpts: SocketConnectOpts = { port: PTY_SERVICE_PROXY_SERVER_PORT },
35
+ @Optional() options?: PtyServiceOptions,
36
+ ) {
24
37
  super();
38
+ this.options = {
39
+ reconnectInterval: 2000,
40
+ ...options,
41
+ };
25
42
  this.initRemoteConnectionMode(connectOpts);
26
43
  }
27
44
 
@@ -62,35 +79,60 @@ export class PtyServiceManagerRemote extends PtyServiceManager {
62
79
  }
63
80
 
64
81
  private initRemoteConnectionMode(connectOpts: SocketConnectOpts) {
82
+ if (this.disposer) {
83
+ this.disposer.dispose();
84
+ }
85
+ this.disposer = new Disposable();
86
+
65
87
  const socket = new net.Socket();
66
- let rpcServiceDisposable: IDisposable | undefined;
88
+
89
+ let reconnectTimer: NodeJS.Timeout | null = null;
90
+ const reconnect = () => {
91
+ if (reconnectTimer) {return;}
92
+ reconnectTimer = global.setTimeout(() => {
93
+ this.logger.log('PtyServiceManagerRemote reconnect');
94
+ socket.destroy();
95
+ this.initRemoteConnectionMode(connectOpts);
96
+ }, this.options.reconnectInterval);
97
+ };
67
98
 
68
99
  // UNIX Socket 连接监听,成功连接后再创建RPC服务
69
- socket.on('connect', () => {
100
+ socket.once('connect', () => {
70
101
  this.logger.log('PtyServiceManagerRemote connected');
71
- rpcServiceDisposable?.dispose();
72
- rpcServiceDisposable = this.initRPCService(socket);
102
+ socket.setTimeout(0);
103
+ if (reconnectTimer) {
104
+ global.clearTimeout(reconnectTimer);
105
+ reconnectTimer = null;
106
+ }
107
+ this.disposer.addDispose(this.initRPCService(socket));
73
108
  });
74
109
 
75
110
  // UNIX Socket 连接失败或者断开,此时需要等待 1.5s 后重新连接
76
- socket.on('close', () => {
77
- this.logger.log('PtyServiceManagerRemote connect failed, will reconnect after 2s');
78
- rpcServiceDisposable?.dispose();
79
- global.setTimeout(() => {
80
- this.initRemoteConnectionMode(connectOpts);
81
- }, 2000);
111
+ socket.on('close', (hadError) => {
112
+ this.logger.log('PtyServiceManagerRemote socket close, hadError:', hadError);
113
+ reconnect();
82
114
  });
83
115
 
84
116
  // 处理 Socket 异常
85
117
  socket.on('error', (e) => {
86
- this.logger.warn('pty unix domain socket error ', e);
118
+ this.logger.warn('PtyServiceManagerRemote socket error ', e);
119
+ });
120
+
121
+ socket.on('end', () => {
122
+ this.logger.log('PtyServiceManagerRemote socket end');
123
+ });
124
+
125
+ socket.on('timeout', () => {
126
+ this.logger.log('PtyServiceManagerRemote socket timeout');
127
+ reconnect();
87
128
  });
88
129
 
89
130
  try {
131
+ this.logger.log('PtyServiceManagerRemote socket start connect');
90
132
  socket.connect(connectOpts);
91
133
  } catch (e) {
92
134
  // 连接错误的时候会抛出异常,此时自动重连,同时需要 catch 错误
93
- this.logger.warn(e);
135
+ this.logger.warn('PtyServiceManagerRemote socket connect error', e);
94
136
  }
95
137
  }
96
138