createWebSocketHandler function

Expression createWebSocketHandler(
  1. MetaWebSocketMethod webSocket, {
  2. required ServerRoute route,
  3. required ServerType returnType,
  4. required String classVarName,
})

Implementation

Expression createWebSocketHandler(
  MetaWebSocketMethod webSocket, {
  required ServerRoute route,
  required ServerType returnType,
  required String classVarName,
}) {
  final handler = createHandler(
    route: route,
    returnType: returnType,
    classVarName: 'controller',
    invokeController: false,
    webSocket: null,
    yieldData: true,
    inferredParams: {
      (CloseWebSocket).name: refer('context').property('close'),
      (AsyncWebSocketSender).name: _createAsyncWebSocketSender(returnType),
    },
  );

  return Method(
    (p) => p
      ..requiredParameters.add(Parameter((b) => b..name = 'context'))
      ..modifier = MethodModifier.async
      ..body = Block.of([
        declareFinal(
          'controller',
        ).assign(refer(classVarName).call([])).statement,
        const Code(''),
        refer((WebSocketHandler).name)
            .newInstance([], {
              if (webSocket.triggerOnConnect || !webSocket.mode.canReceive)
                'onConnect': handler,
              if (webSocket.mode.canReceive) 'onMessage': handler,
            })
            .returned
            .statement,
      ]),
  ).closure;
}