/// <summary> /// Open a website prompting to connect this computer/token to the streamer's twitch channel. /// </summary> public void StartUserReConnectThisComputer() { StatsHelixApi.EnsureInitialization(); // If we don't have a token yet, we create one! var token = GetOrCreateUserToken(); _Token = token; LastConnectAttempt = Stopwatch.StartNew(); var urlPostfix = $"/login-streamer.html#hh_game_token={Uri.EscapeDataString(token)}&hh_game_name={Uri.EscapeDataString(StatsHelixApi.GameName)}"; if (StatsHelixApi.API_BASEPATH.EndsWith("/")) { urlPostfix = urlPostfix.Substring(1); } // Yes, it's this easy! // We just shell_exec our https:// url to start the streamer's preferred browser Process.Start(new ProcessStartInfo() { FileName = $"{StatsHelixApi.API_BASEPATH}{urlPostfix}", UseShellExecute = true, }); // If everything goes well, IsThisComputerConnectedAsync will start returning ComputerConnectionState.Connected at some point :) }
/// <summary> /// Is this computer/token connected to a Twitch-channel? /// </summary> /// <returns></returns> public async Task <ComputerConnectionState> IsThisComputerConnectedAsync() { StatsHelixApi.EnsureInitialization(); string startToken; lock (AuthenticationLock) { startToken = Token; // If the user never expressed their desire to connect in any game, we aren't if (startToken == null) { return(ComputerConnectionState.NotConnected); } if (AuthenticatedCache) { return(ComputerConnectionState.Connected); } } string response; try { response = await StatsHelixApi.Http.GetStringAsync("/api/Auth/IsTokenConnected?token=" + Uri.EscapeDataString(startToken)); } catch (Exception e) { StatsHelixApi.Log("Error while checking if computer is authenticated: " + e); return(ComputerConnectionState.ServerUnreachable); } lock (AuthenticationLock) { if (JsonConvert.DeserializeObject <bool>(response)) { AuthenticatedCache = true; return(ComputerConnectionState.Connected); } else { return(ComputerConnectionState.NotConnected); } } }