/// <summary> /// Saves the received File from the Server Request. /// </summary> /// <param name="obj"></param> public void SaveFile(object obj) { string path = null; System.Windows.Forms.SaveFileDialog ofd = new System.Windows.Forms.SaveFileDialog(); ofd.FileName = filename; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { path = ofd.FileName; } if (path != null) { try { FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write); fileStream.Write(byteResult, 0, byteResult.Length); fileStream.Close(); ((MetroWindow)Application.Current.MainWindow).HideMetroDialogAsync(dial); } catch (Exception e) { ((MetroWindow)Application.Current.MainWindow).HideMetroDialogAsync(dial); FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "File Save Error"; fail.Details.Text = "There has been an Error while reading the byte stream. \r Exception: " + e.Message + ""; dial.Content = fail; dial.Height = 300; dial.Width = 300; ((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } } }
public void OpenFile(object obj) { try { string tempPath = Path.GetTempFileName() + filename; FileStream fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write); fileStream.Write(byteResult, 0, byteResult.Length); fileStream.Close(); ((MetroWindow)Application.Current.MainWindow).HideMetroDialogAsync(dial); var process = Process.Start(tempPath); } catch (Exception e) { ((MetroWindow)Application.Current.MainWindow).HideMetroDialogAsync(dial); FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "200"; fail.Details.Text = "There has been an Error while reading the byte stream. \r Exception: " + e.Message + ""; dial.Content = fail; dial.Height = 300; dial.Width = 300; ((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } }
public StateSequencer(IGameStateUseCase gameStateUseCase, ReadyView readyView, DrawView drawView, AttackView attackView, DamageView damageView, ClearView clearView, FailView failView) { _states = new List <BaseState> { readyView, drawView, attackView, damageView, clearView, failView, }; _disposable = new CompositeDisposable(); _tokenSource = new CancellationTokenSource(); foreach (var state in _states) { state.InitAsync(_tokenSource.Token).Forget(); } _gameStateUseCase = gameStateUseCase; _gameStateUseCase.GameState() .Subscribe(gameState => { Reset(gameState); TickAsync(gameState, _tokenSource.Token).Forget(); }) .AddTo(_disposable); }
/// <summary> /// Examines if the XML input is valid based on a given .xsd from OneOffixx. /// </summary> /// <param name="obj"></param> public async void ExecuteValidation(object obj) { dial = new ResponseWindow(); XmlSchemaSet xmlSchema = new XmlSchemaSet(); var asm = Assembly.GetExecutingAssembly(); using (var stream = asm.GetManifestResourceStream("OneOffixx.ConnectClient.WinApp.XSD.OneOffixxValidation.xsd")) { if (stream != null) { var reader = new StreamReader(stream); var xmlString = reader.ReadToEnd(); xmlSchema.Add("", XmlReader.Create(new StringReader(xmlString))); } } try { var xdoc = new XmlDocument(); xdoc.LoadXml(Request.XmlString); xdoc.Schemas = xmlSchema; ValidationEventHandler eventHandler = new ValidationEventHandler(XmlSettingsValidationEventHandler); xdoc.Validate(eventHandler); if (validation) { SuccessView success = new SuccessView(this); success.tb.Visibility = Visibility.Hidden; success.tb1.Visibility = Visibility.Hidden; success.tb2.Visibility = Visibility.Hidden; success.tb3.Visibility = Visibility.Hidden; success.Save.Visibility = Visibility.Hidden; success.Open.Visibility = Visibility.Hidden; success.Time.Visibility = Visibility.Hidden; success.Size.Visibility = Visibility.Hidden; success.Filename.Visibility = Visibility.Hidden; dial.Content = success; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } else { FailView fail = new FailView(this); fail.ServerStatus.Text = "The XML is not valid."; fail.Details.Text = validationText; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); validation = true; } } catch (XmlException e) { FailView fail = new FailView(this); fail.ServerStatus.Text = "Xml Parse Exception"; fail.Details.Text = "The XML contains an error. Make sure it is well formed and validate again."; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); validation = true; } }
/// <summary> /// Sends the Server Request. /// Posts given input fields to the OneOffixx Server. /// </summary> /// <param name="obj"></param> public async void SendRequest(object obj) { double length; isErrorAppeared = false; Request.CanExecute = false; LogEntryViewModel values = new LogEntryViewModel(this); var date = System.DateTime.Now; values.Id = Guid.NewGuid(); values.Name = date.ToString(); values.Action = "Server"; values.RequestEntry = new Request() { Uri = Request.Url, Content = Request.XmlString, Username = Request.Username, Password = Request.Password, Date = date }; values.ResponseEntry = new Response(); values.IsFavorite = false; using (HttpClient client = new HttpClient()) { try { var inBytes = Encoding.ASCII.GetBytes($"{Request.Username}:{Request.Password}"); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(inBytes)); HttpContent content = new StringContent(Request.XmlString); Stopwatch sw = Stopwatch.StartNew(); var result = await client.PostAsync(Request.Url, content); sw.Stop(); values.ResponseEntry.TimeUsed = Math.Round((decimal)sw.ElapsedMilliseconds / 1000, 3).ToString(); if (result.StatusCode == HttpStatusCode.OK) { using (content = result.Content) { length = (double)content.Headers.ContentLength; filename = content.Headers.ContentDisposition.FileName; filename = filename.Replace("\"", ""); byteResult = await content.ReadAsByteArrayAsync(); } values.ResponseEntry.StatusCode = ((int)result.StatusCode).ToString(); SuccessView success = new SuccessView(this); dial = new ResponseWindow(); length = Math.Round((length / 1048576), 2); success.Size.Text = length.ToString() + " MB"; success.Filename.Text = filename; success.Time.Text = values.ResponseEntry.TimeUsed + " Seconds"; dial.Content = success; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } else { FailView fail = new FailView(this); dial = new ResponseWindow(); values.ResponseEntry.StatusCode = ((int)result.StatusCode).ToString(); fail.ServerStatus.Text = result.StatusCode.ToString() + " " + (int)result.StatusCode; fail.Details.Text = result.ReasonPhrase; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } } catch (Exception) { FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "Uri not found"; values.ResponseEntry = new Response() { StatusCode = "Uri not found" }; fail.Details.Text = "Your Server input may be wrong as we could not find the Uri you requested."; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } finally { values.ResponseEntry.Filename = filename; Request.CanExecute = true; log.Logs.Add(values); Request.Log = new ObservableCollection <LogEntryViewModel>(log.Logs.OrderByDescending(x => x.RequestEntry.Date).ToList()); Request.FavoriteLog = new ObservableCollection <LogEntryViewModel>(log.Logs.Where(x => x.IsFavorite)); SaveHistory(); } } }
public void LoadHistoryFromFile() { string filepath = Path.Combine(GetHistorySavePath() + historyFileName); if (File.Exists(filepath)) { try { XDocument xdoc = XDocument.Load(filepath); string xml = xdoc.ToString(); var elements = XmlSerializer.Deserialize <HistoryEntry>(xml); foreach (var item in elements.Logs) { log.Logs.Add(new LogEntryViewModel(this) { Id = item.Id, Name = item.Name, Action = item.Action, RequestEntry = new Request() { Uri = item.RequestEntry.Uri, Username = item.RequestEntry.Username, Password = item.RequestEntry.Password, Content = item.RequestEntry.Content, Date = item.RequestEntry.Date }, ResponseEntry = new Response() { StatusCode = item.ResponseEntry.StatusCode, Filename = item.ResponseEntry.Filename, TimeUsed = item.ResponseEntry.TimeUsed }, IsFavorite = item.IsFavorite }); } } catch (Exception ex) { string newFilepath = GetHistorySavePath() + Guid.NewGuid().ToString() + "\\" + historyFileName; System.IO.File.Move("filepath", newFilepath); FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "History Error"; fail.Details.Text = "An Error occured while trying to read your History. It seems that the xml structure was changed or is from an older version. Your History file was renamed to: " + newFilepath; dial.Content = fail; dial.Height = 300; dial.Width = 300; ((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } RequestModel request = new RequestModel(); if (log.Logs.FirstOrDefault()?.Action == "Server") { request.WarningVisibility = Visibility.Hidden; request.Url = log.Logs[0].RequestEntry.Uri; request.Username = log.Logs[0].RequestEntry.Username; request.Password = log.Logs[0].RequestEntry.Password; request.XmlString = log.Logs[0].RequestEntry.Content; Request = request; } else if (log.Logs.FirstOrDefault()?.Action == "Client") { request.WarningVisibility = Visibility.Hidden; request.Directory = log.Logs[0].RequestEntry.Uri; request.XmlString = log.Logs[0].RequestEntry.Content; Request = request; Request.SelectedIndex = 1; } else { Request = new RequestModel(); } SelectedLogEntryViewModelItem = log.Logs.FirstOrDefault(); Request.Log = new ObservableCollection <LogEntryViewModel>(log.Logs); Request.FavoriteLog = new ObservableCollection <LogEntryViewModel>(log.Logs.Where(x => x.IsFavorite)); } else { RequestModel request = new RequestModel() { WarningVisibility = Visibility.Hidden }; Request = request; } }
/// <summary> /// Sends the Client Request. /// Uses the system Process which is used for OneConnect. /// </summary> /// <param name="obj"></param> public async void ClientConnect(object obj) { LogEntryViewModel values = new LogEntryViewModel(this); values.Action = "Client"; values.Name = System.DateTime.Now.ToString(); values.RequestEntry = new Request() { Date = System.DateTime.Now, Uri = Request.Directory, Content = Request.XmlString }; values.ResponseEntry = new Response(); SaveHistory(); Request.CanExecuteClient = false; filename = Path.GetTempPath() + Guid.NewGuid().ToString() + ".oocx"; try { XDocument xdoc = XDocument.Parse(Request.XmlString); xdoc.Save(filename); try { if (File.Exists(Request.Directory)) { var command = Process.Start($"{Request.Directory}", $"/connector \"{filename}\""); values.ResponseEntry.StatusCode = "200"; } else { FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "failed"; values.ResponseEntry = new Response() { StatusCode = "File not found" }; fail.Details.Text = "Since we could not find the file please check your input directory and confirm if there has crept in an error. "; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } } catch (Exception ex) { FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "Uri not found"; values.ResponseEntry = new Response() { StatusCode = "Unexpected Error" }; fail.Details.Text = "There has been an unexpected Error while trying to execute the Connector. Error: " + ex.Message; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } } catch (System.Xml.XmlException) { FailView fail = new FailView(this); dial = new ResponseWindow(); fail.ServerStatus.Text = "Uri not found"; values.ResponseEntry = new Response() { StatusCode = "Unexpected Error" }; fail.Details.Text = "An unexpected error has occured while trying to create the temp .oocx file. Please check the XML syntax of your content input."; dial.Content = fail; dial.Height = 300; dial.Width = 300; await((MetroWindow)Application.Current.MainWindow).ShowMetroDialogAsync(dial); } log.Logs.Add(values); Request.Log = new ObservableCollection <LogEntryViewModel>(log.Logs.OrderByDescending(x => x.RequestEntry.Date)); Request.FavoriteLog = new ObservableCollection <LogEntryViewModel>(log.Logs.Where(x => x.IsFavorite).OrderByDescending(x => x.RequestEntry.Date)); Request.CanExecuteClient = true; }