public override async Task Connect() { _log.LogInformation("-> ChatHost.Connect"); IsBusy = true; IsInError = false; IsConnected = false; RaiseUpdateEvent(); var ok = await InitializeSession(_sessionId); if (!ok) { // Error cases are handled in InitializeSession return; } ok = await InitializePeerInfo() && await CreateConnection(); if (ok) { ChatProxy.UpdateChats(CurrentSession, PeerInfo.Message.PeerId); _connection.On <string>(Constants.ReceiveChatsMessage, ReceiveChats); _connection.On <string>(Constants.RequestChatsMessage, SendChats); _connection.On <string>(Constants.LikeChatMessage, LikeChat); ok = await StartConnection(); } if (!ok) { _log.LogTrace("StartConnection NOT OK"); IsConnected = false; IsInError = true; IsBusy = false; ErrorStatus = "Error"; RaiseUpdateEvent(); return; } ok = await SendChats(); if (!ok) { _log.LogTrace("Error when sending chats"); IsConnected = false; IsInError = true; IsBusy = false; ErrorStatus = "Error sending chats"; RaiseUpdateEvent(); return; } Status = "Connected"; IsBusy = false; IsInError = false; IsConnected = true; RaiseUpdateEvent(); _log.LogInformation("ChatsHost.Connect ->"); }