From 17b2bc2259dba16df36a56d5e39797904d31bf64 Mon Sep 17 00:00:00 2001 From: tscherub Date: Wed, 13 Apr 2016 15:36:10 +0200 Subject: [PATCH] GUI Project and a small change to ASF (Console.Clear goes boom, when output is redirected). Frontend docu: http://tscherub.de/ASFGUI.html --- ArchiSteamFarm.sln | 8 +- ArchiSteamFarm/Program.cs | 4 +- WcfClientGui/App.config | 6 + WcfClientGui/Form1.Designer.cs | 482 ++++++++++++++++++ WcfClientGui/Form1.cs | 364 +++++++++++++ WcfClientGui/Form1.resx | 123 +++++ WcfClientGui/Form2.Designer.cs | 83 +++ WcfClientGui/Form2.cs | 48 ++ WcfClientGui/Form2.resx | 120 +++++ WcfClientGui/Gui2.csproj | 157 ++++++ WcfClientGui/Program.cs | 19 + WcfClientGui/Properties/AssemblyInfo.cs | 36 ++ WcfClientGui/Properties/Resources.Designer.cs | 71 +++ WcfClientGui/Properties/Resources.resx | 117 +++++ WcfClientGui/Properties/Settings.Designer.cs | 30 ++ WcfClientGui/Properties/Settings.settings | 7 + WcfClientGui/ServerProcess.cs | 193 +++++++ WcfClientGui/app.manifest | 58 +++ WcfClientGui/cirno.ico | Bin 0 -> 370070 bytes 19 files changed, 1924 insertions(+), 2 deletions(-) create mode 100644 WcfClientGui/App.config create mode 100644 WcfClientGui/Form1.Designer.cs create mode 100644 WcfClientGui/Form1.cs create mode 100644 WcfClientGui/Form1.resx create mode 100644 WcfClientGui/Form2.Designer.cs create mode 100644 WcfClientGui/Form2.cs create mode 100644 WcfClientGui/Form2.resx create mode 100644 WcfClientGui/Gui2.csproj create mode 100644 WcfClientGui/Program.cs create mode 100644 WcfClientGui/Properties/AssemblyInfo.cs create mode 100644 WcfClientGui/Properties/Resources.Designer.cs create mode 100644 WcfClientGui/Properties/Resources.resx create mode 100644 WcfClientGui/Properties/Settings.Designer.cs create mode 100644 WcfClientGui/Properties/Settings.settings create mode 100644 WcfClientGui/ServerProcess.cs create mode 100644 WcfClientGui/app.manifest create mode 100644 WcfClientGui/cirno.ico diff --git a/ArchiSteamFarm.sln b/ArchiSteamFarm.sln index b74f8f9f2..594a90385 100644 --- a/ArchiSteamFarm.sln +++ b/ArchiSteamFarm.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArchiSteamFarm", "ArchiSteamFarm\ArchiSteamFarm.csproj", "{35AF7887-08B9-40E8-A5EA-797D8B60B30C}" EndProject @@ -12,6 +12,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConfigGenerator", "ConfigGe {35AF7887-08B9-40E8-A5EA-797D8B60B30C} = {35AF7887-08B9-40E8-A5EA-797D8B60B30C} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gui2", "WcfClientGui\Gui2.csproj", "{599121A9-5887-4522-A3D6-61470B90BAD4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -30,6 +32,10 @@ Global {C3F6FE68-5E75-415E-BEA1-1E7C16D6A433}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3F6FE68-5E75-415E-BEA1-1E7C16D6A433}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3F6FE68-5E75-415E-BEA1-1E7C16D6A433}.Release|Any CPU.Build.0 = Release|Any CPU + {599121A9-5887-4522-A3D6-61470B90BAD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {599121A9-5887-4522-A3D6-61470B90BAD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {599121A9-5887-4522-A3D6-61470B90BAD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {599121A9-5887-4522-A3D6-61470B90BAD4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index f12d370d9..0909fddc3 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -329,8 +329,10 @@ namespace ArchiSteamFarm { break; } result = Console.ReadLine(); + if (!Console.IsOutputRedirected) { Console.Clear(); // For security purposes - ConsoleIsBusy = false; + } + ConsoleIsBusy = false; } return string.IsNullOrEmpty(result) ? null : result.Trim(); diff --git a/WcfClientGui/App.config b/WcfClientGui/App.config new file mode 100644 index 000000000..8e1564635 --- /dev/null +++ b/WcfClientGui/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/WcfClientGui/Form1.Designer.cs b/WcfClientGui/Form1.Designer.cs new file mode 100644 index 000000000..9bfbf5a8c --- /dev/null +++ b/WcfClientGui/Form1.Designer.cs @@ -0,0 +1,482 @@ +namespace Gui2 +{ + partial class Form1 + { + /// + /// Erforderliche Designervariable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Verwendete Ressourcen bereinigen. + /// + /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Vom Windows Form-Designer generierter Code + + /// + /// Erforderliche Methode für die Designerunterstützung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.ASFGUI = new System.Windows.Forms.NotifyIcon(this.components); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.button6 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button17 = new System.Windows.Forms.Button(); + this.button18 = new System.Windows.Forms.Button(); + this.button19 = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.button20 = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(115, 251); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 23); + this.button5.TabIndex = 27; + this.button5.Text = "2fa ok"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(34, 251); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 26; + this.button4.Text = "2fa code"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(35, 352); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 24; + this.button3.Text = "Redeem"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(35, 211); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 23; + this.button2.Text = "Loot"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(225, 160); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 22; + this.button1.Text = "Send"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(772, 16); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(51, 17); + this.label2.TabIndex = 21; + this.label2.Text = "Output"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(344, 48); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(39, 17); + this.label1.TabIndex = 20; + this.label1.Text = "Input"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(551, 42); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox2.Size = new System.Drawing.Size(575, 454); + this.textBox2.TabIndex = 19; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(225, 75); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(296, 79); + this.textBox1.TabIndex = 18; + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(35, 143); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(121, 24); + this.comboBox1.TabIndex = 17; + this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Location = new System.Drawing.Point(35, 116); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(130, 21); + this.checkBox3.TabIndex = 16; + this.checkBox3.Text = "Send to specific"; + this.checkBox3.UseVisualStyleBackColor = true; + this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged); + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Location = new System.Drawing.Point(35, 89); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(129, 21); + this.checkBox2.TabIndex = 15; + this.checkBox2.Text = "Send to all Bots"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(143, 14); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(94, 21); + this.checkBox1.TabIndex = 14; + this.checkBox1.Text = "Safemode"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(35, 476); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(486, 22); + this.textBox3.TabIndex = 28; + this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged); + // + // ASFGUI + // + this.ASFGUI.Text = "notifyIcon1"; + this.ASFGUI.Visible = true; + this.ASFGUI.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ASFGUI_MouseDoubleClick); + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Location = new System.Drawing.Point(35, 14); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(106, 21); + this.checkBox4.TabIndex = 29; + this.checkBox4.Text = "Send to any"; + this.checkBox4.UseVisualStyleBackColor = true; + this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(34, 50); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(126, 33); + this.button6.TabIndex = 30; + this.button6.Text = "generate Botlist"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(196, 251); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(75, 23); + this.button7.TabIndex = 31; + this.button7.Text = "2fano"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(116, 352); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(75, 23); + this.button8.TabIndex = 32; + this.button8.Text = "2faoff"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(197, 352); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(75, 23); + this.button9.TabIndex = 33; + this.button9.Text = "exit"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(115, 211); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(75, 23); + this.button10.TabIndex = 34; + this.button10.Text = "farm"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(196, 211); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(75, 23); + this.button11.TabIndex = 35; + this.button11.Text = "help"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(277, 211); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(75, 23); + this.button12.TabIndex = 36; + this.button12.Text = "start"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(358, 211); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(75, 23); + this.button13.TabIndex = 37; + this.button13.Text = "stop"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(439, 211); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(75, 23); + this.button14.TabIndex = 38; + this.button14.Text = "pause"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(358, 251); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(75, 23); + this.button15.TabIndex = 39; + this.button15.Text = "status"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(439, 251); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(75, 23); + this.button16.TabIndex = 40; + this.button16.Text = "status all"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button17 + // + this.button17.Location = new System.Drawing.Point(35, 391); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(75, 23); + this.button17.TabIndex = 41; + this.button17.Text = "owns"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button18 + // + this.button18.Location = new System.Drawing.Point(196, 391); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(75, 23); + this.button18.TabIndex = 42; + this.button18.Text = "addlicense"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // + // button19 + // + this.button19.Location = new System.Drawing.Point(116, 391); + this.button19.Name = "button19"; + this.button19.Size = new System.Drawing.Size(75, 23); + this.button19.TabIndex = 43; + this.button19.Text = "play"; + this.button19.UseVisualStyleBackColor = true; + this.button19.Click += new System.EventHandler(this.button19_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(32, 302); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(305, 17); + this.label3.TabIndex = 44; + this.label3.Text = "The following do not work with \"Send to all\" and"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(32, 319); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(295, 17); + this.label4.TabIndex = 45; + this.label4.Text = "require confirmation even without \"Safemode\""; + // + // button20 + // + this.button20.Location = new System.Drawing.Point(308, 160); + this.button20.Name = "button20"; + this.button20.Size = new System.Drawing.Size(75, 23); + this.button20.TabIndex = 46; + this.button20.Text = "clear"; + this.button20.UseVisualStyleBackColor = true; + this.button20.Click += new System.EventHandler(this.button20_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(39, 456); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(288, 17); + this.label5.TabIndex = 47; + this.label5.Text = "If you don\'t know what this is... Don\'t touch it!"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1138, 510); + this.Controls.Add(this.label5); + this.Controls.Add(this.button20); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.button19); + this.Controls.Add(this.button18); + this.Controls.Add(this.button17); + this.Controls.Add(this.button16); + this.Controls.Add(this.button15); + this.Controls.Add(this.button14); + this.Controls.Add(this.button13); + this.Controls.Add(this.button12); + this.Controls.Add(this.button11); + this.Controls.Add(this.button10); + this.Controls.Add(this.button9); + this.Controls.Add(this.button8); + this.Controls.Add(this.button7); + this.Controls.Add(this.button6); + this.Controls.Add(this.checkBox4); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.button5); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.checkBox3); + this.Controls.Add(this.checkBox2); + this.Controls.Add(this.checkBox1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.CheckBox checkBox3; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.NotifyIcon ASFGUI; + private System.Windows.Forms.CheckBox checkBox4; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button18; + private System.Windows.Forms.Button button19; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button button20; + private System.Windows.Forms.Label label5; + } +} + diff --git a/WcfClientGui/Form1.cs b/WcfClientGui/Form1.cs new file mode 100644 index 000000000..76db1d018 --- /dev/null +++ b/WcfClientGui/Form1.cs @@ -0,0 +1,364 @@ +/* + _ _ _ ____ _ _____ + / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___ + / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \ + / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | | +/_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_| + + Copyright 2015-2016 Florian "KlappPC" Lang + Contact: ichhoeremusik@gmx.net + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +using System; +using System.Drawing; +using System.Windows.Forms; +using System.ServiceModel; + +namespace Gui2 +{ + + public partial class Form1 : Form + { + private bool safeMode = false; + private bool sendAll = false; + private bool sendAny = true; + private bool sendOne = false; + private string botName = ""; + string[] botList; + private string URL = ""; + ServerProcess proc; + private Client Client; + public Form1() + { + InitializeComponent(); + + // So either the ASF.exe is in the same directory, or we assume development environment. + if (System.IO.File.Exists("ASF.exe")) + { + proc = new ServerProcess("ASF.exe", "--server", textBox2); + } + else + { + proc = new ServerProcess("../../../ArchiSteamFarm/bin/Release/ArchiSteamFarm.exe", "--server", textBox2); + } + proc.Start(); + } + + + protected override void OnFormClosing(FormClosingEventArgs e) + { + proc.Stop(); + base.OnFormClosing(e); + } + + /** + * Sends a single command. can be lead by a ! but it does not have to. + */ + private string sendCommand(string command) + { + if (command.StartsWith("!")) + { + command=command.Substring(1); + } + if (Client == null) + { + Client = new Client(new BasicHttpBinding(), new EndpointAddress(URL)); + } + return Client.HandleCommand(command); + } + + /** + * Maximize again when double clicked on tray icon + */ + private void ASFGUI_MouseDoubleClick(object sender, MouseEventArgs e) + { + this.Show(); + this.WindowState = FormWindowState.Normal; + } + + private void Form1_Load(object sender, System.EventArgs e) + { + this.Resize += new System.EventHandler(this.Form1_Resize); + ASFGUI.Icon = new Icon("cirno.ico"); + textBox2.ScrollBars = ScrollBars.Vertical; + textBox1.ScrollBars = ScrollBars.Vertical; + checkBox4.Checked = true; + textBox3.Text = "http://localhost:1242/ASF"; + URL = "http://localhost:1242/ASF"; + textBox2.Anchor = (AnchorStyles.Right | AnchorStyles.Left); + } + /** + * Minimize to tray instead of taskbar + */ + private void Form1_Resize(object sender, EventArgs e) + { + if (FormWindowState.Minimized == this.WindowState) + { + ASFGUI.Visible = true; + this.Hide(); + } + else if (FormWindowState.Normal == this.WindowState) + { + ASFGUI.Visible = false; + } + } + + /** + * generate a command from a simple command + * That means, adds a botName or makes multiple commands for multiple bots. + */ + private string generateCommand(string command, string arg = "") + { + if (sendOne) + return command + " " + botName + " " + arg; + if (sendAll) + { + string ret = ""; + foreach (string str in botList) + { + ret = ret + command + " " + str + " " + arg + "\r\n"; + } + return ret; + } + return command + arg; + } + /** + * One of the simple buttons got pressed + */ + private void buttonPressed(string command) + { + textBox1.Text = generateCommand(command); + if (!safeMode) + button1_Click(this, null); + } + /** + * One of the complicated buttons was pressed + * We get an argumentlist + */ + private void multiCommand(string command) + { + if (sendAll) + return; + string[] arr = textBox1.Lines; + string cmd = ""; + for (int i = 0; i < arr.Length; i++) + { + if (!String.IsNullOrEmpty(arr[i].Trim())) + { + cmd = cmd + generateCommand(command, arr[i].Trim()) + "\r\n"; + } + } + textBox1.Text = cmd; + } + + /** + * updates the WCF URL in case of custom URL + */ + private void textBox3_TextChanged(object sender, EventArgs e) + { + URL = textBox3.Text; + } + + private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) + { + botName= comboBox1.SelectedItem.ToString(); + } + //Ok, radiobuttons would have been better I guess, to lazy to change now. + private void checkBox3_CheckedChanged(object sender, EventArgs e) + { + //specific + if (checkBox3.Checked) + { + sendAll = false; + sendAny = false; + sendOne = true; + checkBox2.Checked = false; + checkBox4.Checked = false; + } + } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + //all + if (checkBox2.Checked) + { + sendAll = true; + sendAny = false; + sendOne = false; + checkBox3.Checked = false; + checkBox4.Checked = false; + } + } + + private void checkBox4_CheckedChanged(object sender, EventArgs e) + { + //any + if (checkBox4.Checked) + { + sendAll = false; + sendAny = true; + sendOne = false; + checkBox2.Checked = false; + checkBox3.Checked = false; + } + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + safeMode = checkBox1.Checked; + } + + + /** + * Send command button. + */ + private void button1_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < textBox1.Lines.Length; i++) + { + string command = textBox1.Lines[i]; + if (!String.IsNullOrEmpty(command.Trim())) + { + sendCommand(command); + } + } + + } + /** + * Update /Generate Botlist button + */ + private void button6_Click(object sender, EventArgs e) + { + string ret = sendCommand("statusall"); + string[] arr = ret.Split('\n'); + int botAmount = Convert.ToInt16(arr[arr.Length - 1].Split('/')[1].Trim().Split(' ')[0]); + botList = new string[botAmount]; + for (int i = 0; i < botAmount; i++) + { + botList[i] = arr[arr.Length - 2 - i].Substring(3).Trim().Split(' ')[0]; + } + comboBox1.Items.AddRange(botList); + } + + //The Rest are simple buttons. + private void button3_Click(object sender, EventArgs e) + { + multiCommand("redeem"); + } + private void button2_Click(object sender, EventArgs e) + { + textBox1.Text = generateCommand("loot"); + if (!safeMode) + button1_Click(this, null); + } + private void button4_Click(object sender, EventArgs e) + { + //2fa + textBox1.Text = generateCommand("2fa"); + if (!safeMode) + button1_Click(this, null); + } + private void button5_Click(object sender, EventArgs e) + { + buttonPressed("2faok"); + } + private void button7_Click(object sender, EventArgs e) + { + buttonPressed("2fano"); + } + private void button8_Click(object sender, EventArgs e) + { + if (sendAll) + return; + textBox1.Text = generateCommand("2faoff"); + } + private void button9_Click(object sender, EventArgs e) + { + textBox1.Text = "exit"; + } + private void button10_Click(object sender, EventArgs e) + { + buttonPressed("farm"); + } + private void button11_Click(object sender, EventArgs e) + { + buttonPressed("help"); + } + private void button12_Click(object sender, EventArgs e) + { + buttonPressed("start"); + } + private void button13_Click(object sender, EventArgs e) + { + buttonPressed("stop"); + } + private void button14_Click(object sender, EventArgs e) + { + buttonPressed("pause"); + } + private void button15_Click(object sender, EventArgs e) + { + buttonPressed("status"); + } + private void button16_Click(object sender, EventArgs e) + { + textBox1.Text = "statusall"; + if (!safeMode) + button1_Click(this, null); + } + private void button17_Click(object sender, EventArgs e) + { + multiCommand("owns"); + } + private void button18_Click(object sender, EventArgs e) + { + multiCommand("addlicense"); + } + private void button19_Click(object sender, EventArgs e) + { + multiCommand("play"); + } + private void button20_Click(object sender, EventArgs e) + { + textBox1.Text = ""; + } + } + + //############### After this point copied from Archie's WCF ################### + [ServiceContract] + interface IWCF + { + [OperationContract] + string HandleCommand(string input); + } + class Client : ClientBase, IWCF + { + internal Client(System.ServiceModel.Channels.Binding binding, EndpointAddress address) : base(binding, address) { } + + public string HandleCommand(string input) + { + try + { + return Channel.HandleCommand(input); + } + catch (Exception e) + { + //Logging.LogGenericException(e); + return null; + } + } + } +} diff --git a/WcfClientGui/Form1.resx b/WcfClientGui/Form1.resx new file mode 100644 index 000000000..768adece5 --- /dev/null +++ b/WcfClientGui/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/WcfClientGui/Form2.Designer.cs b/WcfClientGui/Form2.Designer.cs new file mode 100644 index 000000000..357f4956a --- /dev/null +++ b/WcfClientGui/Form2.Designer.cs @@ -0,0 +1,83 @@ +namespace Gui2 +{ + partial class Form2 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(178, 114); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(116, 34); + this.button1.TabIndex = 0; + this.button1.Text = "OK"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(16, 77); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(446, 22); + this.textBox1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(46, 17); + this.label1.TabIndex = 2; + this.label1.Text = "label1"; + // + // Form2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(474, 162); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.button1); + this.Name = "Form2"; + this.Text = "Input"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/WcfClientGui/Form2.cs b/WcfClientGui/Form2.cs new file mode 100644 index 000000000..610016caf --- /dev/null +++ b/WcfClientGui/Form2.cs @@ -0,0 +1,48 @@ +/* + _ _ _ ____ _ _____ + / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___ + / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \ + / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | | +/_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_| + + Copyright 2015-2016 Florian "KlappPC" Lang + Contact: ichhoeremusik@gmx.net + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using System; +using System.Windows.Forms; + +namespace Gui2 +{ + /** + * popup Message when Input is required + */ + public partial class Form2 : Form + { + ServerProcess proc; + public Form2(ServerProcess proc, string msg) + { + this.proc = proc; + InitializeComponent(); + label1.Text = msg; + button1.DialogResult = DialogResult.OK; + } + + private void button1_Click(object sender, EventArgs e) + { + proc.Write(textBox1.Text); + } + } +} diff --git a/WcfClientGui/Form2.resx b/WcfClientGui/Form2.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/WcfClientGui/Form2.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WcfClientGui/Gui2.csproj b/WcfClientGui/Gui2.csproj new file mode 100644 index 000000000..8cdd31c2d --- /dev/null +++ b/WcfClientGui/Gui2.csproj @@ -0,0 +1,157 @@ + + + + + Debug + AnyCPU + {599121A9-5887-4522-A3D6-61470B90BAD4} + WinExe + Properties + Gui2 + Gui2 + v4.5 + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + app.manifest + + + cirno.ico + + + Gui2.Program + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + Form + + + Form2.cs + + + + + + Form1.cs + + + Form2.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + \ No newline at end of file diff --git a/WcfClientGui/Program.cs b/WcfClientGui/Program.cs new file mode 100644 index 000000000..d4dc4bd20 --- /dev/null +++ b/WcfClientGui/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace Gui2 +{ + static class Program + { + /// + /// Der Haupteinstiegspunkt für die Anwendung. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/WcfClientGui/Properties/AssemblyInfo.cs b/WcfClientGui/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..d301f90bb --- /dev/null +++ b/WcfClientGui/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("Gui2")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Gui2")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("18b85645-1c80-4e25-9dcb-e01684a48fca")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WcfClientGui/Properties/Resources.Designer.cs b/WcfClientGui/Properties/Resources.Designer.cs new file mode 100644 index 000000000..4f6b30a15 --- /dev/null +++ b/WcfClientGui/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn +// der Code neu generiert wird. +// +//------------------------------------------------------------------------------ + +namespace Gui2.Properties +{ + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse + // über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Gui2.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/WcfClientGui/Properties/Resources.resx b/WcfClientGui/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/WcfClientGui/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WcfClientGui/Properties/Settings.Designer.cs b/WcfClientGui/Properties/Settings.Designer.cs new file mode 100644 index 000000000..fa75444d9 --- /dev/null +++ b/WcfClientGui/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Gui2.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/WcfClientGui/Properties/Settings.settings b/WcfClientGui/Properties/Settings.settings new file mode 100644 index 000000000..39645652a --- /dev/null +++ b/WcfClientGui/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/WcfClientGui/ServerProcess.cs b/WcfClientGui/ServerProcess.cs new file mode 100644 index 000000000..aeb460aa2 --- /dev/null +++ b/WcfClientGui/ServerProcess.cs @@ -0,0 +1,193 @@ +/* + _ _ _ ____ _ _____ + / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___ + / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \ + / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | | +/_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_| + + Copyright 2015-2016 Florian "KlappPC" Lang + Contact: ichhoeremusik@gmx.net + This file is mostly done by a friend who explicitly does not want to get mentioned in any way. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +using System.Threading; +using System.Diagnostics; +using System.Windows.Forms; + +namespace Gui2 +{ + /*basically a class to run executables as controlled prozess in the background*/ + public class ServerProcess + { + //ASF.exe in our case + protected Process process; + //handling the output. + protected Thread outputThread; + protected bool stopping; + + //the textbox from our Form, where we want to display output. + private TextBox output; + + private object lockObj = new object(); + + /** + * New SeverProcess for filename with arguments and output to textBox. + * Console is hidden and IO redirected. + */ + public ServerProcess(string fileName, string argumants,TextBox textBox){ + + + output = textBox; + process = new System.Diagnostics.Process(); + + process.StartInfo.FileName = fileName; + process.StartInfo.Arguments = argumants; + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardInput = true; + process.StartInfo.RedirectStandardError = true; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.CreateNoWindow = true; + + } + //needed for realizing when input is needed. + private int dotcounter = 0; + + /** + * I'm not quite happy with this. I could not figure a way to notice when input is required + * besides reading char by char and searching for keywords. Will stop working, if the "Please enter" + * lines gets changed. + * Only tested for "Enter Password." + */ + private void NewOutput(object sender, char e) + { + MethodInvoker mi = delegate + { + output.AppendText(e.ToString()); + }; + + if (e == '.') + { + dotcounter++; + } + else if(e == ':') { + dotcounter = 3; + }else{ + dotcounter = 0; + } + if (dotcounter == 3) { + string[] arr = output.Lines; + string str = arr[arr.Length - 1]; + if (str.Contains("Hit enter")) + { + str = arr[arr.Length - 2] + " | " + str; + Form f = new Form2(this, str); + f.ShowDialog(); + mi = delegate{output.AppendText(e.ToString()+"\n");}; + } + if (str.Contains("Please enter")) + { + Form f = new Form2(this, str); + f.ShowDialog(); + mi = delegate { output.AppendText(e.ToString() + "\n"); }; + } + + dotcounter = 0; + } + output.Invoke(mi); + + } + + private void NewOutput(object sender, string e) + { + MethodInvoker mi = delegate + { + output.AppendText(e+"\n"); + }; + output.Invoke(mi); + + } + + + private void printOutPut() { + char str; + int i; + string s; + while (!stopping) + { + //thats ugly, but when using readline we can't catch input. + while (((i = process.StandardOutput.Read()) != 0)) + { + str=System.Convert.ToChar(i); + NewOutput(this, str); + if (stopping) + break; + } + + while (((s = process.StandardError.ReadLine()) != null)) + { + NewOutput(this, s); + if (stopping) + break; + } + } + } + + public void Write(string msg) { + process.StandardInput.WriteLine(msg); + process.StandardInput.Flush(); + } + + public void Stop() { + Thread stopThread = new Thread(StopProcess); + stopThread.Start(); + } + + private void StopProcess() { + + if (process == null) + return; + stopping = true; + + outputThread.Abort(); + + Thread.Sleep(1000); + + if (process == null) + return; + + if (process.HasExited) + process.Close(); + else + process.Kill(); + + process = null; + } + /** + * starts the process and a second thread to listen for output. + */ + public void Start() { + outputThread = new Thread(printOutPut); + process.Start(); + outputThread.Start(); + } + + public Process Process { + get { + return process; + } + } + } +} diff --git a/WcfClientGui/app.manifest b/WcfClientGui/app.manifest new file mode 100644 index 000000000..01dfed4d7 --- /dev/null +++ b/WcfClientGui/app.manifest @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WcfClientGui/cirno.ico b/WcfClientGui/cirno.ico new file mode 100644 index 0000000000000000000000000000000000000000..1d8c2e1eb554a0e3e5b50aab1e6818ff0558742c GIT binary patch literal 370070 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�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