Esempio n. 1
0
        /// <summary>Configure a recommender</summary>
        /// <param name="recommender">the recommender to configure</param>
        /// <param name="parameters">a dictionary containing the parameters as key-value pairs</param>
        /// <param name="report_error">void function that takes a string for error reporting</param>
        /// <returns>the configured recommender</returns>
        public static T Configure <T>(T recommender, Dictionary <string, string> parameters, takes_string report_error)
        {
            Type type           = recommender.GetType();
            var  property_names = new List <string>();

            foreach (var p in type.GetProperties())
            {
                property_names.Add(p.Name);
            }
            property_names.Sort();

            // TODO consider using SetProperty
            foreach (var key in new List <string>(parameters.Keys))
            {
                string param_name = NormalizeName(key);
                foreach (string property_name in property_names)
                {
                    if (NormalizeName(property_name).StartsWith(param_name))
                    {
                        var property = type.GetProperty(property_name);

                        if (!property.CanWrite)
                        {
                            throw new Exception(string.Format("Property '{0}' is read-only.", property.Name));
                        }

                        if (property.GetSetMethod() == null)
                        {
                            goto NEXT_PROPERTY;                             // poor man's labeled break ...
                        }
                        switch (property.PropertyType.ToString())
                        {
                        case "System.Double":
                            property.GetSetMethod().Invoke(recommender, new Object[] { double.Parse(parameters[key], CultureInfo.InvariantCulture) });
                            break;

                        case "System.Single":
                            property.GetSetMethod().Invoke(recommender, new Object[] { float.Parse(parameters[key], CultureInfo.InvariantCulture) });
                            break;

                        case "System.Int32":
                            if (parameters[key].Equals("inf"))
                            {
                                property.GetSetMethod().Invoke(recommender, new Object[] { int.MaxValue });
                            }
                            else
                            {
                                property.GetSetMethod().Invoke(recommender, new Object[] { int.Parse(parameters[key]) });
                            }
                            break;

                        case "System.UInt32":
                            if (parameters[key].Equals("inf"))
                            {
                                property.GetSetMethod().Invoke(recommender, new Object[] { uint.MaxValue });
                            }
                            else
                            {
                                property.GetSetMethod().Invoke(recommender, new Object[] { uint.Parse(parameters[key]) });
                            }
                            break;

                        case "System.Boolean":
                            property.GetSetMethod().Invoke(recommender, new Object[] { bool.Parse(parameters[key]) });
                            break;

                        case "System.String":
                            property.GetSetMethod().Invoke(recommender, new Object[] { parameters[key] });
                            break;

                        default:
                            report_error(string.Format("Parameter '{0}' has unknown type '{1}'", key, property.PropertyType));
                            break;
                        }
                        parameters.Remove(key);
                        goto NEXT_KEY;                         // poor man's labeled break ...
                    }

NEXT_PROPERTY:
                    Console.Write(string.Empty);                     // the C# compiler wants some statement here
                }

                report_error(string.Format("Recommender {0} does not have a parameter named '{1}'.\n{2}", type.ToString(), key, recommender));

NEXT_KEY:
                Console.Write(string.Empty);                 // the C# compiler wants some statement here
            }

            return(recommender);
        }
Esempio n. 2
0
        /// <summary>
        /// Attempts to create a connection to the server.  If successful, it destroys the login_screen, and spawns the mainGUI.
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="IP"></param>
        /// <param name="isGM"></param>
        /// <param name="gameMode"></param>
        /// <param name="error_reporting">Method of reporting an error (the GUI's error message label's text in this case)</param>
        public void Perform_Login(String userName, String IP, Boolean isGM, String gameMode, takes_string error_reporting)
        {
            var myBinding  = new NetTcpBinding();
            var myEndpoint = new EndpointAddress("net.tcp://" + IP + "/Design_Time_Addresses/ServiceLibrary/Comm/");
            var myChannel  = new DuplexChannelFactory <IServer_WCF_Interface>(new WCF_Client(), myBinding, myEndpoint); // todo: decouple frame from WCF

            try
            {
                server = myChannel.CreateChannel();

                client_id = server.performConnection(userName, isGM, ref gameMode);
            }
            catch (Exception e)
            {
                error_reporting("Exception occured: " + e.Message);
                return;
            }

            if (client_id == -1)
            {
                error_reporting("No GM is present, cannot connect.");
                return;
            }

            Main_GUI_Driver main_driver = new Main_GUI_Driver(server, userName, gameMode, isGM);

            //Main_GUI mainGUI = new Main_GUI(server, userName, isGM);

            // Replace login window with the main gui
            frame.contentPane.Controls.Remove(current_form);
            frame.contentPane.Controls.Add(main_driver.getGUI());

            current_form.Dispose();
            current_form = null;

            current_form = main_driver.getGUI();

            server.getCurrentlyConnectedPlayers(client_id);

            main_driver.getGUI().Show();
        }
Esempio n. 3
0
        /// <summary>Configure a recommender</summary>
        /// <param name="recommender">the recommender to configure</param>
        /// <param name="parameters">a string containing the parameters as key-value pairs</param>
        /// <param name="report_error">void function that takes a string for error reporting</param>
        /// <returns>the configured recommender</returns>
        public static T Configure <T>(T recommender, string parameters, takes_string report_error)
        {
            var parameters_dictionary = new RecommenderParameters(parameters);

            return(Configure(recommender, parameters_dictionary, report_error));
        }