Skip to content

Commit a7822c5

Browse files
committed
expose just eventSender
1 parent d6c3a15 commit a7822c5

2 files changed

Lines changed: 52 additions & 70 deletions

File tree

src/server/server.ts

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -518,15 +518,31 @@ namespace ts.server {
518518
}
519519
}
520520

521-
class SocketEventSender extends DefaultMessageSender {
521+
export class DefaultEventSender implements EventSender {
522+
constructor(protected host: ServerHost,
523+
protected byteLength: (buf: string, encoding?: string) => number,
524+
protected logger: Logger,
525+
protected canUseEvents: boolean) { }
526+
527+
public event = <T>(body: T, eventName: string) => {
528+
const ev: protocol.Event = {
529+
seq: 0,
530+
type: "event",
531+
event: eventName,
532+
body
533+
};
534+
defaultSend(this.host, this.byteLength, this.logger, this.canUseEvents, ev);
535+
}
536+
}
537+
538+
class SocketEventSender implements EventSender {
522539
private eventSocket: NodeSocket | undefined;
523540
private socketEventQueue: { body: any, eventName: string }[] | undefined;
524541

525-
constructor(host: ServerHost,
526-
byteLength: (buf: string, encoding?: string) => number,
527-
logger: Logger,
542+
constructor(private host: ServerHost,
543+
private byteLength: (buf: string, encoding?: string) => number,
544+
private logger: Logger,
528545
private eventPort: number) {
529-
super(host, byteLength, logger, /*canUseEvents*/ true);
530546

531547
const s = net.connect({ port: this.eventPort }, () => {
532548
this.eventSocket = s;
@@ -538,36 +554,36 @@ namespace ts.server {
538554
this.socketEventQueue = undefined;
539555
}
540556
});
557+
}
541558

542-
this.event = <T>(body: T, eventName: string) => {
543-
if (!this.eventSocket) {
544-
if (this.logger.hasLevel(LogLevel.verbose)) {
545-
this.logger.info(`eventPort: event "${eventName}" queued, but socket not yet initialized`);
546-
}
547-
(this.socketEventQueue || (this.socketEventQueue = [])).push({ body, eventName });
548-
return;
549-
}
550-
else {
551-
Debug.assert(this.socketEventQueue === undefined);
552-
this.writeToEventSocket(body, eventName);
559+
public event = <T>(body: T, eventName: string) => {
560+
if (!this.eventSocket) {
561+
if (this.logger.hasLevel(LogLevel.verbose)) {
562+
this.logger.info(`eventPort: event "${eventName}" queued, but socket not yet initialized`);
553563
}
554-
};
555-
}
564+
(this.socketEventQueue || (this.socketEventQueue = [])).push({ body, eventName });
565+
return;
566+
}
567+
else {
568+
Debug.assert(this.socketEventQueue === undefined);
569+
this.writeToEventSocket(body, eventName);
570+
}
571+
};
556572

557573
private writeToEventSocket(body: any, eventName: string): void {
558-
this.eventSocket.write(formatMessage({ seq: 0, type: "event", event: eventName, body }, this.logger, Buffer.byteLength, this.host.newLine), "utf8");
574+
this.eventSocket.write(formatMessage({ seq: 0, type: "event", event: eventName, body }, this.logger, this.byteLength, this.host.newLine), "utf8");
559575
}
560576
}
561577

562578
class IOSession extends Session {
563579
constructor(options: IoSessionOptions) {
564580
const { host, eventPort, globalTypingsCacheLocation, typingSafeListLocation, typesMapLocation, npmLocation, canUseEvents } = options;
565581

566-
const messageSender = eventPort && canUseEvents ? new SocketEventSender(host, Buffer.byteLength, logger, eventPort) : new DefaultMessageSender(host, Buffer.byteLength, logger, canUseEvents);
582+
const eventSender = eventPort && canUseEvents ? new SocketEventSender(host, Buffer.byteLength, logger, eventPort) : new DefaultEventSender(host, Buffer.byteLength, logger, canUseEvents);
567583

568584
const typingsInstaller = disableAutomaticTypingAcquisition
569585
? undefined
570-
: new NodeTypingsInstaller(telemetryEnabled, logger, host, globalTypingsCacheLocation, typingSafeListLocation, typesMapLocation, npmLocation, canUseEvents ? messageSender : undefined);
586+
: new NodeTypingsInstaller(telemetryEnabled, logger, host, globalTypingsCacheLocation, typingSafeListLocation, typesMapLocation, npmLocation, canUseEvents ? eventSender : undefined);
571587

572588
super({
573589
host,
@@ -579,7 +595,7 @@ namespace ts.server {
579595
hrtime: process.hrtime,
580596
logger,
581597
canUseEvents,
582-
messageSender,
598+
eventSender,
583599
globalPlugins: options.globalPlugins,
584600
pluginProbeLocations: options.pluginProbeLocations,
585601
allowLocalPluginLoads: options.allowLocalPluginLoads });

src/server/session.ts

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -239,20 +239,12 @@ namespace ts.server {
239239
}
240240
}
241241

242-
export type Event = <T>(body: T, eventName: string) => void;
243-
244242
export interface EventSender {
245-
event: Event;
246-
}
247-
248-
export type Send = (msg: protocol.Message) => void;
249-
250-
export interface MessageSender extends EventSender {
251-
send: Send;
252-
event: Event;
243+
event: <T>(body: T, eventName: string) => void;
253244
}
254245

255-
function defaultSend(
246+
/** @internal */
247+
export function defaultSend(
256248
host: ServerHost,
257249
byteLength: (buf: string, encoding?: string) => number,
258250
logger: Logger,
@@ -266,37 +258,6 @@ namespace ts.server {
266258
}
267259
host.write(formatMessage(msg, logger, byteLength, host.newLine));
268260
}
269-
270-
function defaultEvent<T>(
271-
host: ServerHost,
272-
byteLength: (buf: string, encoding?: string) => number,
273-
logger: Logger,
274-
canUseEvents: boolean,
275-
body: T, eventName: string): void {
276-
const ev: protocol.Event = {
277-
seq: 0,
278-
type: "event",
279-
event: eventName,
280-
body
281-
};
282-
defaultSend(host, byteLength, logger, canUseEvents, ev);
283-
}
284-
285-
export class DefaultMessageSender implements MessageSender {
286-
constructor(protected host: ServerHost,
287-
protected byteLength: (buf: string, encoding?: string) => number,
288-
protected logger: Logger,
289-
protected canUseEvents: boolean) { }
290-
291-
public send = (msg: protocol.Message) => {
292-
defaultSend(this.host, this.byteLength, this.logger, this.canUseEvents, msg);
293-
}
294-
295-
public event = <T>(body: T, eventName: string) => {
296-
defaultEvent(this.host, this.byteLength, this.logger, this.canUseEvents, body, eventName);
297-
}
298-
}
299-
300261
export interface SessionOptions {
301262
host: ServerHost;
302263
cancellationToken: ServerCancellationToken;
@@ -313,7 +274,7 @@ namespace ts.server {
313274
/**
314275
* An optional callback overriding the default behavior for sending messages.
315276
*/
316-
messageSender?: MessageSender;
277+
eventSender?: EventSender;
317278
eventHandler?: ProjectServiceEventHandler;
318279
throttleWaitMilliseconds?: number;
319280

@@ -322,7 +283,7 @@ namespace ts.server {
322283
allowLocalPluginLoads?: boolean;
323284
}
324285

325-
export class Session implements MessageSender {
286+
export class Session implements EventSender {
326287
private readonly gcTimer: GcTimer;
327288
protected projectService: ProjectService;
328289
private changeSeq = 0;
@@ -351,9 +312,8 @@ namespace ts.server {
351312

352313
const { throttleWaitMilliseconds } = opts;
353314

354-
if (opts.messageSender) {
355-
this.send = opts.messageSender.send;
356-
this.event = opts.messageSender.event;
315+
if (opts.eventSender) {
316+
this.event = opts.eventSender.event;
357317
}
358318

359319
this.eventHandler = this.canUseEvents
@@ -455,7 +415,13 @@ namespace ts.server {
455415
}
456416

457417
public event<T>(body: T, eventName: string): void {
458-
defaultEvent(this.host, this.byteLength, this.logger, this.canUseEvents, body, eventName);
418+
const ev: protocol.Event = {
419+
seq: 0,
420+
type: "event",
421+
event: eventName,
422+
body
423+
};
424+
this.send(ev);
459425
}
460426

461427
// For backwards-compatibility only.

0 commit comments

Comments
 (0)