@interopio/bridge 0.0.1-alpha → 0.0.3-beta

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.
Files changed (84) hide show
  1. package/bin/bridge.js +1 -1
  2. package/dist/main.js +2139 -0
  3. package/dist/main.js.map +7 -0
  4. package/package.json +9 -6
  5. package/gen/instance/GeneratedBuildInfo.ts +0 -4
  6. package/src/cluster/Address.ts +0 -57
  7. package/src/cluster/Cluster.ts +0 -13
  8. package/src/cluster/Endpoint.ts +0 -5
  9. package/src/cluster/Member.ts +0 -9
  10. package/src/cluster/MembershipListener.ts +0 -6
  11. package/src/config/Config.ts +0 -100
  12. package/src/config/DiscoveryConfig.ts +0 -21
  13. package/src/config/Duration.ts +0 -168
  14. package/src/config/KubernetesConfig.ts +0 -7
  15. package/src/config/NamedDiscoveryConfig.ts +0 -17
  16. package/src/config/Properties.ts +0 -49
  17. package/src/config/index.ts +0 -1
  18. package/src/discovery/SimpleDiscoveryNode.ts +0 -14
  19. package/src/discovery/index.ts +0 -207
  20. package/src/discovery/multicast/MulticastDiscoveryStrategy.ts +0 -141
  21. package/src/discovery/multicast/MulticastDiscoveryStrategyFactory.ts +0 -30
  22. package/src/discovery/multicast/MulticastProperties.ts +0 -4
  23. package/src/discovery/settings.ts +0 -37
  24. package/src/error/RequestFailure.ts +0 -48
  25. package/src/gossip/ApplicationState.ts +0 -48
  26. package/src/gossip/EndpointState.ts +0 -141
  27. package/src/gossip/FailureDetector.ts +0 -235
  28. package/src/gossip/Gossiper.ts +0 -1133
  29. package/src/gossip/HeartbeatState.ts +0 -66
  30. package/src/gossip/Messenger.ts +0 -130
  31. package/src/gossip/VersionedValue.ts +0 -59
  32. package/src/index.ts +0 -3
  33. package/src/instance/AddressPicker.ts +0 -245
  34. package/src/instance/BridgeNode.ts +0 -141
  35. package/src/instance/ClusterTopologyIntentTracker.ts +0 -4
  36. package/src/io/VersionedSerializer.ts +0 -230
  37. package/src/io/util.ts +0 -117
  38. package/src/kubernetes/DnsEndpointResolver.ts +0 -70
  39. package/src/kubernetes/KubernetesApiEndpointResolver.ts +0 -111
  40. package/src/kubernetes/KubernetesApiProvider.ts +0 -75
  41. package/src/kubernetes/KubernetesClient.ts +0 -264
  42. package/src/kubernetes/KubernetesConfig.ts +0 -130
  43. package/src/kubernetes/KubernetesDiscoveryStrategy.ts +0 -30
  44. package/src/kubernetes/KubernetesDiscoveryStrategyFactory.ts +0 -71
  45. package/src/kubernetes/KubernetesEndpointResolver.ts +0 -43
  46. package/src/kubernetes/KubernetesProperties.ts +0 -22
  47. package/src/license/BridgeLicenseValidator.ts +0 -19
  48. package/src/license/LicenseValidator.ts +0 -114
  49. package/src/license/types.ts +0 -40
  50. package/src/logging.ts +0 -22
  51. package/src/main.mts +0 -53
  52. package/src/net/Action.ts +0 -143
  53. package/src/net/AddressSerializer.ts +0 -44
  54. package/src/net/ByteBufferAllocator.ts +0 -27
  55. package/src/net/FrameDecoder.ts +0 -314
  56. package/src/net/FrameEncoder.ts +0 -138
  57. package/src/net/HandshakeProtocol.ts +0 -143
  58. package/src/net/InboundConnection.ts +0 -108
  59. package/src/net/InboundConnectionInitiator.ts +0 -150
  60. package/src/net/InboundMessageHandler.ts +0 -377
  61. package/src/net/InboundSink.ts +0 -38
  62. package/src/net/Message.ts +0 -428
  63. package/src/net/OutboundConnection.ts +0 -1141
  64. package/src/net/OutboundConnectionInitiator.ts +0 -76
  65. package/src/net/RequestCallbacks.ts +0 -148
  66. package/src/net/ResponseHandler.ts +0 -30
  67. package/src/net/ShareableBytes.ts +0 -125
  68. package/src/net/internal/AsyncResourceExecutor.ts +0 -464
  69. package/src/net/internal/AsyncSocketPromise.ts +0 -37
  70. package/src/net/internal/channel/ChannelHandlerAdapter.ts +0 -99
  71. package/src/net/internal/channel/types.ts +0 -188
  72. package/src/utils/bigint.ts +0 -23
  73. package/src/utils/buffer.ts +0 -434
  74. package/src/utils/clock.ts +0 -148
  75. package/src/utils/collections.ts +0 -283
  76. package/src/utils/crc.ts +0 -39
  77. package/src/utils/internal/IpAddressUtil.ts +0 -161
  78. package/src/utils/memory/BufferPools.ts +0 -40
  79. package/src/utils/network.ts +0 -130
  80. package/src/utils/promise.ts +0 -38
  81. package/src/utils/uuid.ts +0 -5
  82. package/src/utils/vint.ts +0 -238
  83. package/src/version/MemberVersion.ts +0 -42
  84. package/src/version/Version.ts +0 -12
