/// <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); }
/// <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(); }
/// <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)); }