11import { Socket } from "node:net"
22import * as crypto from "node:crypto"
3+ import EventEmitter from "node:events"
34
45import ipc from "node-ipc"
56
67import { ClientMessageType , ServerMessage , ServerMessageType , clientMessageSchema } from "./types.js"
78
8- export class IpcServer {
9+ type IpcServerEvents = {
10+ client : [ id : string ]
11+ }
12+
13+ export class IpcServer extends EventEmitter < IpcServerEvents > {
914 private readonly _socketPath : string
1015 private readonly _log : ( ...args : unknown [ ] ) => void
1116 private readonly _clients : Map < string , Socket >
1217
1318 private _isListening = false
1419
1520 constructor ( socketPath : string , log = console . log ) {
21+ super ( )
22+
1623 this . _socketPath = socketPath
1724 this . _log = log
1825 this . _clients = new Map ( )
@@ -37,6 +44,7 @@ export class IpcServer {
3744 this . _clients . set ( clientId , socket )
3845 this . log ( `[server#onConnect] clientId = ${ clientId } , # clients = ${ this . _clients . size } ` )
3946 this . send ( socket , { type : ServerMessageType . Hello , data : { clientId } } )
47+ this . emit ( "client" , clientId )
4048 }
4149
4250 private onMessage ( data : unknown , socket : Socket ) {
@@ -88,9 +96,18 @@ export class IpcServer {
8896 ipc . server . broadcast ( "message" , message )
8997 }
9098
91- public send ( socket : Socket , message : ServerMessage ) {
99+ public send ( client : string | Socket , message : ServerMessage ) {
92100 this . log ( "[server#send] message =" , message )
93- ipc . server . emit ( socket , "message" , message )
101+
102+ if ( typeof client === "string" ) {
103+ const socket = this . _clients . get ( client )
104+
105+ if ( socket ) {
106+ ipc . server . emit ( socket , "message" , message )
107+ }
108+ } else {
109+ ipc . server . emit ( client , "message" , message )
110+ }
94111 }
95112
96113 public get socketPath ( ) {
0 commit comments