@@ -1,464 +0,0 @@
1
- import { globalClock } from '../../utils/clock.ts';
2
- import {type Comparator, PriorityQueue} from '../../utils/collections.ts';
3
- import {convert, type Unit} from '../../config/Duration.ts';
4
-
5
-
6
- export interface Runnable {
7
- run(): void
8
- }
9
-
10
- export interface Executor {
11
- execute(task: (...args: unknown[]) => void, ...args:unknown[]): void;
12
- }
13
-
14
- export interface ExecutorService extends Executor {
15
- readonly terminated: Promise<void>;
16
- shutdown(): Promise<void>;
17
- }
18
-
19
- export interface ScheduledExecutorService extends ExecutorService {
20
- schedule(task: Runnable, delay: bigint, unit: Unit): ScheduledTask;
21
- }
22
-
23
- export interface EventExecutorGroup extends ScheduledExecutorService {
24
- next(): EventExecutor;
25
- readonly terminated: Promise<void>;
26
- shutdown(): Promise<void>;
27
- }
28
-
29
- export interface EventExecutor extends EventExecutorGroup {
30
- readonly ordered: boolean
31
- readonly parent?: EventExecutorGroup
32
- inEventLoop(): boolean
33
- }
34
-
35
- export abstract class AbstractExecutorService implements ExecutorService {
36
-
37
- abstract execute(task: (...args:unknown[]) => void, ...args: unknown[]): void;
38
-
39
- abstract get terminated(): Promise<void>;
40
-
41
- abstract shutdown(): Promise<void>;
42
- }
43
- export abstract class AbstractEventExecutor extends AbstractExecutorService implements EventExecutor {
44
- private readonly _parent?: EventExecutorGroup
45
-
46
- constructor(parent?: EventExecutorGroup) {
47
- super();
48
- this._parent = parent;
49
-
50
- }
51
-
52
- get parent(): EventExecutorGroup {
53
- return this._parent;
54
- }
55
-
56
- schedule(task: Runnable, delay: bigint, unit: Unit): ScheduledTask {
57
- throw new Error('not implemented');
58
- }
59
-
60
- next(): EventExecutor {
61
- return this;
62
- }
63
-
64
- abstract inEventLoop(): boolean;
65
-
66
- abstract get ordered(): boolean
67
-
68
- static safeExecute(task: Runnable) {
69
- try {
70
- task.run();
71
- } catch (err) {
72
- // todo
73
- console.error(err);
74
- }
75
- }
76
- }
77
-
78
- export interface ScheduledTask {
79
- cancel(): boolean
80
- readonly deadline: PreciseTimeSpan
81
- readonly completed: Promise<void>
82
- }
83
-
84
- export interface ScheduledRunnable extends Runnable, ScheduledTask {
85
- run(): void
86
- }
87
-
88
- const SCHEDULED_TASK_COMPARATOR: Comparator<ScheduledTask> = (task1, task2) => {
89
- return PreciseTimeSpan.COMPARATOR(task1.deadline, task2.deadline);
90
- }
91
-
92
- export class PreciseTimeSpan {
93
- static readonly START_TIME = globalClock.nanoTime();
94
-
95
- static readonly ZERO = new PreciseTimeSpan(0n);
96
- static readonly MINUS_ONE = new PreciseTimeSpan(-1n);
97
-
98
- private readonly _nanos: bigint;
99
- private constructor(nanos: bigint) {
100
- this._nanos = nanos;
101
- }
102
- get nanos(): bigint {
103
- return this._nanos;
104
- }
105
- static fromNanos(nanos: bigint) {
106
- return new PreciseTimeSpan(nanos);
107
- }
108
-
109
- static fromStart() {
110
- return new PreciseTimeSpan(PreciseTimeSpan.getTimeChangeSinceStart());
111
- }
112
- static Deadline(nanosOrTimeSpan: bigint | PreciseTimeSpan) {
113
- if (typeof nanosOrTimeSpan === 'bigint') {
114
- return new PreciseTimeSpan(PreciseTimeSpan.getTimeChangeSinceStart() + nanosOrTimeSpan);
115
- }
116
- return new PreciseTimeSpan(PreciseTimeSpan.getTimeChangeSinceStart() + nanosOrTimeSpan.nanos);
117
- }
118
-
119
- static getTimeChangeSinceStart() {
120
- return globalClock.nanoTime() - PreciseTimeSpan.START_TIME;
121
- }
122
-
123
- public static readonly COMPARATOR: Comparator<PreciseTimeSpan> = (ts1 , ts2) => {
124
- return ts1.nanos > ts2.nanos ? 1 : (ts1.nanos < ts2.nanos ? -1 : 0);
125
- }
126
-
127
- }
128
-
129
-
130
- export abstract class AbstractScheduledEventExecutor extends AbstractEventExecutor {
131
-
132
- protected readonly _scheduledTaskQueue = new PriorityQueue<ScheduledRunnable>(SCHEDULED_TASK_COMPARATOR);
133
-
134
- protected static getNanos(): PreciseTimeSpan {
135
- return PreciseTimeSpan.fromStart();
136
- }
137
- protected isEmpty(taskQueue?: PriorityQueue<unknown>) {
138
- return taskQueue === undefined || taskQueue.size === 0;
139
- }
140
-
141
- protected pollScheduledTask(nanos?: PreciseTimeSpan): ScheduledRunnable | undefined {
142
- if (!this.inEventLoop()) {
143
- throw new Error(`not in event loop`);
144
- }
145
- nanos ??= AbstractScheduledEventExecutor.getNanos();
146
-
147
- const scheduledTask = this._scheduledTaskQueue.peek();
148
- if (scheduledTask === undefined) {
149
- return undefined;
150
- }
151
- if (scheduledTask.deadline.nanos < nanos.nanos) {
152
- this._scheduledTaskQueue.dequeue();
153
- return scheduledTask;
154
- }
155
- return undefined;
156
- }
157
-
158
- protected nextScheduledTaskNanos(){
159
- const nextScheduledTask = this.peekScheduledTask();
160
- return nextScheduledTask?.deadline ?? PreciseTimeSpan.MINUS_ONE;
161
- }
162
-
163
- protected peekScheduledTask(): ScheduledTask | undefined {
164
- if (this.isEmpty(this._scheduledTaskQueue)) {
165
- return undefined;
166
- }
167
- return this._scheduledTaskQueue.peek();
168
- }
169
-
170
- protected hasScheduledTasks(): boolean {
171
- const scheduledTask = this.peekScheduledTask();
172
- return scheduledTask !== undefined && scheduledTask.deadline.nanos <= PreciseTimeSpan.fromStart().nanos;
173
- }
174
-
175
- schedule(task: Runnable, delay: bigint, unit: Unit): ScheduledTask {
176
- return this.addSchedule(new RunnableScheduledTask(this, task, PreciseTimeSpan.Deadline(convert('nanoseconds', delay, unit))));
177
- }
178
-
179
- get ordered(): true {
180
- return true;
181
- }
182
-
183
- addSchedule(task: ScheduledRunnable): ScheduledRunnable {
184
- if (this.inEventLoop()) {
185
- this._scheduledTaskQueue.enqueue(task);
186
- }
187
- else {
188
- this.execute((e, t) => {
189
- (e as AbstractScheduledEventExecutor)._scheduledTaskQueue.enqueue(t as ScheduledRunnable);
190
- }, this, task);
191
- }
192
- return task;
193
- }
194
-
195
- removeScheduled(task: ScheduledRunnable): void {
196
- if (this.inEventLoop()) {
197
- this._scheduledTaskQueue.remove(task);
198
- }
199
- else {
200
- this.execute((e, t) => {
201
- (e as AbstractScheduledEventExecutor)._scheduledTaskQueue.remove(t as ScheduledRunnable);
202
- }, this, task);
203
- }
204
- }
205
- }
206
-
207
- export class PromiseCompletionSource<T = void> {
208
- private _resolve: (value: T) => void;
209
- private _reject: (reason?: any) => void;
210
- private readonly _promise: Promise<T> = new Promise<T>((resolve, reject) => {
211
- this._resolve = resolve;
212
- this._reject = reject;
213
- console.error('PromiseCompletionSource created', this._resolve);
214
- });
215
-
216
- private _result?: {value: T} | {reason: any} | {token: unknown}
217
-
218
- tryResolve(value: T) {
219
- if (this._result === undefined) {
220
- this._result = {value};
221
- this._resolve(value);
222
- return true;
223
- }
224
- return false;
225
- }
226
-
227
- resolve(value: T) {
228
- if (this._result !== undefined) {
229
- throw new Error('already in final state');
230
- }
231
- this._result = {value};
232
- this._resolve(value);
233
- }
234
-
235
- tryReject(reason?: any) {
236
- if (this._result === undefined) {
237
- this._result = {reason};
238
- this._reject(reason);
239
- return true;
240
- }
241
- return false;
242
- }
243
-
244
- reject(reason?: any) {
245
- if (this._result !== undefined) {
246
- throw new Error('already in final state');
247
- }
248
- this._result = {reason};
249
- this._reject(reason);
250
- }
251
-
252
- tryCancel(token?: unknown) {
253
- if (this._result === undefined) {
254
- this._result = {token};
255
- this._reject(new Error('canceled'));
256
- return true;
257
- }
258
- return false;
259
- }
260
-
261
- cancel(token?: unknown) {
262
- if (this._result !== undefined) {
263
- throw new Error('already in final state')
264
- }
265
- this._result = {token};
266
- this._reject(new Error('canceled'));
267
- }
268
-
269
- get promise() {
270
- return this._promise;
271
- }
272
- }
273
-
274
- export function rejectedPromise<T>(reason?: any): Promise<T> {
275
- const tcp = new PromiseCompletionSource<T>();
276
- tcp.tryReject(reason);
277
- return tcp.promise;
278
- }
279
- const resolved = Promise.resolve();
280
- export function resolvedPromise(): Promise<void> {
281
- return resolved;
282
- }
283
- export class TaskCancellablePromise extends PromiseCompletionSource {
284
-
285
- private static createVoidTcp() {
286
- const tcp = new TaskCancellablePromise();
287
- tcp.tryComplete();
288
- return tcp;
289
- }
290
- public static readonly Void = TaskCancellablePromise.createVoidTcp();
291
-
292
- tryComplete() {
293
- return this.tryResolve();
294
- }
295
-
296
- complete() {
297
- return super.resolve();
298
- }
299
-
300
- setUncancellable() {
301
- return true;
302
- }
303
- }
304
-
305
- abstract class AbstractScheduledTask implements ScheduledRunnable {
306
- protected readonly _executor: AbstractScheduledEventExecutor;
307
- private readonly _deadline: PreciseTimeSpan;
308
- protected readonly _completed: PromiseCompletionSource;
309
-
310
- static readonly CancellationProhibited: number = 1;
311
- static readonly CancellationRequested: number = 1 << 1;
312
- private _cancelState: number = 0;
313
-
314
- protected constructor(executor: AbstractScheduledEventExecutor, deadline: PreciseTimeSpan, completed: PromiseCompletionSource) {
315
- this._executor = executor;
316
- this._deadline = deadline;
317
- this._completed = completed;
318
- }
319
-
320
- get deadline() {
321
- return this._deadline;
322
- }
323
-
324
- cancel() {
325
- if (!this.atomicCancellationStateUpdate(AbstractScheduledTask.CancellationRequested, AbstractScheduledTask.CancellationProhibited)) {
326
- return false;
327
- }
328
- const canceled = this._completed.tryCancel();
329
- if (canceled) {
330
- this._executor.removeScheduled(this);
331
- }
332
- return canceled;
333
- }
334
-
335
- get completed(): Promise<void> {
336
- return this._completed.promise;
337
- }
338
-
339
- run() {
340
- if (this.trySetUncancellable()) {
341
- try {
342
- this.execute();
343
- this._completed.tryResolve();
344
- } catch (err) {
345
- this._completed.tryReject(err);
346
- }
347
- }
348
- }
349
-
350
- protected abstract execute(): void;
351
-
352
- trySetUncancellable() {
353
- return this.atomicCancellationStateUpdate(AbstractScheduledTask.CancellationProhibited, AbstractScheduledTask.CancellationRequested);
354
- }
355
-
356
- private atomicCancellationStateUpdate(newBits: number, illegalBits: number) {
357
- let cancelState = this._cancelState;
358
- let oldCancelState: number;
359
- do
360
- {
361
- oldCancelState = cancelState;
362
- if ((cancelState & illegalBits) !== 0) {
363
- return false;
364
- }
365
- cancelState = this._cancelState = (this._cancelState === cancelState ? cancelState | newBits : this._cancelState);
366
- } while (cancelState !== oldCancelState);
367
- return true;
368
- }
369
-
370
- }
371
-
372
- class RunnableScheduledTask extends AbstractScheduledTask {
373
- private readonly _action: Runnable;
374
- constructor(executor: AbstractScheduledEventExecutor, action: Runnable, deadline: PreciseTimeSpan) {
375
- super(executor, deadline, new TaskCancellablePromise())
376
- this._action = action;
377
- }
378
-
379
- protected execute() {
380
- this._action.run();
381
- }
382
- }
383
-
384
- export abstract class AbstractEventExecutorGroup implements EventExecutorGroup {
385
- abstract next(): EventExecutor;
386
- execute(task: (...args:unknown[]) => void, ...args: unknown[]): void {
387
- this.next().execute(task, ...args);
388
- }
389
- schedule(task: Runnable, delay: bigint, unit: Unit): ScheduledTask {
390
- return this.next().schedule(task, delay, unit);
391
- }
392
- abstract get terminated(): Promise<void>;
393
- abstract shutdown(): Promise<void>;
394
- }
395
-
396
- export type RejectedHandler = (task: () => void, executor: SingleThreadEventExecutor) => void;
397
- const REJECT: RejectedHandler = (task: () => void, executor: SingleThreadEventExecutor) => {throw new Error('reject');}
398
-
399
- export abstract class SingleThreadEventExecutor extends AbstractEventExecutor {
400
- static readonly States = {
401
- NOT_STARTED: 1,
402
- STARTED: 2,
403
- SHUTTING_DOWN: 3,
404
- SHUTDOWN: 4,
405
- TERMINATED: 5,
406
- }
407
- private _state: number = SingleThreadEventExecutor.States.NOT_STARTED;
408
- private readonly _maxPending: number;
409
- private readonly _rejectedHandler: RejectedHandler;
410
- private readonly _terminated: Promise<void>;
411
- private _completeTermination: () => void;
412
-
413
- constructor(executor: Executor, parent?: EventExecutorGroup, maxPending: number = Number.MAX_SAFE_INTEGER, rejectedHandler: RejectedHandler = REJECT) {
414
- super(parent);
415
- this._maxPending = Math.max(16, maxPending);
416
- this._rejectedHandler = rejectedHandler;
417
- this._terminated = new Promise<void>((resolve, reject) => {
418
- this._completeTermination = resolve;
419
- })
420
- }
421
-
422
- get ordered(): true {
423
- return true;
424
- }
425
-
426
- get terminated(): Promise<void> {
427
- return this._terminated;
428
- }
429
-
430
- async shutdown() {
431
- // todo
432
- this._completeTermination();
433
- return this._terminated;
434
- }
435
-
436
- public isShuttingDown() {
437
- return this._state >= SingleThreadEventExecutor.States.SHUTTING_DOWN;
438
- }
439
-
440
- execute(task: () => void) {
441
- setImmediate(() => {
442
- task();
443
- });
444
- }
445
-
446
- protected updateLastExecutionTime() {
447
-
448
- }
449
-
450
- protected confirmShutdown(): boolean {
451
- if (!this.isShuttingDown()) {
452
- return false;
453
- }
454
-
455
- if (!this.inEventLoop()) {
456
- throw new Error("not in event loop");
457
- }
458
-
459
- // todo
460
-
461
- return true;
462
- }
463
- }
464
-
@@ -1,37 +0,0 @@
1
- import {Socket} from 'node:net';
2
- import type {ByteBuffer} from '../../utils/buffer.ts';
3
- import {type FrameEncoder} from '../FrameEncoder.ts';
4
-
5
- export interface SocketPromise {
6
- readonly success: boolean
7
- readonly socket: Socket
8
- promise: Promise<void>
9
- }
10
-
11
- export function writeAndFlush(socket: Socket, sending: { selfContained: boolean, buffer: ByteBuffer }): SocketPromise {
12
- let success: boolean = false;
13
- const promise = new Promise<void>((resolve, reject) => {
14
- const encoder: FrameEncoder = socket['encoder'];
15
- const {buffer, selfContained} = sending;
16
- if (encoder) {
17
- encoder.encode(selfContained, buffer);
18
- }
19
- const array = new Uint8Array(buffer.limit);
20
- buffer.getUint8Array(array);
21
- success = socket.write(array, (err: Error) => {
22
- if (err) {
23
- reject(err);
24
- } else {
25
- resolve();
26
- }
27
- });
28
- })
29
- return new class implements SocketPromise {
30
- promise: Promise<void> = promise;
31
- readonly socket: Socket = socket;
32
-
33
- get success() {
34
- return success;
35
- }
36
- };
37
- }
@@ -1,99 +0,0 @@
1
- import type {
2
- ChannelHandler,
3
- ChannelHandlerContext,
4
- ChannelInboundHandler,
5
- ChannelOutboundHandler,
6
- SocketAddress
7
- } from './types.ts';
8
-
9
- export type ChannelHandlerMethods = keyof (ChannelHandler & ChannelInboundHandler & ChannelOutboundHandler);
10
-
11
- export abstract class ChannelHandlerAdapter implements ChannelHandler {
12
- static readonly Shareable: boolean = false;
13
- static readonly Skip: Array<ChannelHandlerMethods> = ['errorCaught'];
14
-
15
- handlerAdded(ctx: ChannelHandlerContext): void {
16
- // no-op
17
- }
18
-
19
- handlerRemoved(ctx: ChannelHandlerContext): void {
20
- // no-op
21
- }
22
-
23
- get shareable(): boolean {
24
- return false;
25
- }
26
-
27
- added: boolean = false;
28
- }
29
-
30
- export class ChannelOutboundHandlerAdapter extends ChannelHandlerAdapter implements ChannelOutboundHandler {
31
- static readonly Skip: Array<keyof ChannelOutboundHandler> = ['onBind', 'onConnect', 'onDisconnect', 'onClose', 'onDeregister', 'onRead', 'onWrite', 'onFlush'];
32
- onBind(ctx: ChannelHandlerContext, localAddress: SocketAddress): Promise<void> {
33
- return ctx.bind(localAddress);
34
- }
35
-
36
- onConnect(ctx: ChannelHandlerContext, remoteAddress: SocketAddress, localAddress: SocketAddress): Promise<void> {
37
- return ctx.connect(remoteAddress, localAddress);
38
- }
39
-
40
- onDisconnect(ctx: ChannelHandlerContext, ): Promise<void> {
41
- return ctx.disconnect();
42
- }
43
-
44
- onClose(ctx: ChannelHandlerContext, error?: Error): Promise<void> {
45
- return ctx.close(error);
46
- }
47
-
48
- onDeregister(ctx: ChannelHandlerContext): Promise<void> {
49
- return ctx.deregister();
50
- }
51
-
52
- onRead(ctx: ChannelHandlerContext): void {
53
- ctx.read();
54
- }
55
-
56
- onWrite(ctx: ChannelHandlerContext, message: unknown): Promise<void> {
57
- return ctx.write(message);
58
- }
59
-
60
- onFlush(ctx: ChannelHandlerContext): void {
61
- ctx.flush();
62
- }
63
- }
64
-
65
- export class ChannelInboundHandlerAdapter extends ChannelHandlerAdapter implements ChannelInboundHandler {
66
- static readonly Skip: Array<ChannelHandlerMethods> = ['channelRegistered', 'channelUnregistered', 'channelActive', 'channelInactive', 'channelRead', 'channelReadComplete', 'channelWritabilityChanged', 'errorCaught'];
67
-
68
- channelRegistered(ctx: ChannelHandlerContext) {
69
- ctx.fireChannelRegistered();
70
- }
71
-
72
- channelUnregistered(ctx: ChannelHandlerContext) {
73
- ctx.fireChannelUnregistered();
74
- }
75
-
76
- channelActive(ctx: ChannelHandlerContext) {
77
- ctx.fireChannelActive();
78
- }
79
-
80
- channelInactive(ctx: ChannelHandlerContext) {
81
- ctx.fireChannelInactive()
82
- }
83
-
84
- channelRead(ctx: ChannelHandlerContext, data: unknown) {
85
- ctx.fireChannelRead(data);
86
- }
87
-
88
- channelReadComplete(ctx: ChannelHandlerContext) {
89
- ctx.fireChannelReadComplete();
90
- }
91
-
92
- channelWritabilityChanged(ctx: ChannelHandlerContext) {
93
- ctx.fireChannelWritabilityChanged();
94
- }
95
-
96
- errorCaught(ctx: ChannelHandlerContext, error: Error) {
97
- ctx.fireErrorCaught(error);
98
- }
99
- }