debuggerInit method

void debuggerInit()

Initializes the local development debugger system. Sets up a WebSocket-based debugging interface that provides:

  • Real-time route inspection and listing
  • Language file reloading capabilities
  • Server restart functionality
  • Memory usage monitoring
  • Error and log message broadcasting
  • Console widget for debugging The debugger is only initialized when both config.enableLocalDebugger and config.isLocalDebug are true, and prevents duplicate initialization. Automatically adds debugging routes to the server:
  • /debugger - Main debugger interface
  • /debugger/console.js - Console widget JavaScript

Implementation

void debuggerInit() {
  if (config.enableLocalDebugger && config.isLocalDebug && !_isDebuggerInit) {
    _isDebuggerInit = true;
    debugger = SocketManager(
      this,
      routes: {
        'get_routes': SocketEvent(onMessage: (socket, data) async {
          var res = await exploreAllRoutes();
          debugger?.sendToAll({
            'routes': res,
          }, path: 'get_routes');
        }),
        'update_languages': SocketEvent(onMessage: (socket, data) async {
          appLanguages = await MultiLanguage(
            languagePath: config.languagePath,
            source: config.languageSource,
            dartLanguages: config.dartLanguages,
          ).init();
          await debugger?.sendToAll(
            {'message': 'Language updated'},
            path: 'update_languages',
          );
        }),
        'restart': SocketEvent(onMessage: (socket, data) async {
          await debugger?.sendToAll({}, path: 'restartStarted');
          await stop(force: true);
          await start();
          await getAllRoutes();
        }),
        'get_data': SocketEvent(onMessage: (socket, data) async {
          debugger?.sendToAll({
            'error': {
              'params': socket.rq.getParams(),
              'uri': socket.rq.uri.toString(),
              'buffer': socket.rq.buffer,
              'headers': socket.rq.headers.toString().split(';'),
              'session_cookies': socket.rq.getAllSession(),
            },
          }, path: 'console');
        }),
        'reinit': SocketEvent(onMessage: (socket, data) async {
          print("Server is restarting...");
          await restart();
          await getAllRoutes();
        }),
      },
    );

    Console.onError.add((error, type) {
      debugger?.sendToAll({
        'error': error.toString(),
        'type': type,
      }, path: "console");
    });

    Console.onLogging.add((error, type) {
      debugger?.sendToAll({
        'message': error.toString(),
        'type': type,
      }, path: "log");
    });

    FinchCron(
      schedule: FinchCron.evrySecond(1),
      delayFirstMoment: false,
      onCron: (index, cron) async {
        debugger?.sendToAll({
          'memory': ConvertSize.toLogicSizeString(ProcessInfo.currentRss),
          'max_memory': ConvertSize.toLogicSizeString(ProcessInfo.maxRss),
        }, path: "updateMemory");
      },
    ).start();
    _webRoutes.add((Request rq) async {
      rq.buffer.writeln(
          "<script src='${rq.url('/debugger/console.js')}'></script>");
      return [
        FinchRoute(
          path: 'debugger',
          index: () async {
            await debugger?.requestHandle(rq, userId: "LOCAL_USER");
            debugger?.sendToAll({
              'type': 'user_connected',
              'userId': "LOCAL_USER",
            });
            return rq.renderSocket();
          },
          children: [
            FinchRoute(
              path: 'console.js',
              index: () async {
                return rq.renderString(
                  text: ConsoleWidget().layout,
                  contentType: ContentType(
                    'text',
                    'javascript',
                    charset: 'utf-8',
                  ),
                );
              },
            )
          ],
        )
      ];
    });
  }
}