@simplysm/service-client 13.0.99 → 14.0.1
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/dist/features/event-client.d.ts.map +1 -1
- package/dist/features/event-client.js +75 -67
- package/dist/features/event-client.js.map +1 -6
- package/dist/features/file-client.js +41 -39
- package/dist/features/file-client.js.map +1 -6
- package/dist/features/orm/orm-client-connector.js +37 -38
- package/dist/features/orm/orm-client-connector.js.map +1 -6
- package/dist/features/orm/orm-client-db-context-executor.d.ts.map +1 -1
- package/dist/features/orm/orm-client-db-context-executor.js +60 -60
- package/dist/features/orm/orm-client-db-context-executor.js.map +1 -6
- package/dist/features/orm/orm-connect-options.js +2 -1
- package/dist/features/orm/orm-connect-options.js.map +1 -6
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -6
- package/dist/protocol/client-protocol-wrapper.d.ts +1 -0
- package/dist/protocol/client-protocol-wrapper.d.ts.map +1 -1
- package/dist/protocol/client-protocol-wrapper.js +92 -70
- package/dist/protocol/client-protocol-wrapper.js.map +1 -6
- package/dist/service-client.d.ts +2 -0
- package/dist/service-client.d.ts.map +1 -1
- package/dist/service-client.js +113 -111
- package/dist/service-client.js.map +1 -6
- package/dist/transport/service-transport.js +121 -104
- package/dist/transport/service-transport.js.map +1 -6
- package/dist/transport/socket-provider.js +180 -155
- package/dist/transport/socket-provider.js.map +1 -6
- package/dist/types/connection-options.d.ts +1 -1
- package/dist/types/connection-options.d.ts.map +1 -1
- package/dist/types/connection-options.js +2 -1
- package/dist/types/connection-options.js.map +1 -6
- package/dist/types/progress.types.d.ts +1 -0
- package/dist/types/progress.types.d.ts.map +1 -1
- package/dist/types/progress.types.js +2 -1
- package/dist/types/progress.types.js.map +1 -6
- package/dist/workers/client-protocol.worker.js +38 -24
- package/dist/workers/client-protocol.worker.js.map +1 -6
- package/package.json +16 -9
- package/src/features/event-client.ts +19 -17
- package/src/features/file-client.ts +5 -5
- package/src/features/orm/orm-client-connector.ts +2 -2
- package/src/features/orm/orm-client-db-context-executor.ts +8 -7
- package/src/index.ts +5 -5
- package/src/protocol/client-protocol-wrapper.ts +24 -19
- package/src/service-client.ts +22 -15
- package/src/transport/service-transport.ts +19 -19
- package/src/transport/socket-provider.ts +38 -38
- package/src/types/connection-options.ts +1 -1
- package/src/types/progress.types.ts +1 -0
- package/src/workers/client-protocol.worker.ts +9 -9
- package/README.md +0 -126
- package/docs/features.md +0 -143
- package/docs/protocol.md +0 -29
- package/docs/service-client.md +0 -93
- package/docs/transport.md +0 -96
- package/docs/types.md +0 -55
|
@@ -1,112 +1,129 @@
|
|
|
1
1
|
import { EventEmitter, Uuid } from "@simplysm/core-common";
|
|
2
|
-
function createServiceTransport(socket, protocol) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _a, _b;
|
|
14
|
-
const uuid = Uuid.generate().toString();
|
|
15
|
-
const responsePromise = new Promise((resolve, reject) => {
|
|
16
|
-
pendingRequests.set(uuid, { resolve, reject, progress });
|
|
17
|
-
});
|
|
18
|
-
responsePromise.catch(() => {
|
|
2
|
+
export function createServiceTransport(socket, protocol) {
|
|
3
|
+
const emitter = new EventEmitter();
|
|
4
|
+
const pendingRequests = new Map();
|
|
5
|
+
// 응답 progress totalSize 저장 (완료 시 100% 전송용)
|
|
6
|
+
const responseProgressTotalSize = new Map();
|
|
7
|
+
socket.on("message", onMessage);
|
|
8
|
+
// 소켓 연결 끊김 시 메모리 해제를 위해 모든 대기 중인 요청을 reject
|
|
9
|
+
socket.on("state", (state) => {
|
|
10
|
+
if (state === "closed" || state === "reconnecting") {
|
|
11
|
+
cancelAllRequests("소켓 연결이 끊어졌습니다");
|
|
12
|
+
}
|
|
19
13
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
totalSize,
|
|
26
|
-
completedSize: 0
|
|
14
|
+
async function send(message, progress) {
|
|
15
|
+
const uuid = Uuid.generate().toString();
|
|
16
|
+
// 응답 대기 시작 (안전을 위해 요청 전송 전에 리스너 등록)
|
|
17
|
+
const responsePromise = new Promise((resolve, reject) => {
|
|
18
|
+
pendingRequests.set(uuid, { resolve, reject, progress });
|
|
27
19
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
// Promise가 고아가 되었을 때 unhandled rejection 방지 (예: HMR 정리 중)
|
|
21
|
+
responsePromise.catch(() => { });
|
|
22
|
+
// 요청 전송
|
|
23
|
+
try {
|
|
24
|
+
const { chunks, totalSize } = await protocol.encode(uuid, message);
|
|
25
|
+
// progress 초기화
|
|
26
|
+
if (chunks.length > 1) {
|
|
27
|
+
progress?.request?.({
|
|
28
|
+
uuid,
|
|
29
|
+
totalSize,
|
|
30
|
+
completedSize: 0,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// 전송
|
|
34
|
+
for (const chunk of chunks) {
|
|
35
|
+
await socket.send(chunk);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
// 전송 실패 시 즉시 정리
|
|
40
|
+
pendingRequests.get(uuid)?.reject(err);
|
|
41
|
+
pendingRequests.delete(uuid);
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
// 응답 결과 반환
|
|
45
|
+
return responsePromise;
|
|
36
46
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
47
|
+
async function onMessage(buf) {
|
|
48
|
+
const decoded = await protocol.decode(buf);
|
|
49
|
+
const listenerInfo = pendingRequests.get(decoded.uuid);
|
|
50
|
+
try {
|
|
51
|
+
if (decoded.type === "progress") {
|
|
52
|
+
// totalSize 기억 (완료 시 100% 전송용)
|
|
53
|
+
responseProgressTotalSize.set(decoded.uuid, decoded.totalSize);
|
|
54
|
+
listenerInfo?.progress?.response?.({
|
|
55
|
+
uuid: decoded.uuid,
|
|
56
|
+
totalSize: decoded.totalSize,
|
|
57
|
+
completedSize: decoded.completedSize,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (decoded.message.name === "progress") {
|
|
62
|
+
const body = decoded.message.body;
|
|
63
|
+
listenerInfo?.progress?.server?.({
|
|
64
|
+
uuid: decoded.uuid,
|
|
65
|
+
totalSize: body.totalSize,
|
|
66
|
+
completedSize: body.completedSize,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else if (decoded.message.name === "response") {
|
|
70
|
+
// 분할 메시지였을 경우 100% progress 전송
|
|
71
|
+
const totalSize = responseProgressTotalSize.get(decoded.uuid);
|
|
72
|
+
if (totalSize != null) {
|
|
73
|
+
responseProgressTotalSize.delete(decoded.uuid);
|
|
74
|
+
listenerInfo?.progress?.response?.({
|
|
75
|
+
uuid: decoded.uuid,
|
|
76
|
+
totalSize,
|
|
77
|
+
completedSize: totalSize,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// 응답 수신으로 Map에서 제거
|
|
81
|
+
pendingRequests.delete(decoded.uuid);
|
|
82
|
+
listenerInfo?.resolve(decoded.message.body);
|
|
83
|
+
}
|
|
84
|
+
else if (decoded.message.name === "error") {
|
|
85
|
+
// progress totalSize 정리
|
|
86
|
+
responseProgressTotalSize.delete(decoded.uuid);
|
|
87
|
+
// 에러 수신으로 Map에서 제거
|
|
88
|
+
pendingRequests.delete(decoded.uuid);
|
|
89
|
+
listenerInfo?.reject(toError(decoded.message.body));
|
|
90
|
+
}
|
|
91
|
+
else if (decoded.message.name === "reload") {
|
|
92
|
+
const body = decoded.message.body;
|
|
93
|
+
if (socket.clientName === body.clientName) {
|
|
94
|
+
emitter.emit("reload", body.changedFileSet);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (decoded.message.name === "evt:on") {
|
|
98
|
+
const body = decoded.message.body;
|
|
99
|
+
emitter.emit("event", { keys: body.keys, data: body.data });
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new Error("서버로부터 잘못된 메시지를 수신했습니다.");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
listenerInfo?.reject(err instanceof Error ? err : new Error(String(err)));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// 모든 대기 중인 요청 취소
|
|
111
|
+
function cancelAllRequests(reason) {
|
|
112
|
+
for (const listenerInfo of pendingRequests.values()) {
|
|
113
|
+
listenerInfo.reject(new Error(`요청 취소됨: ${reason}`));
|
|
85
114
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
listenerInfo == null ? void 0 : listenerInfo.reject(err instanceof Error ? err : new Error(String(err)));
|
|
115
|
+
pendingRequests.clear();
|
|
116
|
+
responseProgressTotalSize.clear();
|
|
89
117
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
118
|
+
function toError(body) {
|
|
119
|
+
let err = new Error(body.message);
|
|
120
|
+
err = Object.assign(err, body);
|
|
121
|
+
return err;
|
|
94
122
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
err = Object.assign(err, body);
|
|
101
|
-
return err;
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
on: emitter.on.bind(emitter),
|
|
105
|
-
off: emitter.off.bind(emitter),
|
|
106
|
-
send
|
|
107
|
-
};
|
|
123
|
+
return {
|
|
124
|
+
on: emitter.on.bind(emitter),
|
|
125
|
+
off: emitter.off.bind(emitter),
|
|
126
|
+
send,
|
|
127
|
+
};
|
|
108
128
|
}
|
|
109
|
-
|
|
110
|
-
createServiceTransport
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=service-transport.js.map
|
|
129
|
+
//# sourceMappingURL=service-transport.js.map
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/transport/service-transport.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"service-transport.js","sourceRoot":"","sources":["..\\..\\src\\transport\\service-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,169 +1,194 @@
|
|
|
1
1
|
import { EventEmitter, Uuid, wait } from "@simplysm/core-common";
|
|
2
2
|
import consola from "consola";
|
|
3
3
|
const logger = consola.withTag("service-client:SocketProvider");
|
|
4
|
-
function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
isManualClose = false;
|
|
21
|
-
try {
|
|
22
|
-
await createSocket();
|
|
23
|
-
startHeartbeat();
|
|
24
|
-
reconnectCount = 0;
|
|
25
|
-
emitter.emit("state", "connected");
|
|
26
|
-
} catch (err) {
|
|
27
|
-
throw err;
|
|
4
|
+
export function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
5
|
+
// 설정 상수
|
|
6
|
+
const HEARTBEAT_TIMEOUT = 30000; // 30초 동안 메시지가 없으면 연결 끊김으로 간주
|
|
7
|
+
const HEARTBEAT_INTERVAL = 5000; // 5초마다 ping 전송
|
|
8
|
+
const RECONNECT_DELAY = 3000; // 3초마다 재연결 시도
|
|
9
|
+
// 1바이트 버퍼 사전 할당 (메모리 절약)
|
|
10
|
+
const PING_PACKET = new Uint8Array([0x01]);
|
|
11
|
+
// 상태
|
|
12
|
+
let ws;
|
|
13
|
+
let isManualClose = false;
|
|
14
|
+
let reconnectCount = 0;
|
|
15
|
+
let heartbeatTimer;
|
|
16
|
+
let lastHeartbeatTime = Date.now();
|
|
17
|
+
const emitter = new EventEmitter();
|
|
18
|
+
function isConnected() {
|
|
19
|
+
return ws?.readyState === WebSocket.OPEN;
|
|
28
20
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
21
|
+
async function connect() {
|
|
22
|
+
if (isConnected())
|
|
23
|
+
return;
|
|
24
|
+
isManualClose = false;
|
|
25
|
+
try {
|
|
26
|
+
await createSocket();
|
|
27
|
+
startHeartbeat();
|
|
28
|
+
reconnectCount = 0; // 연결 성공 시 카운트 초기화
|
|
29
|
+
emitter.emit("state", "connected");
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
// 초기 연결 실패 시 예외를 던짐 (호출자가 처리할 수 있도록)
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
38
35
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
async function close() {
|
|
37
|
+
isManualClose = true;
|
|
38
|
+
stopHeartbeat();
|
|
39
|
+
const currentWs = ws;
|
|
40
|
+
if (currentWs != null) {
|
|
41
|
+
currentWs.close();
|
|
42
|
+
// 완전히 닫힐 때까지 대기 (정상 종료)
|
|
43
|
+
await wait.until(() => currentWs.readyState === WebSocket.CLOSED, 100, 30).catch(() => { });
|
|
44
|
+
}
|
|
45
|
+
emitter.emit("state", "closed");
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
async function send(data) {
|
|
48
|
+
try {
|
|
49
|
+
await wait.until(() => isConnected(), undefined, 50);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
throw new Error("서버에 연결되지 않았습니다. 인터넷 연결을 확인해 주세요.");
|
|
53
|
+
}
|
|
54
|
+
const currentWs = ws;
|
|
55
|
+
if (currentWs == null) {
|
|
56
|
+
throw new Error("WebSocket이 연결되지 않았습니다.");
|
|
57
|
+
}
|
|
58
|
+
currentWs.send(data);
|
|
50
59
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
async function createSocket() {
|
|
61
|
+
const clientId = Uuid.generate().toString();
|
|
62
|
+
const params = new URLSearchParams({
|
|
63
|
+
ver: "2",
|
|
64
|
+
clientId,
|
|
65
|
+
clientName,
|
|
66
|
+
});
|
|
67
|
+
await new Promise((resolve, reject) => {
|
|
68
|
+
const newWs = new WebSocket(`${url}?${params.toString()}`);
|
|
69
|
+
newWs.binaryType = "arraybuffer";
|
|
70
|
+
newWs.onopen = () => {
|
|
71
|
+
ws = newWs;
|
|
72
|
+
resolve();
|
|
73
|
+
};
|
|
74
|
+
newWs.onerror = (event) => {
|
|
75
|
+
// 연결 중 에러 발생 시 reject
|
|
76
|
+
if (!isConnected()) {
|
|
77
|
+
const errorEvent = event;
|
|
78
|
+
const msg = errorEvent.message;
|
|
79
|
+
reject(new Error(msg));
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
// 이 시점에서 ws는 항상 할당됨 (ws.onopen에서 할당됨)
|
|
84
|
+
const currentWs = ws;
|
|
85
|
+
if (currentWs == null) {
|
|
86
|
+
throw new Error("WebSocket 초기화 실패");
|
|
72
87
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
88
|
+
currentWs.onmessage = (event) => {
|
|
89
|
+
lastHeartbeatTime = Date.now(); // 하트비트 갱신
|
|
90
|
+
const data = event.data;
|
|
91
|
+
const bytes = new Uint8Array(data);
|
|
92
|
+
// Raw Ping/Pong 처리 (먼저 확인)
|
|
93
|
+
// 1바이트이고 첫 번째 바이트가 0x02 (Pong)이면 무시
|
|
94
|
+
// (하트비트 타임스탬프만 갱신되었으므로 추가 작업 불필요)
|
|
95
|
+
if (bytes.length === 1 && bytes[0] === 0x02)
|
|
96
|
+
return;
|
|
97
|
+
emitter.emit("message", bytes);
|
|
98
|
+
};
|
|
99
|
+
currentWs.onclose = async () => {
|
|
100
|
+
stopHeartbeat();
|
|
101
|
+
if (!isManualClose) {
|
|
102
|
+
await tryReconnect();
|
|
103
|
+
}
|
|
104
|
+
};
|
|
78
105
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
startHeartbeat();
|
|
105
|
-
reconnectCount = 0;
|
|
106
|
-
emitter.emit("state", "connected");
|
|
107
|
-
logger.info("WebSocket reconnected successfully");
|
|
108
|
-
return;
|
|
109
|
-
} catch {
|
|
110
|
-
}
|
|
106
|
+
async function tryReconnect() {
|
|
107
|
+
// 루프 기반 재연결 (스택 안전성을 위해 재귀 대신 사용)
|
|
108
|
+
while (reconnectCount < maxReconnectCount) {
|
|
109
|
+
reconnectCount++;
|
|
110
|
+
emitter.emit("state", "reconnecting");
|
|
111
|
+
logger.warn("WebSocket 연결 끊김. 재연결 시도 중...", {
|
|
112
|
+
reconnectCount,
|
|
113
|
+
maxReconnectCount,
|
|
114
|
+
});
|
|
115
|
+
await wait.time(RECONNECT_DELAY);
|
|
116
|
+
try {
|
|
117
|
+
await createSocket();
|
|
118
|
+
startHeartbeat();
|
|
119
|
+
reconnectCount = 0;
|
|
120
|
+
emitter.emit("state", "connected"); // 재연결 성공 알림
|
|
121
|
+
logger.info("WebSocket 재연결 성공");
|
|
122
|
+
return; // 재연결 성공 시 루프 종료
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// 실패 시 루프 계속
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 최대 재시도 횟수 초과
|
|
129
|
+
logger.error("재연결 재시도 한도 초과. 연결을 포기합니다.");
|
|
130
|
+
emitter.emit("state", "closed");
|
|
111
131
|
}
|
|
112
|
-
|
|
113
|
-
emitter.emit("state", "closed");
|
|
114
|
-
}
|
|
115
|
-
function startHeartbeat() {
|
|
116
|
-
stopHeartbeat();
|
|
117
|
-
lastHeartbeatTime = Date.now();
|
|
118
|
-
heartbeatTimer = setInterval(() => {
|
|
119
|
-
if (Date.now() - lastHeartbeatTime > HEARTBEAT_TIMEOUT) {
|
|
120
|
-
logger.warn("Heartbeat Timeout. Connection lost.");
|
|
132
|
+
function startHeartbeat() {
|
|
121
133
|
stopHeartbeat();
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
134
|
+
lastHeartbeatTime = Date.now();
|
|
135
|
+
heartbeatTimer = setInterval(() => {
|
|
136
|
+
// 타임아웃 확인
|
|
137
|
+
if (Date.now() - lastHeartbeatTime > HEARTBEAT_TIMEOUT) {
|
|
138
|
+
logger.warn("하트비트 타임아웃. 연결이 끊어졌습니다.");
|
|
139
|
+
// 반복 실행 방지를 위해 타임아웃 시 즉시 타이머 중지
|
|
140
|
+
stopHeartbeat();
|
|
141
|
+
// 소켓 종료를 기다리지 않음 (onclose가 발생하지 않을 수 있음); 강제 정리 후 재연결
|
|
142
|
+
if (ws != null) {
|
|
143
|
+
const tempWs = ws;
|
|
144
|
+
ws = undefined; // 연결 끊김으로 간주
|
|
145
|
+
// 이전 소켓에서 이벤트 핸들러 제거
|
|
146
|
+
// 늦게 발생하는 onclose 이벤트로 인한 중복 재연결 방지
|
|
147
|
+
tempWs.onclose = null;
|
|
148
|
+
tempWs.onerror = null;
|
|
149
|
+
tempWs.onmessage = null;
|
|
150
|
+
// 소켓 닫기 시도 (에러 무시)
|
|
151
|
+
try {
|
|
152
|
+
tempWs.close();
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// 무시
|
|
156
|
+
}
|
|
157
|
+
// 수동 종료가 아닌 경우 강제 재연결 로직 실행
|
|
158
|
+
if (!isManualClose) {
|
|
159
|
+
void tryReconnect();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// ping 전송
|
|
165
|
+
const currentWs = ws;
|
|
166
|
+
if (isConnected() && currentWs != null) {
|
|
167
|
+
try {
|
|
168
|
+
currentWs.send(PING_PACKET);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
logger.warn("ping 전송 실패", err);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}, HEARTBEAT_INTERVAL);
|
|
175
|
+
}
|
|
176
|
+
function stopHeartbeat() {
|
|
177
|
+
if (heartbeatTimer != null) {
|
|
178
|
+
clearInterval(heartbeatTimer);
|
|
179
|
+
heartbeatTimer = undefined;
|
|
144
180
|
}
|
|
145
|
-
}
|
|
146
|
-
}, HEARTBEAT_INTERVAL);
|
|
147
|
-
}
|
|
148
|
-
function stopHeartbeat() {
|
|
149
|
-
if (heartbeatTimer != null) {
|
|
150
|
-
clearInterval(heartbeatTimer);
|
|
151
|
-
heartbeatTimer = void 0;
|
|
152
181
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
};
|
|
182
|
+
return {
|
|
183
|
+
clientName,
|
|
184
|
+
get connected() {
|
|
185
|
+
return isConnected();
|
|
186
|
+
},
|
|
187
|
+
on: emitter.on.bind(emitter),
|
|
188
|
+
off: emitter.off.bind(emitter),
|
|
189
|
+
connect,
|
|
190
|
+
close,
|
|
191
|
+
send,
|
|
192
|
+
};
|
|
165
193
|
}
|
|
166
|
-
|
|
167
|
-
createSocketProvider
|
|
168
|
-
};
|
|
169
|
-
//# sourceMappingURL=socket-provider.js.map
|
|
194
|
+
//# sourceMappingURL=socket-provider.js.map
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/transport/socket-provider.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"socket-provider.js","sourceRoot":"","sources":["..\\..\\src\\transport\\socket-provider.ts"],"names":[],"mappings":"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"}
|