/// <summary> /// Ukázka použití volání služeb generátoru přidělení /// </summary> public static void ExampleUsage() { string username = "******"; //ID uzivatele, melo by byt ziskano na frontendu (FE) prihlasenim UserID user = new UserID(username); //uzivatel-je predavan serveru try { //vytvoreni senatu-informace o senatech musi byt nactene z databaze a zde vytvoreny jejich instance //Dochazi k volani konstruktoru na strane klienta, viz DataContractHelpers.cs, kde jsou tyto konstruktory implementovany Senate s1 = new Senate("INS-tester-1", true); //senat, ktery je povoleny,zatizeni 100, pocet aktivnich pripadu 0 Senate s2 = new Senate("INS-tester-2", false); //senat je zakazany-nebude pouzit v simulaci Senate s3 = new Senate("INS-tester-3", true); //senat je povoleny, Senate s4 = new Senate("INS-tester-4", true); //senat je povoleny, Senate s5 = new Senate("INS-tester-5", true); //po odkomentovani vyjimka-volana na strane klienta //Senate s6 = new Senate("INS-tester-6",true,120);//zpusobi vyjimku na strane klienta, nepovolena hodnota zatizeni 120 AssignCaseParams par = new AssignCaseParams(); par.User = user;//nastav si uzivatele ktery provede akci par.Senates = new List <Senate>() { s1, s2, s3, s4, s5 }; //musi se vytvorit seznam senatu pro ze kterých se bude vybírat //vyber algoritmu pro simulaci, na FE uzivatel vybere par.AlgorithmToUse = 0; //vyber algoritmu pro vyber-platne hodnoty k 10.1.2018 jsou 0,1 for (int i = 0; i < 1; i++) { par.CaseIdentificator = string.Format("CASE {0}", i); var results = proxy_generation.AssignCase(par); //proved vyber Console.WriteLine("Byl vybran senat: {0}", results); } } catch (FaultException <GeneratorServiceFault> fault)//odchytavani vyjimek ze serveru { ConsoleServerMessage(fault); } catch (Exception e)//odchytnuti vyjimky z klienta { ConsoleClientMessage(e); } finally { Console.WriteLine("Hotovo"); } }
/// <summary> /// Metoda zapisuje úspěšně provedenou akci do tabulky akcí Action, navíc ukládá i parametry generování. /// </summary> /// <param name="user_id">Identifikátor uživatele</param> /// <param name="action_name">Jméno akce</param> /// <param name="gparams">Parametry generování k uložení</param> /// <param name="random_value">Generovaná náhodná hodnota</param> /// <param name="parray">Spočtené pole pravděpodobností</param> /// <param name="result">Vybraný senát</param> /// <remarks> /// Předpokládá se užití v případě logování úspěšné akce, kde se ukládají parametry akce (generování). /// Protože by měla být použita při úspěšné akci, není proveden test na existenci parametrů. /// </remarks> /// <remarks> /// Dochází k logování parametrů generování do tabulky GeneratingInfo a stavů (aktuální konfigurace) do tabulky State /// Do tabulky GeneratingInfo se ukládá: počet senátů, identifikátor použitého algoritmu,identifikátor případu, generovaná náhodná hodnota,vybraný senát a id k odkazu na rodičovskou tabulku Action. /// Do tabulky State se ukládá:identifikátor každého senátu, zda je povolený, jeho zatížení, počet aktivních případů, levá a pravá mez intervalu pravděpodobnosti a id k odkazu na rodičovskou tabulku Action. /// Pokud je senát nepovolen, tak je levá a pravá mez intervalu pravděpodobnosti nastavena na hodnotu 0. /// </remarks> public static void WriteGeneratingActionSuccess(string user_id, string action_name, AssignCaseParams gparams, double random_value, double [] parray, string result) { try { DateTime action_time = DateTime.Now;//zjisti cas Debug.WriteLine("LOGING: " + connectionstring); using (SqlConnection connection = new SqlConnection(connectionstring)) { connection.Open(); //otevri spojeni //zapis do tabulky akci uspech int action_id = WriteActionGetLastId(connection, user_id, action_name, action_time, false); //nenastala chyba, zjisti id using (SqlCommand command = new SqlCommand(insertgenparams, connection)) { // (@senates,@algorithm,@case,@randvalue,@senate,@action_id) command.Parameters.AddWithValue("@senates", gparams.Senates.Count); //pocet senatu command.Parameters.AddWithValue("@algorithm", gparams.AlgorithmToUse); //pouzity algoritmus command.Parameters.AddWithValue("@case", gparams.CaseIdentificator); //identifikator pripadu command.Parameters.AddWithValue("@randvalue", random_value); //vylosovna hodnota command.Parameters.AddWithValue("@senate", result); //vybrany senat command.Parameters.AddWithValue("@action_id", action_id); //id akce command.ExecuteNonQuery(); //proved prikaz } //zapis informaci o jednotlivych senatech int counter = 0; double left = 0; double right = parray[0]; //prava mez foreach (var senate in gparams.Senates) //pro kazdy senat pis stav { using (SqlCommand command = new SqlCommand(insertstates, connection)) { // (@senate_id,@enabled,@senate_load,@case_count,@left_bound,@right_bound,@action_id) command.Parameters.AddWithValue("@senate_id", senate.ID); //id senatu command.Parameters.AddWithValue("@enabled", senate.Enabled); //zda byl povoleny command.Parameters.AddWithValue("@senate_load", senate.Load); //zatizeni senatu command.Parameters.AddWithValue("@case_count", senate.ActiveCases); //pocet aktivnich pripadu if (senate.Enabled) { command.Parameters.AddWithValue("@left_bound", left); //leva mez intrvalu pravdepodobnosti senatu command.Parameters.AddWithValue("@right_bound", right); //prava mez intrvalu pravdepodobnosti senatu } else//kdyz je senat zakazan, tak leva i prava hranice je 0 { command.Parameters.AddWithValue("@left_bound", 0); //leva mez intrvalu pravdepodobnosti senatu command.Parameters.AddWithValue("@right_bound", 0); //prava mez intrvalu pravdepodobnosti senatu } command.Parameters.AddWithValue("@action_id", action_id); //id akce command.ExecuteNonQuery(); //proved prikaz } if (senate.Enabled) //pro povolene senaty posouvej hranici { counter++; if (counter < parray.Length) { left = right; right = parray[counter]; } } } } } catch (Exception e)//LADENI:pokud se cokoliv pri logovani nepovede, je poslana informace klientovi { throw new FaultException <GeneratorServiceFault>(new GeneratorServiceFault("SimulationServiceLog: " + e.Message), new FaultReason(e.Message)); } }