backend structure WIP

This commit is contained in:
Francesco Stasi 2022-03-02 17:55:11 +01:00 committed by Alberto Iannaccone
parent 289f9d7946
commit 2b2ea72643

View File

@ -40,16 +40,8 @@ import {
ArduinoDaemon, ArduinoDaemon,
ArduinoDaemonPath, ArduinoDaemonPath,
} from '../common/protocol/arduino-daemon'; } from '../common/protocol/arduino-daemon';
import { import { SerialServiceName } from './serial/serial-service-impl';
SerialServiceImpl,
SerialServiceName,
} from './serial/serial-service-impl';
import {
SerialService,
SerialServicePath,
SerialServiceClient,
} from '../common/protocol/serial-service';
import { MonitorClientProvider } from './serial/monitor-client-provider';
import { ConfigServiceImpl } from './config-service-impl'; import { ConfigServiceImpl } from './config-service-impl';
import { EnvVariablesServer as TheiaEnvVariablesServer } from '@theia/core/lib/common/env-variables'; import { EnvVariablesServer as TheiaEnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { EnvVariablesServer } from './theia/env-variables/env-variables-server'; import { EnvVariablesServer } from './theia/env-variables/env-variables-server';
@ -205,19 +197,25 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
// #endregion Theia customizations // #endregion Theia customizations
// a single MonitorManager is responsible for handling the actual connections to the pluggable monitors
bind(MonitorManager).toSelf().inSingletonScope();
// Serial client provider per connected frontend. // Serial client provider per connected frontend.
bind(ConnectionContainerModule).toConstantValue( bind(ConnectionContainerModule).toConstantValue(
ConnectionContainerModule.create(({ bind, bindBackendService }) => { ConnectionContainerModule.create(({ bind, bindBackendService }) => {
bind(MonitorClientProvider).toSelf().inSingletonScope(); bind(MonitorManagerProxyImpl).toSelf().inSingletonScope();
bind(SerialServiceImpl).toSelf().inSingletonScope(); bind(MonitorManagerProxy).toService(MonitorManagerProxyImpl);
bind(SerialService).toService(SerialServiceImpl); bindBackendService<MonitorManagerProxy, MonitorManagerProxyClient>(
bindBackendService<SerialService, SerialServiceClient>( MonitorManagerProxyPath,
SerialServicePath, MonitorManagerProxy,
SerialService, (monitorMgrProxy, client) => {
(service, client) => { monitorMgrProxy.setClient(client);
service.setClient(client); // when the client close the connection, the proxy is disposed.
client.onDidCloseConnection(() => service.dispose()); // when the MonitorManagerProxy is disposed, it informs the MonitorManager
return service; // telling him that it does not need an address/board anymore.
// the MonitorManager will then dispose the actual connection if there are no proxies using it
client.onDidCloseConnection(() => monitorMgrProxy.dispose());
return monitorMgrProxy;
} }
); );
}) })