❔ ✅ HttpListener only receives context once

Hey, I've set up a class that listens for traffic on localhost coming from a different app. The class looks like this:

public class FluxApiService
{
    private HueApiService _hueApiService;
    private HttpListener _listener;
    private string _url = "http://localhost:8000/";

    public FluxApiService(HueApiService hueApiService)
    {
        _listener = new HttpListener();
        _listener.Prefixes.Add(_url);
        _hueApiService = hueApiService;
    }

    public void Start()
    {
        Task.Run(async () => { await HandleIncomingConnections(); });
    }

    private async Task HandleIncomingConnections()
    {
        _listener.Start();

        while (true)
        {
            try
            {
                HttpListenerContext ctx = await _listener.GetContextAsync();

                HttpListenerRequest req = ctx.Request;

                if (req.Url == null) continue;

                var colorTemp = HttpUtility.ParseQueryString(req.Url.Query).Get("ct");
                var brightness = HttpUtility.ParseQueryString(req.Url.Query).Get("bri");

                if (colorTemp == null || brightness == null) continue;

                await _hueApiService.UpdateScenes(int.Parse(colorTemp), Math.Clamp(float.Parse(brightness) * 100f, 0f, 100f));
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                _listener.Stop();
                break;
            }
        }
    }
}


Everything in the try block runs once, and then execution goes back to the top of the loop and starts awaiting the _listener.GetContextAsync() call again. But it never does anything else, and I know for a fact the traffic it receives at localhost:8000 happens periodically. So it picks up the first one it receives, and then it just stops doing anything. It never enters the catch block, so there isn't any exception thrown.
Was this page helpful?