Open Closed

handshake parsing error in flutter app SignalR integration #6890


User avatar
0
surajlokhandemmew created

ABP Framework version: v8.0.0

UI Type: MVC + Flutter

Database System: MongoDB

Tiered (for MVC) or Auth Server Separated (for Angular): no

Exception message and full stack trace: below is the error and hub code with flutter controller code

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Error parsing handshake response: 'type 'Null' is not a subtype of type 'String' in type cast'



public class ChatMaiHub : AbpHub
{
    private readonly IIdentityUserRepository _identityUserRepository;
    private readonly ILookupNormalizer _lookupNormalizer;

    public ChatMaiHub(IIdentityUserRepository identityUserRepository, ILookupNormalizer lookupNormalizer)
    {
        _identityUserRepository = identityUserRepository;
        _lookupNormalizer = lookupNormalizer;
    }

    public async Task SendMessage(string targetUserName, string message)
    {
        var targetUser = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName(targetUserName));

        message = $"{CurrentUser.UserName}: {message}";

        await Clients
            .User(targetUser.Id.ToString())
            .SendAsync("ReceiveMessage", message);
    }
}


below is flutter controller

import 'package:mailaundry/presentation/models/authview_model.dart';
import 'package:logging/logging.dart';
import 'package:signalr_netcore/signalr_client.dart';
import '../../mylaundryhub/mylaundryhub_gloabelclass/mylaundryhub_prefsname.dart';

class ChatController {
  late HubConnection _hubConnection;
  final Function(String message) onMessageReceived;
  AuthViewModel authViewModel = AuthViewModel();
  final transportProtLogger = Logger("SignalR - transport");
  final hubProtLogger = Logger("SignalR - hub");
  Future<String> getValidAccessToken() async {
    // Ensure this method handles the potential null case appropriately.
    return await authViewModel.getValidAccessToken() ?? '';
  }

  ChatController({required this.onMessageReceived}) {
    var httpOptions = HttpConnectionOptions(
        logger: transportProtLogger,
        transport: HttpTransportType.ServerSentEvents,
        accessTokenFactory: () async => await getValidAccessToken());

    _hubConnection = HubConnectionBuilder()
        .withUrl("$api/signalr-hubs/chat-mai", options: httpOptions)
        .configureLogging(hubProtLogger)
        .build();

    _hubConnection.on('ReceiveMessage', (arguments) {
      if (arguments != null && arguments.isNotEmpty) {
        onMessageReceived(arguments[0] as String);
      }
    });

    _hubConnection.start();
    //.catchError((error) {
    //print('Connection Failed. Error: $error');
    //});
  }

  Future<void> sendMessage(String targetUserName, String message) async {
    if (_hubConnection.state == HubConnectionState.Connected) {
      await _hubConnection
          .invoke('SendMessage', args: [targetUserName, message]);
    } else {
      print('Connection is not established. Message not sent.');
      // Optionally, implement a retry mechanism or inform the user.
    }
  }
}


3 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    We aren't familiar with Flutter. Do you get any errors on the backend app?

  • User Avatar
    0
    surajlokhandemmew created

    no i resolved the error basically had to turn on websocket in IIS, but as this question is already raised i am having another issue , can i ask here or should i raise another question??

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    Sure

Made with ❤️ on ABP v8.2.0-preview Updated on March 25, 2024, 15:11