void CustomReceiveData(string topic, Dictionary <string, object> dictionary, byte[] thirdFrame = null)
    {
        if (topic.StartsWith("pupil"))
        {
            foreach (var item in dictionary)
            {
                switch (item.Key)
                {
                case "topic":
                case "method":
                case "id":
                    var textForKey = PupilTools.StringFromDictionary(dictionary, item.Key);
                    // Do stuff
                    break;

                case "confidence":
                    print("Conf : " + PupilTools.FloatFromDictionary(dictionary, item.Key));
                    // Do stuff
                    break;

                case "norm_pos":
                    print("Norm : " + PupilTools.VectorFromDictionary(dictionary, item.Key));
                    // Do stuff
                    break;

                case "ellipse":
                    var dictionaryForKey = PupilTools.DictionaryFromDictionary(dictionary, item.Key);
                    foreach (var pupilEllipse in dictionaryForKey)
                    {
                        switch (pupilEllipse.Key.ToString())
                        {
                        case "angle":
                            var angle = (float)(double)pupilEllipse.Value;
                            // Do stuff
                            break;

                        case "center":
                            print("Center : " + PupilTools.ObjectToVector(pupilEllipse.Value));
                            break;

                        case "axes":
                            print("Axes : " + PupilTools.ObjectToVector(pupilEllipse.Value));
                            // Do stuff
                            break;

                        default:
                            break;
                        }
                    }
                    // Do stuff
                    break;

                default:
                    break;
                }
            }
        }
    }