(port: number)
| 84 | } |
| 85 | |
| 86 | export function startDebugServer(port: number): Promise<IDisposable> { |
| 87 | return new Promise((resolve, reject) => { |
| 88 | const server = net |
| 89 | .createServer(async socket => { |
| 90 | const services = createTopLevelSessionContainer( |
| 91 | createGlobalContainer({ storagePath, isVsCode: false }), |
| 92 | ); |
| 93 | const binderDelegate: IBinderDelegate = { |
| 94 | async acquireDap(): Promise<DapConnection> { |
| 95 | // Note: we can make multi-session work through custom dap message: |
| 96 | // - spin up a separate server for this session; |
| 97 | // - ask ui part to create a session for us and connect to the port; |
| 98 | // - marshall target name changes across. |
| 99 | return connection; |
| 100 | }, |
| 101 | |
| 102 | async initAdapter(debugAdapter: DebugAdapter): Promise<boolean> { |
| 103 | await configurator.configure(debugAdapter); |
| 104 | return true; |
| 105 | }, |
| 106 | |
| 107 | releaseDap(): void { |
| 108 | // no-op |
| 109 | }, |
| 110 | }; |
| 111 | |
| 112 | const transport = new StreamDapTransport(socket, socket, services.get(ILogger)); |
| 113 | const connection = new DapConnection(transport, services.get(ILogger)); |
| 114 | new Binder(binderDelegate, connection, services, new TargetOrigin('targetOrigin')); |
| 115 | const configurator = new Configurator(connection.dap()); |
| 116 | }) |
| 117 | .on('error', reject) |
| 118 | .listen(port, () => { |
| 119 | console.log(`Debug server listening at ${(server.address() as net.AddressInfo).port}`); |
| 120 | resolve({ |
| 121 | dispose: () => { |
| 122 | server.close(); |
| 123 | }, |
| 124 | }); |
| 125 | }); |
| 126 | }); |
| 127 | } |
no test coverage detected