private void processMessage(string messageData)
 {
     try
     {
         emotionData = JsonConvert.DeserializeObject<EmotionHeartRateData>(messageData);
         System.Diagnostics.Debug.WriteLine("received emo data: Stage {0}", emotionData.Stage);
     }
     catch (Exception)
     {
         emotionData = new EmotionHeartRateData();
     }
     changeLights();
 }
 private async void animate(EmotionHeartRateData data, CancellationToken token)
 {
     try
     {
         var blinking = Task.Run(async () =>
         {
             bool on = false;
             while (!token.IsCancellationRequested)
             {
                 on = !on;
                 foreach (var led in pins)
                 {
                     toggleLight(led.Key, on);
                 }
                 await Task.Delay(500, token);
             }
         }, token);
         var dimming = Task.Run(async () =>
         {
             bool up = false;
             var originalColor = rgbLed.Color;
             var newColor = originalColor;
             while (!token.IsCancellationRequested)
             {
                 double deltaDown = 1.2;
                 var delay = 60;
                 if (up)
                 {
                     newColor = originalColor;
                     delay = 800;
                     up = false;
                 }
                 else
                 {
                     newColor = Color.FromArgb(255, (byte)(newColor.R / deltaDown), (byte)(newColor.G / deltaDown), (byte)(newColor.B / deltaDown));
                     if (newColor == Colors.Black)
                     {
                         up = true;
                         delay = 500;
                     }
                 }
                 rgbLed.Color = newColor;
                 await Task.Delay(delay, token);
             }
         }, token);
         await Task.WhenAll(blinking, dimming);
     }
     catch (TaskCanceledException)
     {
         //it is ok, we use a cancellation token to cancel even if it is in a delay
         Logger.Log("Animation stopped");
     }
     catch (Exception ex)
     {
         Logger.Log($"Unexpected: {ex.Message}");
     }
 }