public async Task StartFresh() { Log("Starting fresh"); if (!InternetAvailable()) { Log("Internet not available. Exiting."); return; } if (Running) { Log("realtime client is already running"); return; } if (AppIsInBackground) { Log("Application is in background"); return; } if (Socket != null) { Shutdown(); await Task.Delay(350); } try { var connectPacket = new FbnsConnectPacket { Payload = await RealtimePayload.BuildPayload(_instaApi) }; Socket = new StreamSocket(); Socket.Control.KeepAlive = true; Socket.Control.NoDelay = true; Socket.Control.OutboundBufferSizeInBytes = 20 * 1024 * 1024; await Socket.ConnectAsync(new HostName(DEFAULT_HOST), "443", SocketProtectionLevel.Tls12); _inboundReader = new DataReader(Socket.InputStream); _outboundWriter = new DataWriter(Socket.OutputStream); _inboundReader.ByteOrder = ByteOrder.BigEndian; _inboundReader.InputStreamOptions = InputStreamOptions.Partial; _outboundWriter.ByteOrder = ByteOrder.BigEndian; _runningTokenSource = new CancellationTokenSource(); await FbnsPacketEncoder.EncodePacket(connectPacket, _outboundWriter); } catch (Exception e) { e.PrintInDebug(); Restart(); return; } StartPollingLoop(); }
public async Task StartFresh() { this.Log("Starting fresh"); if (!InternetAvailable()) { this.Log("Internet not available. Exiting."); return; } if (Running) { throw new Exception("Push client is already running"); } var connectPacket = new FbnsConnectPacket { Payload = await RealtimePayload.BuildPayload(_instaApi) }; Socket = new StreamSocket(); Socket.Control.KeepAlive = true; Socket.Control.NoDelay = true; Socket.Control.OutboundBufferSizeInBytes = 10 * 1024 * 1024; try { await Socket.ConnectAsync(new HostName(DEFAULT_HOST), "443", SocketProtectionLevel.Tls12); _inboundReader = new DataReader(Socket.InputStream); _outboundWriter = new DataWriter(Socket.OutputStream); _inboundReader.ByteOrder = ByteOrder.BigEndian; _inboundReader.InputStreamOptions = InputStreamOptions.Partial; _outboundWriter.ByteOrder = ByteOrder.BigEndian; _runningTokenSource = new CancellationTokenSource(); await FbnsPacketEncoder.EncodePacket(connectPacket, _outboundWriter); } catch (Exception e) { DebugLogger.LogExceptionX(e); Restart(); return; } StartPollingLoop(); }
public async Task StartFresh(bool withBG) { try { Log($"[{_instaApi.GetLoggedUser().UserName}] " + "Starting fresh"); var connectPacket = new FbnsConnectPacket { Payload = await PayloadProcessor.BuildPayload(ConnectionData) }; Socket = new StreamSocket(); Socket.Control.KeepAlive = true; Socket.Control.NoDelay = true; if (await RequestBackgroundAccess() && !withBG) { OnlyOnce = false; if (CanRunInBG()) { try { Socket.EnableTransferOwnership(_socketActivityTask.TaskId, SocketActivityConnectedStandbyAction.Wake); } catch (Exception connectedStandby) { Log(connectedStandby); Log($"[{_instaApi.GetLoggedUser().UserName}] " + "Connected standby not available"); try { Socket.EnableTransferOwnership(_socketActivityTask.TaskId, SocketActivityConnectedStandbyAction.DoNotWake); } catch (Exception e) { Log(e); Log($"[{_instaApi.GetLoggedUser().UserName}] " + "Failed to transfer socket completely!"); if (RetryConnection > 3) { Shutdown(); await StartFresh(true); RetryConnection++; return; } return; } } } } _runningTokenSource = new CancellationTokenSource(); await Socket.ConnectAsync(new HostName(HOST_NAME), "443", SocketProtectionLevel.Tls12); _inboundReader = new DataReader(Socket.InputStream); _outboundWriter = new DataWriter(Socket.OutputStream); _inboundReader.ByteOrder = ByteOrder.BigEndian; _inboundReader.InputStreamOptions = InputStreamOptions.Partial; _outboundWriter.ByteOrder = ByteOrder.BigEndian; await Task.Delay(2500); await FbnsPacketEncoder.EncodePacket(connectPacket, _outboundWriter); await Task.Delay(2500); StartPollingLoop(); } catch (Exception ex) { PrintException("StartFresh", ex); Shutdown(); if (!OnlyOnce) { OnlyOnce = true; await StartFresh(true); } } }
public async Task StartFresh() { this.Log("Starting fresh"); if (!Instagram.InternetAvailable()) { this.Log("Internet not available. Exiting."); return; } if (Running) { throw new Exception("Push client is already running"); } var connectPacket = new FbnsConnectPacket { Payload = await PayloadProcessor.BuildPayload(ConnectionData) }; Socket = new StreamSocket(); Socket.Control.KeepAlive = true; Socket.Control.NoDelay = true; if (await RequestBackgroundAccess()) { try { Socket.EnableTransferOwnership(_socketActivityTask.TaskId, SocketActivityConnectedStandbyAction.Wake); } catch (Exception connectedStandby) { this.Log(connectedStandby); this.Log("Connected standby not available"); try { Socket.EnableTransferOwnership(_socketActivityTask.TaskId, SocketActivityConnectedStandbyAction.DoNotWake); } catch (Exception e) { DebugLogger.LogException(e); this.Log("Failed to transfer socket completely!"); return; } } } else { // if cannot get background access then there is no point of running push client return; } try { await Socket.ConnectAsync(new HostName(HOST_NAME), "443", SocketProtectionLevel.Tls12); _inboundReader = new DataReader(Socket.InputStream); _outboundWriter = new DataWriter(Socket.OutputStream); _inboundReader.ByteOrder = ByteOrder.BigEndian; _inboundReader.InputStreamOptions = InputStreamOptions.Partial; _outboundWriter.ByteOrder = ByteOrder.BigEndian; _runningTokenSource = new CancellationTokenSource(); await FbnsPacketEncoder.EncodePacket(connectPacket, _outboundWriter); } catch (Exception e) { DebugLogger.LogException(e); Restart(); return; } StartPollingLoop(); }
public async Task StartFresh() { try { Debug.WriteLine($"{nameof(PushClient)}: Starting fresh."); if (_loopGroup != null) { await Shutdown(); } _loopGroup = new SingleThreadEventLoop(); var connectPacket = new FbnsConnectPacket { Payload = await PayloadProcessor.BuildPayload(ConnectionData) }; Socket = new StreamSocket(); Socket.Control.KeepAlive = true; Socket.Control.NoDelay = true; if (await RequestBackgroundAccess()) { try { Socket.EnableTransferOwnership(_socketActivityTask.TaskId, SocketActivityConnectedStandbyAction.Wake); } catch (Exception connectedStandby) { Debug.WriteLine(connectedStandby); Debug.WriteLine($"{nameof(PushClient)}: Connected standby not available."); try { Socket.EnableTransferOwnership(_socketActivityTask.TaskId, SocketActivityConnectedStandbyAction.DoNotWake); } catch (Exception e) { #if !DEBUG Crashes.TrackError(e); #endif Debug.WriteLine(e); Debug.WriteLine($"{nameof(PushClient)}: Failed to transfer socket completely!"); await Shutdown().ConfigureAwait(false); return; } } } await Socket.ConnectAsync(new HostName(HOST_NAME), "443", SocketProtectionLevel.Tls12); var streamSocketChannel = new StreamSocketChannel(Socket); streamSocketChannel.Pipeline.AddLast(new FbnsPacketEncoder(), new FbnsPacketDecoder(), this); await _loopGroup.RegisterAsync(streamSocketChannel).ConfigureAwait(false); await streamSocketChannel.WriteAndFlushAsync(connectPacket).ConfigureAwait(false); } catch (Exception e) { #if !DEBUG Crashes.TrackError(e); #endif await Shutdown().ConfigureAwait(false); } }