private async Task Connect() { Logger.Information("Trying to connect to {endpoint}", endpoint); try { proto.DisposeSafe(); var arp = new AlienReaderProtocol(keepAliveTimeout, receiveTimeout); await arp.ConnectAndLogin(endpoint.Host, endpoint.Port, login, password); if (usePolling) { await arp.StartTagPolling(tags, errors, heartbeat); } else { await arp.StartTagStreamOld(tags); } arp.Disconnected += (s, e) => ScheduleReconnect(true); if (!arp.IsConnected) { ScheduleReconnect(); } else { proto = arp; Logger.Swallow(() => connected.OnNext(true)); } } catch (Exception ex) { Logger.Warning("Could not connect to {endpoint} {ex}", endpoint, ex); ScheduleReconnect(); errors.OnNext(ex); Logger.Swallow(() => connected.OnNext(false)); } try { if (proto.IsConnected) { await onConnected(proto.Api); } } catch (Exception ex) { Logger.Warning(ex, "OnConnected handler failed {ex}"); errors.OnNext(ex); Logger.Swallow(() => connected.OnNext(false)); } }
private async Task Connect() { Logger.Information("Trying to connect to {endpoint}", endpoint); try { proto?.Dispose(); var arp = new AlienReaderProtocol(keepAliveTimeout, receiveTimeout); await arp.ConnectAndLogin(endpoint.Address.ToString(), endpoint.Port, "alien", "password"); if (usePolling) { await arp.StartTagPolling(tags); } else { await arp.StartTagStreamOld(tags); } arp.Disconnected += (s, e) => ScheduleReconnect(true); if (!arp.IsConnected) { ScheduleReconnect(); } else { proto = arp; Logger.Swallow(() => connectionStatus.OnNext(new ConnectedEvent())); } } catch (Exception ex) { Logger.Warning("Could not connect to {endpoint} {ex}", endpoint, ex); ScheduleReconnect(); Logger.Swallow(() => connectionStatus.OnNext(new FailedToConnect(ex))); } try { if (proto.IsConnected) { await onConnected(proto.Api); } } catch (Exception ex) { Logger.Warning(ex, "OnConnected handler failed {ex}"); Logger.Swallow(() => connectionStatus.OnNext(new FailedToConnect(ex))); } }