From d57436115a4d2ad13ffe02e328a30f35b2dca7c5 Mon Sep 17 00:00:00 2001 From: Wilfred Hall Date: Fri, 5 Nov 2021 04:13:10 -0400 Subject: [PATCH 1/4] UI improvements, word wrap toggling --- .../Aura Debugger/Aura Debugger.csproj | 6 + Aura Debugger/Aura Debugger/Cosmos.ico | Bin 0 -> 25214 bytes Aura Debugger/Aura Debugger/Form1.Designer.cs | 142 ++++-- Aura Debugger/Aura Debugger/Form1.cs | 16 + Aura Debugger/Aura Debugger/Form1.resx | 429 ++++++++++++++++++ 5 files changed, 567 insertions(+), 26 deletions(-) create mode 100644 Aura Debugger/Aura Debugger/Cosmos.ico diff --git a/Aura Debugger/Aura Debugger/Aura Debugger.csproj b/Aura Debugger/Aura Debugger/Aura Debugger.csproj index 728065a..a1e2213 100644 --- a/Aura Debugger/Aura Debugger/Aura Debugger.csproj +++ b/Aura Debugger/Aura Debugger/Aura Debugger.csproj @@ -31,6 +31,9 @@ prompt 4 + + Cosmos.ico + @@ -78,5 +81,8 @@ + + + \ No newline at end of file diff --git a/Aura Debugger/Aura Debugger/Cosmos.ico b/Aura Debugger/Aura Debugger/Cosmos.ico new file mode 100644 index 0000000000000000000000000000000000000000..fcdc4018323d6394947898b5445c7c219df93a15 GIT binary patch literal 25214 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

#Da@nr{b6L-L-G?W!!Yl{ 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 private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.textBox1 = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); @@ -40,25 +41,39 @@ private void InitializeComponent() this.button4 = new System.Windows.Forms.Button(); this.label3 = new System.Windows.Forms.Label(); this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker(); + this.label4 = new System.Windows.Forms.Label(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); this.SuspendLayout(); // // textBox1 // - this.textBox1.Location = new System.Drawing.Point(13, 42); + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Cursor = System.Windows.Forms.Cursors.Default; + this.textBox1.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.ForeColor = System.Drawing.Color.White; + this.textBox1.Location = new System.Drawing.Point(12, 52); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.ReadOnly = true; this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBox1.Size = new System.Drawing.Size(701, 453); + this.textBox1.Size = new System.Drawing.Size(695, 452); this.textBox1.TabIndex = 0; + this.textBox1.WordWrap = false; this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); // // label1 // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(10, 506); + this.label1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(12, 511); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(160, 13); + this.label1.Size = new System.Drawing.Size(156, 13); this.label1.TabIndex = 1; this.label1.Text = "Waiting at XXX.XXX.X.XX, 4224"; this.label1.Visible = false; @@ -69,10 +84,15 @@ private void InitializeComponent() // // checkBox1 // + this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(642, 505); + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.checkBox1.ForeColor = System.Drawing.Color.White; + this.checkBox1.Location = new System.Drawing.Point(634, 510); this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(72, 17); + this.checkBox1.Size = new System.Drawing.Size(73, 17); this.checkBox1.TabIndex = 2; this.checkBox1.Text = "Autoscroll"; this.checkBox1.UseVisualStyleBackColor = true; @@ -80,66 +100,107 @@ private void InitializeComponent() // // button1 // - this.button1.Location = new System.Drawing.Point(13, 13); + this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.button1.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.button1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button1.ForeColor = System.Drawing.Color.White; + this.button1.Location = new System.Drawing.Point(12, 14); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 3; this.button1.Text = "Clear"; - this.button1.UseVisualStyleBackColor = true; + this.button1.UseVisualStyleBackColor = false; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // - this.button2.Location = new System.Drawing.Point(94, 13); + this.button2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.button2.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.button2.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.button2.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button2.ForeColor = System.Drawing.Color.White; + this.button2.Location = new System.Drawing.Point(93, 14); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(75, 23); this.button2.TabIndex = 4; this.button2.Text = "Copy"; - this.button2.UseVisualStyleBackColor = true; + this.button2.UseVisualStyleBackColor = false; this.button2.Click += new System.EventHandler(this.button2_Click); // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(175, 18); + this.label2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.ForeColor = System.Drawing.Color.White; + this.label2.Location = new System.Drawing.Point(174, 19); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(87, 13); + this.label2.Size = new System.Drawing.Size(86, 13); this.label2.TabIndex = 5; this.label2.Text = "Received logs: 0"; // // button3 // - this.button3.Location = new System.Drawing.Point(508, 13); + this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.button3.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.button3.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.button3.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button3.ForeColor = System.Drawing.Color.White; + this.button3.Location = new System.Drawing.Point(502, 14); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(59, 23); this.button3.TabIndex = 6; this.button3.Text = "Connect"; - this.button3.UseVisualStyleBackColor = true; + this.button3.UseVisualStyleBackColor = false; this.button3.Click += new System.EventHandler(this.button3_Click); // // textBox2 // - this.textBox2.Location = new System.Drawing.Point(353, 15); + this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox2.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox2.ForeColor = System.Drawing.Color.White; + this.textBox2.Location = new System.Drawing.Point(353, 14); this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(149, 20); + this.textBox2.Size = new System.Drawing.Size(143, 23); this.textBox2.TabIndex = 7; // // button4 // - this.button4.Location = new System.Drawing.Point(593, 13); + this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.button4.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.button4.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.button4.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button4.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button4.ForeColor = System.Drawing.Color.White; + this.button4.Location = new System.Drawing.Point(586, 14); this.button4.Name = "button4"; this.button4.Size = new System.Drawing.Size(121, 23); this.button4.TabIndex = 8; this.button4.Text = "Wait for connection"; - this.button4.UseVisualStyleBackColor = true; + this.button4.UseVisualStyleBackColor = false; this.button4.Click += new System.EventHandler(this.button4_Click); // // label3 // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(573, 17); + this.label3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(567, 19); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(16, 13); + this.label3.Size = new System.Drawing.Size(17, 13); this.label3.TabIndex = 9; this.label3.Text = "or"; // @@ -147,12 +208,41 @@ private void InitializeComponent() // this.backgroundWorker2.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker2_DoWork); // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.ForeColor = System.Drawing.Color.White; + this.label4.Location = new System.Drawing.Point(302, 19); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(45, 13); + this.label4.TabIndex = 10; + this.label4.Text = "IP/Port:"; + // + // checkBox2 + // + this.checkBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.checkBox2.AutoSize = true; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.checkBox2.ForeColor = System.Drawing.Color.White; + this.checkBox2.Location = new System.Drawing.Point(540, 510); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(81, 17); + this.checkBox2.TabIndex = 11; + this.checkBox2.Text = "Word Wrap"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(726, 530); + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); + this.ClientSize = new System.Drawing.Size(719, 534); + this.Controls.Add(this.checkBox2); + this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.button4); this.Controls.Add(this.textBox2); @@ -163,11 +253,9 @@ private void InitializeComponent() this.Controls.Add(this.checkBox1); this.Controls.Add(this.label1); this.Controls.Add(this.textBox1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "Form1"; - this.ShowIcon = false; - this.Text = "Aura Debugger v0.2"; + this.Text = "Cosmos Network Debugger"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout(); @@ -188,6 +276,8 @@ private void InitializeComponent() private System.Windows.Forms.Button button4; private System.Windows.Forms.Label label3; private System.ComponentModel.BackgroundWorker backgroundWorker2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.CheckBox checkBox2; } } diff --git a/Aura Debugger/Aura Debugger/Form1.cs b/Aura Debugger/Aura Debugger/Form1.cs index 4782af0..fb43808 100644 --- a/Aura Debugger/Aura Debugger/Form1.cs +++ b/Aura Debugger/Aura Debugger/Form1.cs @@ -26,6 +26,8 @@ private void Form1_Load(object sender, EventArgs e) button1.Enabled = false; button2.Enabled = false; label1.Visible = false; + + autoscroll = true; } int packetnumber = 0; @@ -220,5 +222,19 @@ private void button3_Click(object sender, EventArgs e) backgroundWorker2.RunWorkerAsync(); } } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + if (checkBox2.Checked) + { + textBox1.WordWrap = true; + textBox1.ScrollBars = ScrollBars.Vertical; + } + else + { + textBox1.WordWrap = false; + textBox1.ScrollBars = ScrollBars.Both; + } + } } } diff --git a/Aura Debugger/Aura Debugger/Form1.resx b/Aura Debugger/Aura Debugger/Form1.resx index 10e3d35..9b117ef 100644 --- a/Aura Debugger/Aura Debugger/Form1.resx +++ b/Aura Debugger/Aura Debugger/Form1.resx @@ -123,4 +123,433 @@ 181, 17 + + 53 + + + + + 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 + /wC0s7Fm3tvY/2tpZv9sa2j/Z2Zj/97b2P+LiYT/WldS/1RSTf9QTkr/TUtH/0tJRf+wrav/nJmTnP7+ + /gH///8A1NTTLt3b1/+bmpf/cnBt/3Jwbf+Ih4T/1NLO/29taf9pZ2L/YV9a/1tZVP9XVVH/mZeU/6qm + ntz5+fkG////APLy8g3BvbjxtLKv/3V0cP91dHD/dHJv/8TBvv/U0c7/iIeC/21rZ/+QjYn/iYeE/9LQ + zP+gnZii/f39Av///wD///8A3t7eItLQyvO1s7D/eHZz/3p4df96eHX/enh1/3FubP9xcGz/eXdy/6Oi + nv+3tbLM/Pz8A////wD///8A////AP7+/gGrqqel7Orn/5mXlP99e3f/fXt3/317d/99e3f/fXt3/317 + d/+RkIz/ycbB6PT09Av///8A////AP///wD///8A/v7+AcDAv0bQzcnt8O7q/8vKxv95eHX/b25r/25t + av+Tko7/6ujl/9LPyvHv7+8Q////AP///wD///8A////AP///wD+/v4BwcC/SbWxqtro5uL+8e/r//Lw + 7P/y8Oz/7+3p/+Ti3v2opaKQ/v7+Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD8/PwD7+/vELi3s1eQjIaUgn11s4B7c8KBe3O+g311r5eTjom9vLlQ6+rqFf39/QL///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD6+voF6enpFs3NzDSdmpV7f3lxwYuGf+iempP0qKWg+qWinPiZlY/yh4J64n14b72fnZl20tLSLerq + 6hX7+/sE////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP7+ + /gHs7OwTp6Wha5GOh+S2tLH/vbu4/8G+u//Bvrv/wb67/8G+u//Bvrv/wb67/8G+u//Bvrv/wb67/8C9 + uv++u7j/tbOw/4eCetvU09Mu/v7+Af///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD+/v4B7+/vEJqYlH+wran/vbu4/8K/vP/Cv7z/wr+8/8K/vP/Cv7z/wr+8/8K/vP/Cv7z/wr+8/8K/ + vP/Cv7z/wr+8/8K/vP/Bvrv/ure0/5yZl4n7+/sE////AP///wD///8A////AP///wD///8A////AP// + /wD///8A+vr6Ba+urFurqab8wL67/8PBvv/Dwb7/tbOw/0ZFRP8jIiD/JCMh/yQjIf8kIyH/JCMh/yQj + If8kIyH/JCMh/yQjIf8jIiH/PTw6/7WzsP/Dwb7/lZKL1Ovr6xT///8A////AP///wD///8A////AP// + /wD///8A////AP39/QLg4OAflZCK0cK/vP/Fwr//xcK//4eFg/8jIiD/JSQi/yUkIv8lJCL/JSQi/yUk + Iv8lJCL/JSQi/yUkIv8lJCL/JSQi/yUkIv8lJCL/paOg/8XCv/+WkY3R7OzsE////wD///8A////AP// + /wD///8A////AP///wD///8Azc3MNamlofnFwr//x8TB/5GPjP8mJST/JyYl/ycmJf8nJiX/JyYl/ycm + Jf8nJiX/JyYl/ycmJf8nJiX/JyYl/ycmJf8nJiX/JyYl/yYlJP/HxMH/xsPA/5yal6b5+fkG////AP// + /wD///8A////AP///wD///8A////APn5+QabmpeIwb+7/8jGwv/IxsL/PDs5/ykoJv8pKCb/KSgm/yko + Jv8pKCb/KSgm/ykoJv8pKCb/KSgm/ykoJv8pKCb/KSgm/ykoJv8pKCb/MC8u/8jGwv/GxMD/m5qXj/7+ + /gH///8A////AP///wD///8A////AP///wD7+/sEvLu6S7i1sPvKyMT/srCt/yopJ/8sKyn/LCsp/ywr + Kf8sKyn/LCsp/ywrKf8sKyn/KCcl/01MSv+Afnv/kpCN/4mIhf9mZWL/Ozo4/yopKP90cnD/ysjE/8C/ + u/+opqRn////AP///wD///8A////AP///wD///8A////APPz8wyGgHisxcPA/8vJxv99e3j/Liwq/y4s + Kv8uLCr/Liwq/y4sKv8uLCr/Liwq/09OTP/Ewr//y8nG/8vJxv/Lycb/y8nG/8vJxv/Lycb/r62q/7Sy + sP/Lycb/vby5/7u7uUz///8A////AP///wD///8A////AP///wD///8AyMfGPb27uP/Ny8f/zszI/zAv + Lf8xMC3/MTAt/zEwLf8xMC3/MTAt/0RCQP/OzMj/NzY0/y8uLP9CQT//LSwr/zEwLf8xMC3/Ly4r/zIx + L/+rqaX/zszI/87MyP/Bv7r+sK6sW/7+/gH///8A////AP///wD///8A////AP///wCsqqhhxMO//8/N + yf+Zl5X/MzIv/zMyL/8zMi//MzIv/zMyL/8zMi//hoSB/z8+O/8zMi//MzIv/zMyL/8zMi//MzIv/zMy + L/8zMi//MzIv/zk4Nv/Ny8f/z83J/8zKxv+cmpep9PT0C////wD///8A////AP///wD///8A+/v7BJ6d + mpvQzsr/x8XB/zQzMf83NTP/NzUz/zc1M/83NTP/NzUz/01MS//S0Mz/MC8u/zc1M/83NTP/NzUz/zc1 + M/83NTP/NzUz/zc1M/83NTP/NzUz/zc1M/+cm5f/0tDM/8G/u/y+vbtK/Pz8A////wD///8A////AP// + /wD19fUKoZ+atdPRzv+wrqz/MjEv/zk3NP85NzT/OTc0/zk3NP84NjP/paWi/9PRzv9FREL/OTc0/zk3 + NP85NzT/OTc0/zk3NP85NzT/OTc0/zk3NP85NzT/OTc0/317ef/T0c7/zMrH/5iUj4j39/cI////AP// + /wD///8A////AOjo6Befm5PW1tTQ/5OSj/88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP/W1ND/1tTQ/2Zk + Yv88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP88Ozj/QD88/6yqpv/T0c3/mJSM5djY + 1yr///8A////AP///wD///8A5OTkG6OfmN7Y1dL/joyK/z49Ov8+PTr/Pj06/z49Ov8+PTr/RkRC/9jV + 0v/Y1dL/SEZE/z49Ov8+PTr/Pj06/z49Ov8+PTr/Pj06/z49Ov8+PTr/Pj06/z49Ov86OTf/hIKA/9bT + 0f+yraj2xMPCQv///wD///8A////AP///wDj4+McpaKb39rY1f+PjYv/Q0E9/0NBPf9DQT3/Q0E9/0NB + Pf9RUE3/2tjV/9rY1f9FREL/TUpG/0xKRv9LSUX/S0lE/0lHQv9IRkL/R0RA/0ZEQP9FQz7/REI+/z48 + OP9sa2j/2dfU/8fFwf25uLZQ////AP///wD///8A////AOfn5xijn5jZ3NrW/5WTkP9FQz//RUM//0pI + RP9UUk3/Y2Ba/2VjX//c2tb/3NrW/1ZVVP9XVVD/VFJN/1FPSv9PTUj/TUtG/0xKRv9LSET/SkhD/0lH + Qv9IRkL/QT87/3l4dv/b2dX/vbq0+cHAvkf///8A////AP///wD///8A8vLyDaWhnb3f3Nn/t7Wz/2Zm + Yv9tbGn/bWxp/21saf9tbGn/ZGNf/9/c2f/f3Nn/sK6r/2FfWf9eXFf/W1hT/1hWUf9VU07/U1FN/1FP + Sv9QTkr/T0xI/05MR/9YVlP/0M3K/93a1/+WkIfg2trZJ////wD///8A////AP///wD4+PgHpKKep97c + 2P/Lycb/XFtZ/25tav9ubWr/bm1q/25tav9ramf/wL67/+De2v/g3tr/XFtW/2NiXf9fXlj/XFpW/1lX + U/9WVVH/VFNO/1NSTf9RUEv/UE9K/0pJRf+fnpv/3tzY/7Sxq/TGxcRA////AP///wD///8A////AP// + /wCmpaJt2tjU/+Ph3f+KiYf/cXBt/3Fwbf9xcG3/cXBt/3Fwbf9fXVv/4d/b/+Ph3f+opqP/cXBr/21q + ZP9oZWD/Y2Fc/2BdWP9dW1b/W1hT/1hWUf9XVFD/VFFN/0pIRv/j4d3/2dfT/6elom////8A////AP// + /wD///8A////AL28ukzV08//5OLe/9bU0P9ramf/c3Fu/3Nxbv9zcW7/c3Fu/3Nxbv+rqaf/5OLe/+Ti + 3v9qamj/c3Fs/29sZ/9pZ2L/ZWNe/2JfW/9fXVj/XFpV/1pYVP9TUE3/V1ZU/+Ti3v/X1tL/rKqnZP// + /wD///8A////AP///wD///8A7+/vEJGLgc3j4N3/5+Th/5mXk/92dXH/dnVx/3Z1cf92dXH/dnVx/3Fw + bP+ZmJb/5+Th/+fk4f/n5OH/uri1/3t5dv9raWf/i4mG/9rX1P/V09D/qail/9XT0P/n5OH/4+Dd/5mT + itrh4eAg////AP///wD///8A////AP///wD5+fkGpaOedN3b1//o5uL/rayp/3d1cv93dXL/d3Vy/3d1 + cv93dXL/d3Vy/3VzcP+dnJn/6Obi/+jm4v/o5uL/6Obi/+jm4v/o5uL/6Obi/+Lg3P/g3tr/6Obi/+jm + 4v/X1dH+rKqmaff39wj///8A////AP///wD///8A////AP///wDy8vINp6Sgrebk4P/q6OT/ysnF/3Fv + bP96eHX/enh1/3p4df96eHX/enh1/3p4df96eHX/dnNx/2hmY/9iYF//ZGNh/3JwbP96eHX/eHRu/2Fg + Xv/q6OT/5+Xh/5yal475+fkG////AP///wD///8A////AP///wD///8A////AP39/QKvratf29nX/+ro + 5f/r6eb/kZCN/3t5df97eXX/e3l1/3t5df97eXX/e3l1/3t5df97eXX/e3l1/3t5df97eXX/e3l1/3t5 + df97eXT/WlhS/+vp5v/p5+T/qKajpPj4+Af///8A////AP///wD///8A////AP///wD///8A////APr6 + +gXCwb9Fx8S+9Ozq5//t6+j/3t3a/3BvbP99fHj/fXx4/318eP99fHj/fXx4/318eP99fHj/fXx4/318 + eP99fHj/fXx4/318eP99fHj/vLu4/+3r6P+zrqbh4+PjHP///wD///8A////AP///wD///8A////AP// + /wD///8A////APDw8A+in5mi5uPg/+7r6P/v7On/ysfE/2RiYP9+fXn/fn15/359ef9+fXn/fn15/359 + ef9+fXn/fn15/359ef9+fXn/fn15/359ef+pp6T/7+zp/8nFv/TV1dQr////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////APj4+AfOzc00rqmi3uro5f/v7er/8O7r//Du6//c2tf/fn16/2Nj + YP9vbmr/fHp2/317eP95d3T/bWxp/2RjX/98e3r/2NbT//Du6//w7uv/ycXB89bW1in///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////APj4+Ae3trRTtrGq7ejm4v/w7ur/8e/r//Hv + 6//a2dX/mpmW/3Jxbv9kZGD/ZGNg/2VkYf92dXL/npyZ/9rZ1f/x7+v/8e/r/+/t6f+tqKDT6enpFv// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD4+PgH1dXULJiU + jJSyrqbo4uDc/+ro5P/w7ur/8vDs//Px7f/z8e3/8/Ht//Lw7P/w7ur/6ujk/+Lg3P+1sanqnZiRjOnp + 6Rb///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD8/PwD7e3tEszMyzahnph/lo+GycG9tvPh3tv+6Obj/+nn5P/o5uP/39zZ/b66tPKVj4XKop6Yf8zL + yzfu7u4R/f39Av///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A/v7+Afr6+gXv7+8QysnHP6iloW+QjIaUhH92rIF7 + c7uAe3PCgHtzwoF7c7uDfXWvjomCmaGemXm9vLlQ4ODfIvb29gn9/f0C////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A/v7+Afb29gnp6ekW2traJcHAv0SdmpV7gHtzr395 + cdSLhn/omZSO8qKhmveopaD6qKWg+aKhmveZlY/yjoqD6oF9c9p9eG+9j4uGkrGwrVvS0tIt4+PjHPHx + 8Q77+/sE////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP39/QLy8vIN3t7eIbOysFiFgXmmh4J63aCd + l/eysKz/trSx/7m3s/+8urb/vry4/769uf++vbn/vr25/769uf++vLj/vLq2/7q4tP+4trL/tLKu/6yp + pf2RjYXsf3txx5uYk3/Y2Ngn8/PzDP7+/gH///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD+/v4B9/f3CODg4B+npaFrgnxzzaim + ovy2tLH/vLm2/7+9uv/Bvrv/wb67/8G+u//Bvrv/wb67/8G+u//Bvrv/wb67/8G+u//Bvrv/wb67/8G+ + u//Bvrv/wb67/8C9uv++u7j/ube0/7KvrP+Hgnrburm3T/Ly8g3+/v4B////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APz8/APv7+8QxMPCQIF7 + cr6wran/u7i1/8C+u//Cv7z/wr+8/8K/vP/Cv7z/wr+8/8K/vP/Cv7z/wr+8/8K/vP/Cv7z/wr+8/8K/ + vP/Cv7z/wr+8/8K/vP/Cv7z/wr+8/8K/vP/Cv7z/wr+8/8C+u/+6t7T/jIaA49LR0TD7+/sE////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A+/v7BOXl + 5RqkoZ5wko6G6rm2s//Bvrv/w8C9/8PAvf/DwL3/w8C9/8PAvf+tq6j/enl2/1JQT/85Nzb/Li0s/ygn + Jv8nJiX/JyYl/ygnJv8tLCv/NzY0/0pJR/9raWf/l5WS/8G+u//DwL3/w8C9/8PAvf/Cv7z/s7Ct/6Gf + m3Xy8vIN////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD6+voF39/fII2Kg5erqab8vry5/8LAvf/Dwb7/w8G+/8PBvv+1s7D/YWBe/ywrKv8jIiD/JCMh/yQj + If8kIyH/JCMh/yQjIf8kIyH/JCMh/yQjIf8kIyH/JCMh/yQjIf8kIyH/JCMh/yMiIf89PDr/qKaj/8PB + vv/Dwb7/uLa0/4WBd6rr6+sU////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////APv7+wTg4OAfiIJ7pLWyr//Cv7z/xcK//8XCv//Fwr//vru4/1BPTv8jIiD/JSQi/yUk + Iv8lJCL/JSQi/yUkIv8lJCL/JSQi/yUkIv8lJCL/JSQi/yUkIv8lJCL/JSQi/yUkIv8lJCL/JSQi/yUk + Iv8lJCL/hYSB/8XCv//Fwr//ure1/4iCe6Ts7OwT////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A/v7+Aejo6BeTj4qOtrOw/8TBvv/Gw8D/xsPA/8bDwP+GhIL/JSQj/yYl + JP8mJST/JiUk/yYlJP8mJST/JiUk/yYlJP8mJST/JiUk/yYlJP8mJST/JiUk/yYlJP8mJST/JiUk/yYl + JP8mJST/JiUk/yYlJP8kIyL/rquo/8bDwP/Gw8D/uLWy/5+dmHjy8vIN////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A8vLyDa+tq16ppaH5w8C9/8fEwf/HxMH/x8TB/1ta + WP8mJST/JyYl/ycmJf8nJiX/JyYl/ycmJf8nJiX/JyYl/ycmJf8nJiX/JyYl/ycmJf8nJiX/JyYl/ycm + Jf8nJiX/JyYl/ycmJf8nJiX/JyYl/ycmJf8mJST/x8TB/8fEwf/Gw8D/rquo/Li3tVH5+fkG////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD5+fkG0NDQMI6KguHBv7v/yMbC/8jG + wv/IxsL/T09N/ykoJv8pKCb/KSgm/ykoJv8pKCb/KSgm/ykoJv8pKCb/KSgm/ykoJv8pKCb/KSgm/yko + Jv8pKCb/KSgm/ykoJv8pKCb/KSgm/ykoJv8pKCb/KSgm/ykoJv8wLy7/yMbC/8jGwv/GxMD/mZaP79HR + 0S/+/v4B////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP7+/gHm5uYZh4J6p7y7 + t//IxsL/ycfD/8nHw/9lZGL/Kikn/yopJ/8qKSf/Kikn/yopJ/8qKSf/Kikn/yopJ/8qKSf/Kikn/yop + J/8qKSf/Kikn/yopJ/8qKSf/Kikn/yopJ/8qKSf/Kikn/yopJ/8qKSf/Kikn/yopJ/9MS0r/ycfD/8nH + w//Dwr7/iYR72d3d3SL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APf3 + 9wi8u7pLqaWg+MfFwf/KyMT/ysjE/5uZlv8qKSf/LCsp/ywrKf8sKyn/LCsp/ywrKf8sKyn/LCsp/ywr + Kf8sKyn/LCsp/ywrKf8oJyX/Ozo4/2BfXP+Afnv/kZCM/5ORjv+JiIX/dXRx/1hXVP87Ojj/KSgn/ywr + Kf90cnD/ysjE/8rIxP/Av7v/hH51tubm5hn///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AOfn5xiGgHiswL67/8vJxv/Lycb/y8nG/y8tK/8uLCr/Liwq/y4sKv8uLCr/Liwq/y4s + Kv8uLCr/Liwq/y4sKv8uLCr/Kyoo/3Rzcf/Ewr//y8nG/8vJxv/Lycb/y8nG/8vJxv/Lycb/y8nG/8vJ + xv/Lycb/ycfE/5WTkf+0srD/y8nG/8vJxv+9vLn/l5OOiO/v7xD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A+/v7BM7OzTOdmJHuycbD/83Kx//Nysf/eHZ1/y8uLP8vLiz/Ly4s/y8u + LP8vLiz/Ly4s/y8uLP8vLiz/Ly4s/y8uLP9GRUP/zcrH/83Kx//Nysf/zcrH/83Kx/+3tLH/i4mH/3d1 + c/93dXP/jIqI/7e0sf/Nysf/zcrH/83Kx//Nysf/zcrH/83Kx/+3s7D9r66sWvT09Av///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A9PT0C6akoG+9u7j/zcvH/87MyP/OzMj/MC8t/zEw + Lf8xMC3/MTAt/zEwLf8xMC3/MTAt/zEwLf8xMC3/MTAt/1dVU//OzMj/QkE//y0sKf8vLiz/T05M/zY1 + M/8tLCv/MTAt/zEwLf8xMC3/MTAt/y0sKv8yMS//iIeD/87MyP/OzMj/zszI/87MyP/Bv7r+i4Z/nubm + 5hn+/v4B////AP///wD///8A////AP///wD///8A////AP///wD///8A6OjoF4aBeKzEw7//z83J/8/N + yf+Zl5X/MzIv/zMyL/8zMi//MzIv/zMyL/8zMi//MzIv/zMyL/8zMi//PTw6/8/Nyf8/Pjv/MzIv/zMy + L/8zMi//MzIv/zMyL/8zMi//MzIv/zMyL/8zMi//MzIv/zMyL/8zMi//MzIv/0A/Pf/Ny8f/z83J/8/N + yf/Mysb/sK6q+rOysFn09PQL////AP///wD///8A////AP///wD///8A////AP///wD+/v4B29vbJI2H + f9nLyMX/0c7L/9HOy/9UU1H/NTMx/zUzMf81MzH/NTMx/zUzMf81MzH/NTMx/zUzMf8wLiz/ure1/9HO + y/8vLiz/NTMx/zUzMf81MzH/NTMx/zUzMf81MzH/NTMx/zUzMf81MzH/NTMx/zUzMf81MzH/NTMx/zUz + Mf88Ozn/0c7L/9HOy//Rzsv/ycbD/4mCesvg4OAf/v7+Af///wD///8A////AP///wD///8A////AP// + /wD7+/sExMTCQaupovbQzsr/0tDM/7y7t/80MzH/NzUz/zc1M/83NTP/NzUz/zc1M/83NTP/NzUz/zc1 + M/9NTEv/0tDM/9LQzP8wLy7/NzUz/zc1M/83NTP/NzUz/zc1M/83NTP/NzUz/zc1M/83NTP/NzUz/zc1 + M/83NTP/NzUz/zc1M/83NTP/ZmZj/9LQzP/S0Mz/0M7K/7Oxrfq+vbtK+fn5Bv///wD///8A////AP// + /wD///8A////AP///wD19fUKqaajbMLBvv/T0c7/09HO/42Miv8yMS//OTc0/zk3NP85NzT/OTc0/zk3 + NP85NzT/OTc0/zg2M/+lpaL/09HO/9PRzv9FREL/OTc0/zk3NP85NzT/OTc0/zk3NP85NzT/OTc0/zk3 + NP85NzT/OTc0/zk3NP85NzT/OTc0/zk3NP85NzT/MjAv/8jGw//T0c7/09HO/8XDwP+YlI+I7+/vEP// + /wD///8A////AP///wD///8A////AP///wDu7u4RlZGKkcjGwv/V08//1dPP/2ppZ/85ODX/Ojk2/zo5 + Nv86OTb/Ojk2/zo5Nv86OTb/Ojk2/zIxMP/V08//1dPP/9XTz/+GhYL/Ojk2/zo5Nv86OTb/Ojk2/zo5 + Nv86OTb/Ojk2/zo5Nv86OTb/Ojk2/zo5Nv86OTb/Ojk2/zo5Nv86OTb/Ojk2/358ef/V08//1dPP/83L + x/+GgHbA3t3dIv39/QL///8A////AP///wD///8A////AP///wDo6OgXiIJ5rcvJxf/W1ND/1tTQ/1FQ + Tv88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7Of/W1ND/1tTQ/9bU0P9mZGL/PDs4/zw7 + OP88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP88Ozj/PDs4/zw7OP88Ozj/PDs4/0RD + Qf+sqqb/1tTQ/9HPy/+YlIzlvr27Tfj4+Af///8A////AP///wD///8A////AP///wDk5OQbh4J4vc/M + yf/Y1dL/2NXS/0VEQv8+PTr/Pj06/z49Ov8+PTr/Pj06/z49Ov8+PTr/Pj06/05MS//Y1dL/2NXS/9jV + 0v9IRkT/Pj06/z49Ov8+PTr/Pj06/z49Ov8+PTr/Pj06/z49Ov8+PTr/Pj06/z49Ov8+PTr/Pj06/z49 + Ov8+PTr/Pj06/zc2NP+EgoD/2NXS/9XS0P+yraj2pKGcd/Ly8g3///8A////AP///wD///8A////AP// + /wDj4+MciYN5w9DPy//Z19P/2dfT/0FBP/9APzz/QD88/0A/PP9APzz/QD88/0A/PP9APzz/QD88/11c + Wv/Z19P/2dfT/9nX0/9APz3/QD88/0A/PP9APzz/QD88/0A/PP9APzz/QD88/0A/PP9APzz/QD88/0A/ + PP9APzz/QD88/0A/PP9APzz/QD88/zY1M/9xb2z/2dfT/9jW0v/Avbn8mJSOjO/v7xD///8A////AP// + /wD///8A////AP///wDj4+MciIJ4wNHQzf/a2NX/2tjV/0RDQf9DQT3/Q0E9/0NBPf9DQT3/Q0E9/0NB + Pf9DQT3/REI+/19eXP/a2NX/2tjV/9rY1f9FREL/TUpG/01KRv9MSkb/TEpF/0tJRf9LSUT/SkhD/0lH + Qv9IRkL/R0VB/0dEQP9GRED/RUM//0VDPv9EQj7/REI+/zg2M/9sa2j/2tjV/9nX1P/HxcH9lZGKke/v + 7xD///8A////AP///wD///8A////AP///wDn5+cYiYN4s9LQzP/c2tb/3NrW/05NS/9FQz//RUM//0ZE + QP9KSET/UE5J/1lWUf9jYFr/aWZg/2JhX//c2tb/3NrW/9za1v9WVVT/WFZR/1ZUT/9UUk3/UlBL/1FO + Sv9PTUj/TkxH/01LRv9MSkb/S0lF/0tIRP9KSEP/SUdD/0lHQv9IRkL/SEZB/zs5Nv95eHb/3NrW/9rY + 1P+9urT5n5uWgfHx8Q7///8A////AP///wD///8A////AP///wDs7OwTkYyEm9DOyv/d29f/3dvX/2pp + Zv9WVFD/YmBd/2lnZP9samf/bGpn/2xqZ/9samf/bGpn/1pYVv/d29f/3dvX/93b1/91dHH/XltW/1tY + U/9ZVlH/V1RP/1VSTv9TUUz/UlBL/1FPSv9QTUn/T0xI/05MR/9NS0b/TEpG/0tJRf9LSUT/SkhE/0FA + Pv+dm5n/3dvX/9rY1P+kn5fstLKvXfb29gn///8A////AP///wD///8A////AP///wDy8vINoZ6Ze87M + yf/f3Nn/39zZ/5COjf9mZmL/bWxp/21saf9tbGn/bWxp/21saf9tbGn/bWxp/1taVv/f3Nn/39zZ/9/c + 2f+wrqv/YV9Z/2FfWf9eXFf/XFlU/1pXUv9YVlH/VlRP/1VSTv9TUU3/UlBL/1FPSv9QTkr/T01J/09M + SP9OTEf/TUtH/2RiYP/Qzcr/39zZ/9vY1f+WkIfgwL++SPj4+Af///8A////AP///wD///8A////AP// + /wD4+PgHube1U8LAuvve3Nj/4N7a/7e1sv9cW1n/bm1q/25tav9ubWr/bm1q/25tav9ubWr/bm1q/2lo + Zf/Avrv/4N7a/+De2v/g3tr/UVBN/2dmYP9jYl3/YV9a/15dV/9cWlb/WlhU/1hXUv9WVVH/VVRP/1RT + Tv9TUk3/UlFM/1FQS/9QT0r/T05K/0VEQP+fnpv/4N7a/93b1/+0sav0pqOfdPLy8g3///8A////AP// + /wD///8A////AP///wD+/v4B1NTTLKCblObd29j/4d/c/+Lg3f9eXlz/cG9s/3BvbP9wb2z/cG9s/3Bv + bP9wb2z/cG9s/3BvbP92dXP/4d/c/+Hf3P/h39z/n56b/25tZv9ramT/Z2Zh/2RjXf9hYFv/X15Z/11c + V/9bWlX/WVhT/1hXUv9WVVH/VVRQ/1RTT/9TUk7/UlFN/0dGQv9aWVf/4d/c/+De2//U0s//jYd+qenp + 6Rb///8A////AP///wD///8A////AP///wD///8A4+PjHIqEe77a2NT/4+Hd/+Ph3f+KiYf/cXBt/3Fw + bf9xcG3/cXBt/3Fwbf9xcG3/cXBt/3Fwbf9fXVv/4N7a/+Ph3f/j4d3/4+Hd/21raf9xcGv/b2xm/2to + Y/9oZWD/ZWJd/2JgW/9gXVj/XlxX/1xaVf9bWFP/WVdS/1hVUf9XVFD/VlNP/1JQTP9KSEb/4+Hd/+Ph + 3f/Z19P/joh9xOTk5Bv///8A////AP///wD///8A////AP///wD///8A7+/vEJuXkInV08//5OLe/+Ti + 3v/W1ND/ZGNh/3Nxbv9zcW7/c3Fu/3Nxbv9zcW7/c3Fu/3Nxbv9zcW7/cnFw/+Ti3v/k4t7/5OLe/+Ti + 3v9qamj/c3Fu/3Nxa/9vbGf/a2lj/2hmYf9lY17/Y2Fc/2FeWv9fXVj/XVtW/1xZVf9aWFT/WVdT/01K + R/9XVlT/5OLe/+Ti3v/X1tL/i4V7sejo6Bf///8A////AP///wD///8A////AP///wD///8A+fn5Br++ + vEnCv7r64uDc/+Xj3//l49//ZmVi/3VzcP91c3D/dXNw/3VzcP91c3D/dXNw/3VzcP91c3D/b25r/52c + mf/l49//5ePf/+Xj3//l49//nZya/1taVP9zcm3/c3Fr/3BtZ/9saWT/aWZh/2dkX/9RT0v/S0pG/1tY + VP9fXFj/WllU/3Fvbf/IxsL/5ePf/+Ph3f/Bvrj4op+ZfPHx8Q7///8A////AP///wD///8A////AP// + /wD///8A/v7+Ad/f3yCRi4HN39zZ/+fk4f/n5OH/xsPA/2xrZ/92dXH/dnVx/3Z1cf92dXH/dnVx/3Z1 + cf92dXH/dnVx/21rZ/+ZmJb/5+Th/+fk4f/n5OH/5+Th/+fk4f+6uLX/h4WC/29ta/9raWf/eHZ0/56c + mf/a19T/5+Th/8TCv/+pqKX/xMK//+fk4f/n5OH/5+Th/9/c2f+Zk4ray8vJPPr6+gX///8A////AP// + /wD///8A////AP///wD///8A////APLy8g2lo5501dPP/+bk4P/o5uL/6Obi/3NycP93dXL/d3Vy/3d1 + cv93dXL/d3Vy/3d1cv93dXL/d3Vy/3d1cv91c3D/ZmVj/9XU0P/o5uL/6Obi/+jm4v/o5uL/6Obi/+jm + 4v/o5uL/6Obi/+jm4v/o5uL/6Obi/93b1//g3tr/6Obi/+jm4v/o5uL/4+He/8zKxf2sqqZp7+/vEP7+ + /gH///8A////AP///wD///8A////AP///wD///8A////APz8/APa2tolmJKI1+Hf2//p5+P/6efj/+nn + 4/9gX1z/eXdz/3l3c/95d3P/eXdz/3l3c/95d3P/eXdz/3l3c/95d3P/eXdz/2xrZ/9kYmH/npya/83L + yP/n5eH/6efj/+nn4//p5+P/3tzY/768uf+Rj43/W1pX/2FfWf+Tko//6efj/+nn4//n5eH/zMnE+pWQ + iZbm5uYZ/f39Av///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDy8vINsa+sYMvI + w/vm5OD/6ujk/+ro5P/KycX/aGdj/3p4df96eHX/enh1/3p4df96eHX/enh1/3p4df96eHX/enh1/3p4 + df96eHX/enh1/3Jvbf9oZmP/Y2Fg/2JgX/9kY2H/bGtn/3h2cv96eHX/enZw/3Zybf9hYF7/6ujk/+ro + 5P/n5eH/paCX6MrKyjX5+fkG////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD9/f0C5eXlGpCKgaXb2df/6efk/+vp5v/r6eb/uLa0/2tqZ/97eXX/e3l1/3t5df97eXX/e3l1/3t5 + df97eXX/e3l1/3t5df97eXX/e3l1/3t5df97eXX/e3l1/3t5df97eXX/e3l1/3t5df97eXX/e3l1/3t5 + c/9aWFL/6+nm/+vp5v/p5+T/y8jE+7y7uU74+PgH////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A+vr6BdfX1yiXkYjV4uDd/+vp5v/s6uf/7Orn/8G/vP9lZGL/fXp2/316 + dv99enb/fXp2/316dv99enb/fXp2/316dv99enb/fXp2/316dv99enb/fXp2/316dv99enb/fXp2/316 + dv99enb/fXp2/316dv92c2z/yMfE/+zq5//s6uf/3NrY/5yYkojv7+8Q////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////APX19QrCwb9Framh6uXj4P/s6uf/7evo/+3r + 6P/e3dr/ZGNh/318eP99fHj/fXx4/318eP99fHj/fXx4/318eP99fHj/fXx4/318eP99fHj/fXx4/318 + eP99fHj/fXx4/318eP99fHj/fXx4/318eP99fHj/jIuJ/+3r6P/t6+j/5OLf/5CKf8Pj4+Mc////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP7+/gHw8PAPtrSyWLOu + p+3m4+D/7ern/+/s6f/v7On/7+zp/6WjoP9kYmD/fn15/359ef9+fXn/fn15/359ef9+fXn/fn15/359 + ef9+fXn/fn15/359ef9+fXn/fn15/359ef9+fXn/fn15/359ef9+fXn/Y2Jg/+/s6f/v7On/6ufk/6un + n+nV1dQr/v7+Af///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD+/v4B7+/vELu6uFCinZTf4uDd/+zq5//v7er/7+3q/+/t6v/v7er/n52b/2JhX/90c2//f315/399 + ef9/fXn/f315/399ef9/fXn/f315/399ef9/fXn/f315/399ef9/fXn/f315/399ef93dnL/Z2Zk/+/t + 6v/v7er/7Orn/8TBvffJyMc9/f39Av///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A/v7+AfLy8g3Ozc00j4l+vdza2P/q6OX/7+3q//Du6//w7uv/8O7r//Du + 6//c2tf/lJOQ/2hnZf9jY2D/a2pm/3Rzb/98enb/fXt4/358eP95d3T/cXBs/2ppZv9kY1//aWhm/5CP + jv/Y1tP/8O7r//Du6//w7uv/6ujl/6ynoOjW1tYp/v7+Af///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD4+PgH3t7eIZ+alIW2sart5OLe/+zq + 5v/w7ur/8e/r//Hv6//x7+v/7uzo/8fGw/+amZb/fHt4/2lnZf9kZGD/ZGNg/2RjYP9lZGH/a2po/4GA + ff+enJn/x8bD/+7s6P/x7+v/8e/r//Hv6//v7en/4N7a/5KMgafp6ekW////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A+/v7BOzs + 7BPIx8Y9j4l+rLu4sfHi4Nz/6ujl//Du6v/y8Oz/8vDs//Lw7P/y8Oz/8vDs//Lw7P/y8Oz/8vDs//Lw + 7P/y8Oz/8vDs//Lw7P/y8Oz/8vDs//Lw7P/y8Oz/8O7q/+ro5f/f3dn/lpCFy9XU1Cz5+fkG////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP7+/gH4+PgH5ubmGcbFxD+YlIyUnpeO18zKxPni4Nz/6Obi/+zq5v/w7ur/8vDs//Px + 7f/z8e3/8/Ht//Px7f/z8e3/8/Ht//Lw7P/w7ur/7Orm/+jm4v/i4Nz/z83I+p+aj9qdmJGM2traJff3 + 9wj///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A/v7+Afn5+Qbt7e0S3NzcI7++vEqhnph/joh9tKKc + k97Bvbbz3NnW/ebk4f/o5uP/6efk/+nn5P/o5uP/5uTh/9jV0fy+urTyoJqS3o6Hfbainph/v768S9vb + 2yTu7u4R+/v7BP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/v7+Afn5 + +Qbx8fEO5OTkG8vKyD2vrahonZiRjJGLgaePiX63kIp/vpCJfr2PiX6zlI6FoZ+blYexrqtly8vJPOTk + 5Bvx8fEO+fn5Bv7+/gH///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA= + + \ No newline at end of file From 23b877431b1a4942f6dc271a45469b3990eb8620 Mon Sep 17 00:00:00 2001 From: Wilfred Hall Date: Fri, 5 Nov 2021 05:43:35 -0400 Subject: [PATCH 2/4] Added config file, color support --- .../Aura Debugger/Aura Debugger.csproj | 3 + Aura Debugger/Aura Debugger/ConfigManager.cs | 81 ++++ Aura Debugger/Aura Debugger/Form1.Designer.cs | 379 +++++++++--------- Aura Debugger/Aura Debugger/Form1.cs | 259 ++++++------ Aura Debugger/Aura Debugger/Form1.resx | 6 +- Aura Debugger/Aura Debugger/NetworkManager.cs | 152 +++++++ Aura Debugger/Aura Debugger/Program.cs | 9 +- 7 files changed, 548 insertions(+), 341 deletions(-) create mode 100644 Aura Debugger/Aura Debugger/ConfigManager.cs create mode 100644 Aura Debugger/Aura Debugger/NetworkManager.cs diff --git a/Aura Debugger/Aura Debugger/Aura Debugger.csproj b/Aura Debugger/Aura Debugger/Aura Debugger.csproj index a1e2213..6a4b4af 100644 --- a/Aura Debugger/Aura Debugger/Aura Debugger.csproj +++ b/Aura Debugger/Aura Debugger/Aura Debugger.csproj @@ -48,16 +48,19 @@ + Form Form1.cs + Form1.cs + Designer ResXFileCodeGenerator diff --git a/Aura Debugger/Aura Debugger/ConfigManager.cs b/Aura Debugger/Aura Debugger/ConfigManager.cs new file mode 100644 index 0000000..ac92eac --- /dev/null +++ b/Aura Debugger/Aura Debugger/ConfigManager.cs @@ -0,0 +1,81 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Drawing; + +namespace Aura_Debugger +{ + public static class ConfigManager + { + public static string FileName = "cnd_config.ini"; + + public static bool WordWrap = true; + public static bool AutoScroll = true; + + public static void SaveConfig() + { + WordWrap = Program.MainForm.GetWordWrap(); + AutoScroll = Program.MainForm.GetAutoScroll(); + + string config = "word_wrap," + WordWrap.ToString() + "\n"; + config += "auto_scroll," + AutoScroll.ToString() + "\n"; + config += "win_pos," + Program.MainForm.Location.X.ToString() + "," + Program.MainForm.Location.Y.ToString() + "\n"; + config += "win_size," + Program.MainForm.Size.Width.ToString() + "," + Program.MainForm.Size.Height.ToString() + "\n"; + File.WriteAllText(FileName, config); + } + + public static void LoadConfig() + { + if (!File.Exists(FileName)) + { + NetworkManager.WriteInfo("Generating new configuration file"); + SaveConfig(); + } + + string[] config = File.ReadAllLines(FileName); + + for (int i = 0; i < config.Length; i++) + { + string[] parts = config[i].Split(','); + if (parts.Length == 0) { continue; } + + if (parts[0] == "word_wrap") + { + if (parts.Length < 2) { NetworkManager.WriteError("Error parsing word wrap property in configuration file"); return; } + WordWrap = bool.Parse(parts[1]); + Program.MainForm.SetWordWrap(WordWrap); + } + + if (parts[0] == "auto_scroll") + { + if (parts.Length < 2) { NetworkManager.WriteError("Error parsing auto scroll property in configuration file"); return; } + AutoScroll = bool.Parse(parts[1]); + Program.MainForm.SetAutoScroll(AutoScroll); + } + + if (parts[0] == "win_pos") + { + if (parts.Length < 3) { NetworkManager.WriteError("Error parsing window position property in configuration file"); return; } + int x = 0, y = 0; + if (!int.TryParse(parts[1], out x)) { NetworkManager.WriteError("Error parsing window X position value in configuration file"); return; } + if (!int.TryParse(parts[2], out y)) { NetworkManager.WriteError("Error parsing window Y position value in configuration file"); return; } + Program.MainForm.SetDesktopLocation(x, y); + } + + if (parts[0] == "win_size") + { + if (parts.Length < 3) { NetworkManager.WriteError("Error parsing window size property in configuration file"); return; } + int x = 0, y = 0; + if (!int.TryParse(parts[1], out x)) { NetworkManager.WriteError("Error parsing window width value in configuration file"); return; } + if (!int.TryParse(parts[2], out y)) { NetworkManager.WriteError("Error parsing window height value in configuration file"); return; } + Program.MainForm.Size = new Size(x, y); + } + } + + NetworkManager.WriteInfo("Loaded configuration file"); + } + } +} diff --git a/Aura Debugger/Aura Debugger/Form1.Designer.cs b/Aura Debugger/Aura Debugger/Form1.Designer.cs index e15fabf..fed4b0a 100644 --- a/Aura Debugger/Aura Debugger/Form1.Designer.cs +++ b/Aura Debugger/Aura Debugger/Form1.Designer.cs @@ -29,168 +29,148 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.button3 = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.button4 = new System.Windows.Forms.Button(); + this.LabelStatus = new System.Windows.Forms.Label(); + this.WorkerWait = new System.ComponentModel.BackgroundWorker(); + this.ChkAutoScroll = new System.Windows.Forms.CheckBox(); + this.BtnClear = new System.Windows.Forms.Button(); + this.BtnCopy = new System.Windows.Forms.Button(); + this.LabelReceived = new System.Windows.Forms.Label(); + this.BtnConnect = new System.Windows.Forms.Button(); + this.TxtIP = new System.Windows.Forms.TextBox(); + this.BtnWait = new System.Windows.Forms.Button(); this.label3 = new System.Windows.Forms.Label(); - this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker(); - this.label4 = new System.Windows.Forms.Label(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.WorkerConnect = new System.ComponentModel.BackgroundWorker(); + this.LabelIP = new System.Windows.Forms.Label(); + this.ChkWordWrap = new System.Windows.Forms.CheckBox(); + this.TxtOutput = new System.Windows.Forms.RichTextBox(); this.SuspendLayout(); // - // textBox1 + // LabelStatus // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.textBox1.Cursor = System.Windows.Forms.Cursors.Default; - this.textBox1.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox1.ForeColor = System.Drawing.Color.White; - this.textBox1.Location = new System.Drawing.Point(12, 52); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBox1.Size = new System.Drawing.Size(695, 452); - this.textBox1.TabIndex = 0; - this.textBox1.WordWrap = false; - this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); - // - // label1 + this.LabelStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.LabelStatus.AutoSize = true; + this.LabelStatus.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabelStatus.ForeColor = System.Drawing.Color.White; + this.LabelStatus.Location = new System.Drawing.Point(12, 511); + this.LabelStatus.Name = "LabelStatus"; + this.LabelStatus.Size = new System.Drawing.Size(38, 13); + this.LabelStatus.TabIndex = 1; + this.LabelStatus.Text = "Ready"; + this.LabelStatus.Visible = false; // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.Location = new System.Drawing.Point(12, 511); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(156, 13); - this.label1.TabIndex = 1; - this.label1.Text = "Waiting at XXX.XXX.X.XX, 4224"; - this.label1.Visible = false; + // WorkerWait // - // backgroundWorker1 + this.WorkerWait.DoWork += new System.ComponentModel.DoWorkEventHandler(this.WorkerWait_DoWork); // - this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); + // ChkAutoScroll // - // checkBox1 + this.ChkAutoScroll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ChkAutoScroll.AutoSize = true; + this.ChkAutoScroll.Checked = true; + this.ChkAutoScroll.CheckState = System.Windows.Forms.CheckState.Checked; + this.ChkAutoScroll.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ChkAutoScroll.ForeColor = System.Drawing.Color.White; + this.ChkAutoScroll.Location = new System.Drawing.Point(634, 510); + this.ChkAutoScroll.Name = "ChkAutoScroll"; + this.ChkAutoScroll.Size = new System.Drawing.Size(73, 17); + this.ChkAutoScroll.TabIndex = 2; + this.ChkAutoScroll.Text = "Autoscroll"; + this.ChkAutoScroll.UseVisualStyleBackColor = true; + this.ChkAutoScroll.CheckedChanged += new System.EventHandler(this.ChkAutoScroll_CheckedChanged); // - this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.checkBox1.AutoSize = true; - this.checkBox1.Checked = true; - this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox1.ForeColor = System.Drawing.Color.White; - this.checkBox1.Location = new System.Drawing.Point(634, 510); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(73, 17); - this.checkBox1.TabIndex = 2; - this.checkBox1.Text = "Autoscroll"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // BtnClear // - // button1 + this.BtnClear.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.BtnClear.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.BtnClear.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.BtnClear.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.BtnClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnClear.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnClear.ForeColor = System.Drawing.Color.White; + this.BtnClear.Location = new System.Drawing.Point(12, 14); + this.BtnClear.Name = "BtnClear"; + this.BtnClear.Size = new System.Drawing.Size(75, 23); + this.BtnClear.TabIndex = 3; + this.BtnClear.Text = "Clear"; + this.BtnClear.UseVisualStyleBackColor = false; + this.BtnClear.Click += new System.EventHandler(this.BtnClear_Click); // - this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); - this.button1.FlatAppearance.BorderColor = System.Drawing.Color.Gray; - this.button1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); - this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); - this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button1.ForeColor = System.Drawing.Color.White; - this.button1.Location = new System.Drawing.Point(12, 14); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 3; - this.button1.Text = "Clear"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Click += new System.EventHandler(this.button1_Click); + // BtnCopy // - // button2 + this.BtnCopy.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.BtnCopy.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.BtnCopy.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.BtnCopy.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.BtnCopy.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnCopy.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnCopy.ForeColor = System.Drawing.Color.White; + this.BtnCopy.Location = new System.Drawing.Point(93, 14); + this.BtnCopy.Name = "BtnCopy"; + this.BtnCopy.Size = new System.Drawing.Size(75, 23); + this.BtnCopy.TabIndex = 4; + this.BtnCopy.Text = "Copy"; + this.BtnCopy.UseVisualStyleBackColor = false; + this.BtnCopy.Click += new System.EventHandler(this.BtnCopy_Click); // - this.button2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); - this.button2.FlatAppearance.BorderColor = System.Drawing.Color.Gray; - this.button2.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); - this.button2.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); - this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button2.ForeColor = System.Drawing.Color.White; - this.button2.Location = new System.Drawing.Point(93, 14); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 4; - this.button2.Text = "Copy"; - this.button2.UseVisualStyleBackColor = false; - this.button2.Click += new System.EventHandler(this.button2_Click); + // LabelReceived // - // label2 + this.LabelReceived.AutoSize = true; + this.LabelReceived.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabelReceived.ForeColor = System.Drawing.Color.White; + this.LabelReceived.Location = new System.Drawing.Point(174, 19); + this.LabelReceived.Name = "LabelReceived"; + this.LabelReceived.Size = new System.Drawing.Size(86, 13); + this.LabelReceived.TabIndex = 5; + this.LabelReceived.Text = "Received logs: 0"; // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.ForeColor = System.Drawing.Color.White; - this.label2.Location = new System.Drawing.Point(174, 19); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(86, 13); - this.label2.TabIndex = 5; - this.label2.Text = "Received logs: 0"; + // BtnConnect // - // button3 + this.BtnConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BtnConnect.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.BtnConnect.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.BtnConnect.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.BtnConnect.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.BtnConnect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnConnect.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnConnect.ForeColor = System.Drawing.Color.Lime; + this.BtnConnect.Location = new System.Drawing.Point(489, 14); + this.BtnConnect.Name = "BtnConnect"; + this.BtnConnect.Size = new System.Drawing.Size(78, 23); + this.BtnConnect.TabIndex = 6; + this.BtnConnect.Text = "Connect"; + this.BtnConnect.UseVisualStyleBackColor = false; + this.BtnConnect.Click += new System.EventHandler(this.BtnConnect_Click); // - this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); - this.button3.FlatAppearance.BorderColor = System.Drawing.Color.Gray; - this.button3.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); - this.button3.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); - this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button3.ForeColor = System.Drawing.Color.White; - this.button3.Location = new System.Drawing.Point(502, 14); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(59, 23); - this.button3.TabIndex = 6; - this.button3.Text = "Connect"; - this.button3.UseVisualStyleBackColor = false; - this.button3.Click += new System.EventHandler(this.button3_Click); + // TxtIP // - // textBox2 - // - this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.TxtIP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.textBox2.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox2.ForeColor = System.Drawing.Color.White; - this.textBox2.Location = new System.Drawing.Point(353, 14); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(143, 23); - this.textBox2.TabIndex = 7; + this.TxtIP.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.TxtIP.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.TxtIP.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TxtIP.ForeColor = System.Drawing.Color.White; + this.TxtIP.Location = new System.Drawing.Point(353, 14); + this.TxtIP.Name = "TxtIP"; + this.TxtIP.Size = new System.Drawing.Size(130, 23); + this.TxtIP.TabIndex = 7; // - // button4 + // BtnWait // - this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.button4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); - this.button4.FlatAppearance.BorderColor = System.Drawing.Color.Gray; - this.button4.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); - this.button4.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); - this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button4.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button4.ForeColor = System.Drawing.Color.White; - this.button4.Location = new System.Drawing.Point(586, 14); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(121, 23); - this.button4.TabIndex = 8; - this.button4.Text = "Wait for connection"; - this.button4.UseVisualStyleBackColor = false; - this.button4.Click += new System.EventHandler(this.button4_Click); + this.BtnWait.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BtnWait.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.BtnWait.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.BtnWait.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.BtnWait.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.BtnWait.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnWait.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnWait.ForeColor = System.Drawing.Color.White; + this.BtnWait.Location = new System.Drawing.Point(590, 14); + this.BtnWait.Name = "BtnWait"; + this.BtnWait.Size = new System.Drawing.Size(117, 23); + this.BtnWait.TabIndex = 8; + this.BtnWait.Text = "Wait for connection"; + this.BtnWait.UseVisualStyleBackColor = false; + this.BtnWait.Click += new System.EventHandler(this.BtnWait_Click); // // label3 // @@ -198,42 +178,57 @@ private void InitializeComponent() this.label3.AutoSize = true; this.label3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label3.ForeColor = System.Drawing.Color.White; - this.label3.Location = new System.Drawing.Point(567, 19); + this.label3.Location = new System.Drawing.Point(571, 19); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(17, 13); this.label3.TabIndex = 9; this.label3.Text = "or"; // - // backgroundWorker2 + // WorkerConnect + // + this.WorkerConnect.DoWork += new System.ComponentModel.DoWorkEventHandler(this.WorkerConnect_DoWork); // - this.backgroundWorker2.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker2_DoWork); + // LabelIP // - // label4 + this.LabelIP.AutoSize = true; + this.LabelIP.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabelIP.ForeColor = System.Drawing.Color.White; + this.LabelIP.Location = new System.Drawing.Point(302, 19); + this.LabelIP.Name = "LabelIP"; + this.LabelIP.Size = new System.Drawing.Size(45, 13); + this.LabelIP.TabIndex = 10; + this.LabelIP.Text = "IP/Port:"; // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.ForeColor = System.Drawing.Color.White; - this.label4.Location = new System.Drawing.Point(302, 19); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(45, 13); - this.label4.TabIndex = 10; - this.label4.Text = "IP/Port:"; + // ChkWordWrap // - // checkBox2 + this.ChkWordWrap.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ChkWordWrap.AutoSize = true; + this.ChkWordWrap.Checked = true; + this.ChkWordWrap.CheckState = System.Windows.Forms.CheckState.Checked; + this.ChkWordWrap.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ChkWordWrap.ForeColor = System.Drawing.Color.White; + this.ChkWordWrap.Location = new System.Drawing.Point(540, 510); + this.ChkWordWrap.Name = "ChkWordWrap"; + this.ChkWordWrap.Size = new System.Drawing.Size(81, 17); + this.ChkWordWrap.TabIndex = 11; + this.ChkWordWrap.Text = "Word Wrap"; + this.ChkWordWrap.UseVisualStyleBackColor = true; + this.ChkWordWrap.CheckedChanged += new System.EventHandler(this.ChkWordWrap_CheckedChanged); // - this.checkBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.checkBox2.AutoSize = true; - this.checkBox2.Checked = true; - this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox2.ForeColor = System.Drawing.Color.White; - this.checkBox2.Location = new System.Drawing.Point(540, 510); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(81, 17); - this.checkBox2.TabIndex = 11; - this.checkBox2.Text = "Word Wrap"; - this.checkBox2.UseVisualStyleBackColor = true; - this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // TxtOutput + // + this.TxtOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TxtOutput.BackColor = System.Drawing.Color.Black; + this.TxtOutput.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtOutput.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TxtOutput.ForeColor = System.Drawing.Color.White; + this.TxtOutput.Location = new System.Drawing.Point(12, 50); + this.TxtOutput.Name = "TxtOutput"; + this.TxtOutput.Size = new System.Drawing.Size(695, 454); + this.TxtOutput.TabIndex = 12; + this.TxtOutput.Text = ""; // // Form1 // @@ -241,21 +236,22 @@ private void InitializeComponent() this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); this.ClientSize = new System.Drawing.Size(719, 534); - this.Controls.Add(this.checkBox2); - this.Controls.Add(this.label4); + this.Controls.Add(this.TxtOutput); + this.Controls.Add(this.ChkWordWrap); + this.Controls.Add(this.LabelIP); this.Controls.Add(this.label3); - this.Controls.Add(this.button4); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.button3); - this.Controls.Add(this.label2); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Controls.Add(this.checkBox1); - this.Controls.Add(this.label1); - this.Controls.Add(this.textBox1); + this.Controls.Add(this.BtnWait); + this.Controls.Add(this.TxtIP); + this.Controls.Add(this.BtnConnect); + this.Controls.Add(this.LabelReceived); + this.Controls.Add(this.BtnCopy); + this.Controls.Add(this.BtnClear); + this.Controls.Add(this.ChkAutoScroll); + this.Controls.Add(this.LabelStatus); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "Form1"; this.Text = "Cosmos Network Debugger"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout(); @@ -263,21 +259,20 @@ private void InitializeComponent() } #endregion - - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - private System.ComponentModel.BackgroundWorker backgroundWorker1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label LabelStatus; + private System.ComponentModel.BackgroundWorker WorkerWait; + private System.Windows.Forms.CheckBox ChkAutoScroll; + private System.Windows.Forms.Button BtnClear; + private System.Windows.Forms.Button BtnCopy; + private System.Windows.Forms.Label LabelReceived; + private System.Windows.Forms.Button BtnConnect; + private System.Windows.Forms.TextBox TxtIP; + private System.Windows.Forms.Button BtnWait; private System.Windows.Forms.Label label3; - private System.ComponentModel.BackgroundWorker backgroundWorker2; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.CheckBox checkBox2; + private System.ComponentModel.BackgroundWorker WorkerConnect; + private System.Windows.Forms.Label LabelIP; + private System.Windows.Forms.CheckBox ChkWordWrap; + private System.Windows.Forms.RichTextBox TxtOutput; } } diff --git a/Aura Debugger/Aura Debugger/Form1.cs b/Aura Debugger/Aura Debugger/Form1.cs index fb43808..de2d709 100644 --- a/Aura Debugger/Aura Debugger/Form1.cs +++ b/Aura Debugger/Aura Debugger/Form1.cs @@ -6,16 +6,20 @@ */ using System; +using System.IO; using System.ComponentModel; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; +using System.Drawing; namespace Aura_Debugger { public partial class Form1 : Form { + private bool autoscroll; + public Form1() { InitializeComponent(); @@ -23,176 +27,155 @@ public Form1() private void Form1_Load(object sender, EventArgs e) { - button1.Enabled = false; - button2.Enabled = false; - label1.Visible = false; + BtnClear.Enabled = false; + BtnCopy.Enabled = false; + LabelStatus.Visible = false; autoscroll = true; + ConfigManager.LoadConfig(); + + NetworkManager.WriteInfo("Ready to connect"); } - int packetnumber = 0; - int port = 4224; + // wait for connection + private void WorkerWait_DoWork(object sen, DoWorkEventArgs e) + { + NetworkManager.WaitForConnection(); + } - private void backgroundWorker1_DoWork(object sen, DoWorkEventArgs e) + // connect + private void WorkerConnect_DoWork(object sender, DoWorkEventArgs e) { - TcpListener server = null; + NetworkManager.Connect(TxtIP.Text); + } - try + public void ResetState() + { + Invoke((MethodInvoker)(() => { - server = new TcpListener(IPAddress.Any, port); - - server.Start(); - - Byte[] bytes = new Byte[256]; - - while (true) + if (TxtOutput.Text.Length == 0) { - WriteTextBox("Waiting for a connection..."); - - TcpClient client = server.AcceptTcpClient(); - WriteTextBox("Connected!"); - - DebuggerConnected(); - - NetworkStream stream = client.GetStream(); - - int i; - - while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) - { - packetnumber++; - WriteTextBox(Encoding.ASCII.GetString(bytes, 0, i)); - } - - client.Close(); - WriteTextBox("Connection closed!"); + BtnClear.Enabled = false; + BtnCopy.Enabled = false; } - } - catch (SocketException ee) - { - WriteTextBox("Socket Exception: " + ee); - } - finally - { - server.Stop(); - WriteTextBox("Connection closed!"); - } + TxtIP.Enabled = true; + BtnWait.Enabled = true; + BtnConnect.Enabled = true; + + BtnConnect.Text = "Connect"; + BtnConnect.ForeColor = Color.LawnGreen; + })); } - private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e) + public void ConnectedState() { - try + Invoke((MethodInvoker)(() => { - string[] splitted = textBox2.Text.Split(':'); - string ip = splitted[0]; - string port = splitted[1]; - - Byte[] bytes = new Byte[256]; - - while (true) - { - WriteTextBox("Waiting to connect..."); - - TcpClient client = new TcpClient(); - - client.Connect(ip, int.Parse(port)); + BtnClear.Enabled = true; + BtnCopy.Enabled = true; + TxtIP.Enabled = false; + BtnWait.Enabled = false; - //label1.Text = "Connected to " + ip + ", " + port; - //label1.Visible = true; - - WriteTextBox("Connected!"); + BtnConnect.Text = "Disconnect"; + BtnConnect.ForeColor = Color.Tomato; + })); + } - NetworkStream stream = client.GetStream(); + public void WriteTextBox(string message) + { + WriteTextBox(message, Color.White); + } - int i; + public void WriteTextBox(string message, Color color) + { + Invoke((MethodInvoker)(() => + { + TxtOutput.SelectionStart = TxtOutput.TextLength; + TxtOutput.SelectionLength = 0; - while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) - { - packetnumber++; - WriteTextBox(Encoding.ASCII.GetString(bytes, 0, i)); - } + TxtOutput.SelectionColor = color; + TxtOutput.AppendText(message); + TxtOutput.SelectionColor = TxtOutput.ForeColor; + })); + } - client.Close(); - WriteTextBox("Connection closed!"); - } - } - catch (SocketException ee) - { - WriteTextBox("Socket Exception: " + ee); - } - finally + public void ClearLog() + { + Invoke((MethodInvoker)(() => { - WriteTextBox("Connection closed!"); - } + NetworkManager.PacketNumber = 0; + TxtOutput.Clear(); + LabelReceived.Text = "Received Logs: 0"; + })); + } + + public bool GetWordWrap() + { + return TxtOutput.WordWrap; } - void DebuggerConnected() + public bool GetAutoScroll() + { + return autoscroll; + } + + public void SetWordWrap(bool wrap) { Invoke((MethodInvoker)(() => { - button1.Enabled = true; - button2.Enabled = true; + if (wrap) + { + TxtOutput.WordWrap = true; + TxtOutput.ScrollBars = RichTextBoxScrollBars.ForcedVertical; + ChkWordWrap.Checked = true; + } + else + { + TxtOutput.WordWrap = false; + TxtOutput.ScrollBars = RichTextBoxScrollBars.ForcedBoth; + ChkWordWrap.Checked = false; + } })); } - void WriteTextBox(String message) + public void SetAutoScroll(bool autoscrl) { Invoke((MethodInvoker)(() => { - textBox1.Text += (@message + Environment.NewLine); - label2.Text = "Received logs: " + packetnumber.ToString(); + autoscroll = autoscrl; + ChkAutoScroll.Checked = autoscroll; })); } - private void textBox1_TextChanged(object sender, EventArgs e) + private void TxtOutput_TextChanged(object sender, EventArgs e) { if (autoscroll) { - textBox1.SelectionStart = textBox1.Text.Length; - textBox1.ScrollToCaret(); - } - else - { - //Find a way to not move the bar at the top and block it + TxtOutput.SelectionStart = TxtOutput.Text.Length; + TxtOutput.ScrollToCaret(); } } - bool autoscroll = false; - - private void checkBox1_CheckedChanged(object sender, EventArgs e) + private void ChkAutoScroll_CheckedChanged(object sender, EventArgs e) { - if (!checkBox1.Checked) - { - autoscroll = false; - } - else - { - autoscroll = true; - } - + SetAutoScroll(ChkAutoScroll.Checked); } - private void button1_Click(object sender, EventArgs e) + private void BtnClear_Click(object sender, EventArgs e) { - textBox1.Text = ""; - packetnumber = 0; - label2.Text = "Received logs: 0"; + ClearLog(); } - private void button2_Click(object sender, EventArgs e) + private void BtnCopy_Click(object sender, EventArgs e) { - Clipboard.SetText(textBox1.Text); + Clipboard.SetText(TxtOutput.Text); } - private void button4_Click(object sender, EventArgs e) + private void BtnWait_Click(object sender, EventArgs e) { - button4.Visible = false; - button3.Visible = false; - label3.Visible = false; - textBox2.Visible = false; - - string IP = "XX.XX.XX.XX"; + ConnectedState(); + string IP = string.Empty; using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) { socket.Connect("8.8.8.8", 65530); @@ -200,41 +183,33 @@ private void button4_Click(object sender, EventArgs e) IP = endPoint.Address.ToString(); } - label1.Text = "Waiting at " + IP + ", " + port; - label1.Visible = true; + LabelStatus.Text = "Waiting at " + IP + ", " + NetworkManager.Port; + LabelStatus.Visible = true; - backgroundWorker1.RunWorkerAsync(); + WorkerWait.RunWorkerAsync(); } - private void button3_Click(object sender, EventArgs e) + private void BtnConnect_Click(object sender, EventArgs e) { - if (textBox2.Text == "") + if (TxtIP.Text.Length == 0) { - MessageBox.Show("Please specify an IP Address and Port."); + MessageBox.Show("Please specify an IP address and port"); } else { - button4.Visible = false; - button3.Visible = false; - label3.Visible = false; - textBox2.Visible = false; - - backgroundWorker2.RunWorkerAsync(); + ConnectedState(); + WorkerConnect.RunWorkerAsync(); } } - private void checkBox2_CheckedChanged(object sender, EventArgs e) + private void ChkWordWrap_CheckedChanged(object sender, EventArgs e) { - if (checkBox2.Checked) - { - textBox1.WordWrap = true; - textBox1.ScrollBars = ScrollBars.Vertical; - } - else - { - textBox1.WordWrap = false; - textBox1.ScrollBars = ScrollBars.Both; - } + SetWordWrap(ChkWordWrap.Checked); + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + ConfigManager.SaveConfig(); } } } diff --git a/Aura Debugger/Aura Debugger/Form1.resx b/Aura Debugger/Aura Debugger/Form1.resx index 9b117ef..73016f4 100644 --- a/Aura Debugger/Aura Debugger/Form1.resx +++ b/Aura Debugger/Aura Debugger/Form1.resx @@ -117,11 +117,11 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 - - 181, 17 + + 124, 19 53 diff --git a/Aura Debugger/Aura Debugger/NetworkManager.cs b/Aura Debugger/Aura Debugger/NetworkManager.cs new file mode 100644 index 0000000..63b3dc3 --- /dev/null +++ b/Aura Debugger/Aura Debugger/NetworkManager.cs @@ -0,0 +1,152 @@ +using System; +using System.IO; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Net; +using System.Net.Sockets; +using System.Drawing; + +namespace Aura_Debugger +{ + public static class NetworkManager + { + public static TcpListener Listener; + public static TcpClient Client; + + public static int Port; + public static int PacketNumber; + public static bool Connected; + + public static void Initialize() + { + // reset values + Listener = null; + Client = null; + PacketNumber = 0; + Port = 0; + + // not connected + Connected = false; + } + + public static void WriteToLog(string text) + { + Program.MainForm.WriteTextBox(text); + } + + public static void WriteInfo(string text) + { + Program.MainForm.WriteTextBox("[ "); + Program.MainForm.WriteTextBox(">>>", Color.Cyan); + Program.MainForm.WriteTextBox(" ] "); + Program.MainForm.WriteTextBox(text + Environment.NewLine); + } + + public static void WriteError(string text) + { + Program.MainForm.WriteTextBox("[ "); + Program.MainForm.WriteTextBox("ERROR", Color.Red); + Program.MainForm.WriteTextBox(" ] "); + Program.MainForm.WriteTextBox(text + Environment.NewLine); + } + + public static void WaitForConnection() + { + Listener = null; + + try + { + Listener = new TcpListener(IPAddress.Any, Port); + Listener.Start(); + + int i = 0; + byte[] bytes = new byte[256]; + + while (true) + { + WriteInfo("Waiting for a connection..."); + + Client = Listener.AcceptTcpClient(); + WriteInfo("Connected!"); + + Connected = true; + + NetworkStream stream = Client.GetStream(); + while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) + { + PacketNumber++; + WriteToLog(Encoding.ASCII.GetString(bytes, 0, i)); + } + + Client.Close(); + WriteInfo("Connection closed!"); + Program.MainForm.ResetState(); + } + } + // socket exception error + catch (SocketException e) { WriteError("Socket Exception: " + e); Program.MainForm.ResetState(); } + // stop listening and print message + finally { Listener.Stop(); WriteInfo("Connection closed!"); } + } + + public static void Connect(string addr) + { + // parse input string + string[] parts = addr.Split(':'); + string ip = string.Empty; + string port = string.Empty; + + if (parts.Length >= 1) { ip = parts[0]; } + if (parts.Length >= 2) { port = parts[1]; } + + // set port + if (!int.TryParse(port, out Port)) + { + WriteError("Invalid port " + port); + Program.MainForm.ResetState(); + return; + } + + try + { + int i = 0; + byte[] bytes = new byte[256]; + + while (true) + { + WriteInfo("Waiting to connect..."); + + Client = new TcpClient(); + Client.Connect(ip, Port); + + WriteInfo("Connected!"); + Connected = true; + + NetworkStream stream = Client.GetStream(); + while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) + { + PacketNumber++; + WriteToLog(Encoding.ASCII.GetString(bytes, 0, i)); + } + + Client.Close(); + WriteInfo("Connection closed!"); + Program.MainForm.ResetState(); + } + } + catch (SocketException e) + { + WriteError("Socket Exception: " + e); + Program.MainForm.ResetState(); + } + finally + { + WriteInfo("Connection closed!"); + Program.MainForm.ResetState(); + } + } + } +} diff --git a/Aura Debugger/Aura Debugger/Program.cs b/Aura Debugger/Aura Debugger/Program.cs index 9809538..eed9444 100644 --- a/Aura Debugger/Aura Debugger/Program.cs +++ b/Aura Debugger/Aura Debugger/Program.cs @@ -8,15 +8,16 @@ namespace Aura_Debugger { static class Program { - /// - /// Point d'entrée principal de l'application. - /// + public static Form1 MainForm; + [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); + + MainForm = new Form1(); + Application.Run(MainForm); } } } From 916757539a4bfe4c4f7439d91264ee12e4fd21bb Mon Sep 17 00:00:00 2001 From: Wilfred Hall Date: Fri, 5 Nov 2021 06:03:21 -0400 Subject: [PATCH 3/4] Save button, more bug fixes --- Aura Debugger/Aura Debugger/Form1.Designer.cs | 41 ++++++++++++++----- Aura Debugger/Aura Debugger/Form1.cs | 13 +++++- Aura Debugger/Aura Debugger/NetworkManager.cs | 10 ++++- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/Aura Debugger/Aura Debugger/Form1.Designer.cs b/Aura Debugger/Aura Debugger/Form1.Designer.cs index fed4b0a..002489e 100644 --- a/Aura Debugger/Aura Debugger/Form1.Designer.cs +++ b/Aura Debugger/Aura Debugger/Form1.Designer.cs @@ -43,6 +43,7 @@ private void InitializeComponent() this.LabelIP = new System.Windows.Forms.Label(); this.ChkWordWrap = new System.Windows.Forms.CheckBox(); this.TxtOutput = new System.Windows.Forms.RichTextBox(); + this.BtnSave = new System.Windows.Forms.Button(); this.SuspendLayout(); // // LabelStatus @@ -51,7 +52,7 @@ private void InitializeComponent() this.LabelStatus.AutoSize = true; this.LabelStatus.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.LabelStatus.ForeColor = System.Drawing.Color.White; - this.LabelStatus.Location = new System.Drawing.Point(12, 511); + this.LabelStatus.Location = new System.Drawing.Point(12, 522); this.LabelStatus.Name = "LabelStatus"; this.LabelStatus.Size = new System.Drawing.Size(38, 13); this.LabelStatus.TabIndex = 1; @@ -70,7 +71,7 @@ private void InitializeComponent() this.ChkAutoScroll.CheckState = System.Windows.Forms.CheckState.Checked; this.ChkAutoScroll.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.ChkAutoScroll.ForeColor = System.Drawing.Color.White; - this.ChkAutoScroll.Location = new System.Drawing.Point(634, 510); + this.ChkAutoScroll.Location = new System.Drawing.Point(687, 521); this.ChkAutoScroll.Name = "ChkAutoScroll"; this.ChkAutoScroll.Size = new System.Drawing.Size(73, 17); this.ChkAutoScroll.TabIndex = 2; @@ -114,10 +115,11 @@ private void InitializeComponent() // // LabelReceived // + this.LabelReceived.Anchor = System.Windows.Forms.AnchorStyles.Bottom; this.LabelReceived.AutoSize = true; this.LabelReceived.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.LabelReceived.ForeColor = System.Drawing.Color.White; - this.LabelReceived.Location = new System.Drawing.Point(174, 19); + this.LabelReceived.Location = new System.Drawing.Point(343, 522); this.LabelReceived.Name = "LabelReceived"; this.LabelReceived.Size = new System.Drawing.Size(86, 13); this.LabelReceived.TabIndex = 5; @@ -133,7 +135,7 @@ private void InitializeComponent() this.BtnConnect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.BtnConnect.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.BtnConnect.ForeColor = System.Drawing.Color.Lime; - this.BtnConnect.Location = new System.Drawing.Point(489, 14); + this.BtnConnect.Location = new System.Drawing.Point(542, 14); this.BtnConnect.Name = "BtnConnect"; this.BtnConnect.Size = new System.Drawing.Size(78, 23); this.BtnConnect.TabIndex = 6; @@ -151,7 +153,7 @@ private void InitializeComponent() this.TxtIP.ForeColor = System.Drawing.Color.White; this.TxtIP.Location = new System.Drawing.Point(353, 14); this.TxtIP.Name = "TxtIP"; - this.TxtIP.Size = new System.Drawing.Size(130, 23); + this.TxtIP.Size = new System.Drawing.Size(183, 23); this.TxtIP.TabIndex = 7; // // BtnWait @@ -164,7 +166,7 @@ private void InitializeComponent() this.BtnWait.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.BtnWait.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.BtnWait.ForeColor = System.Drawing.Color.White; - this.BtnWait.Location = new System.Drawing.Point(590, 14); + this.BtnWait.Location = new System.Drawing.Point(643, 14); this.BtnWait.Name = "BtnWait"; this.BtnWait.Size = new System.Drawing.Size(117, 23); this.BtnWait.TabIndex = 8; @@ -178,7 +180,7 @@ private void InitializeComponent() this.label3.AutoSize = true; this.label3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label3.ForeColor = System.Drawing.Color.White; - this.label3.Location = new System.Drawing.Point(571, 19); + this.label3.Location = new System.Drawing.Point(624, 19); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(17, 13); this.label3.TabIndex = 9; @@ -207,7 +209,7 @@ private void InitializeComponent() this.ChkWordWrap.CheckState = System.Windows.Forms.CheckState.Checked; this.ChkWordWrap.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.ChkWordWrap.ForeColor = System.Drawing.Color.White; - this.ChkWordWrap.Location = new System.Drawing.Point(540, 510); + this.ChkWordWrap.Location = new System.Drawing.Point(593, 521); this.ChkWordWrap.Name = "ChkWordWrap"; this.ChkWordWrap.Size = new System.Drawing.Size(81, 17); this.ChkWordWrap.TabIndex = 11; @@ -226,16 +228,34 @@ private void InitializeComponent() this.TxtOutput.ForeColor = System.Drawing.Color.White; this.TxtOutput.Location = new System.Drawing.Point(12, 50); this.TxtOutput.Name = "TxtOutput"; - this.TxtOutput.Size = new System.Drawing.Size(695, 454); + this.TxtOutput.Size = new System.Drawing.Size(748, 465); this.TxtOutput.TabIndex = 12; this.TxtOutput.Text = ""; // + // BtnSave + // + this.BtnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(36)))), ((int)(((byte)(36))))); + this.BtnSave.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.BtnSave.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(80)))), ((int)(((byte)(233))))); + this.BtnSave.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(255))))); + this.BtnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.BtnSave.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnSave.ForeColor = System.Drawing.Color.White; + this.BtnSave.Location = new System.Drawing.Point(174, 14); + this.BtnSave.Name = "BtnSave"; + this.BtnSave.Size = new System.Drawing.Size(75, 23); + this.BtnSave.TabIndex = 13; + this.BtnSave.Text = "Save..."; + this.BtnSave.UseVisualStyleBackColor = false; + this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click); + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); - this.ClientSize = new System.Drawing.Size(719, 534); + this.ClientSize = new System.Drawing.Size(772, 545); + this.Controls.Add(this.BtnSave); this.Controls.Add(this.TxtOutput); this.Controls.Add(this.ChkWordWrap); this.Controls.Add(this.LabelIP); @@ -273,6 +293,7 @@ private void InitializeComponent() private System.Windows.Forms.Label LabelIP; private System.Windows.Forms.CheckBox ChkWordWrap; private System.Windows.Forms.RichTextBox TxtOutput; + private System.Windows.Forms.Button BtnSave; } } diff --git a/Aura Debugger/Aura Debugger/Form1.cs b/Aura Debugger/Aura Debugger/Form1.cs index de2d709..7ec978c 100644 --- a/Aura Debugger/Aura Debugger/Form1.cs +++ b/Aura Debugger/Aura Debugger/Form1.cs @@ -33,8 +33,6 @@ private void Form1_Load(object sender, EventArgs e) autoscroll = true; ConfigManager.LoadConfig(); - - NetworkManager.WriteInfo("Ready to connect"); } // wait for connection @@ -211,5 +209,16 @@ private void Form1_FormClosing(object sender, FormClosingEventArgs e) { ConfigManager.SaveConfig(); } + + private void BtnSave_Click(object sender, EventArgs e) + { + SaveFileDialog diag = new SaveFileDialog(); + diag.Filter = "Text Files (.txt)|*.txt|All Files|*.*"; + + if (diag.ShowDialog() == DialogResult.OK) + { + File.WriteAllLines(diag.FileName, TxtOutput.Lines); + } + } } } diff --git a/Aura Debugger/Aura Debugger/NetworkManager.cs b/Aura Debugger/Aura Debugger/NetworkManager.cs index 63b3dc3..c1f2642 100644 --- a/Aura Debugger/Aura Debugger/NetworkManager.cs +++ b/Aura Debugger/Aura Debugger/NetworkManager.cs @@ -102,7 +102,7 @@ public static void Connect(string addr) if (parts.Length >= 1) { ip = parts[0]; } if (parts.Length >= 2) { port = parts[1]; } - // set port + // parse port if (!int.TryParse(port, out Port)) { WriteError("Invalid port " + port); @@ -110,6 +110,14 @@ public static void Connect(string addr) return; } + // validate port + if (Port >= 0xFFFF) + { + WriteError("Invalid port " + Port.ToString()); + Program.MainForm.ResetState(); + return; + } + try { int i = 0; From 88f190b26a61154fb99e8e87282d75ef46ffb984 Mon Sep 17 00:00:00 2001 From: Wilfred Hall Date: Fri, 5 Nov 2021 06:31:57 -0400 Subject: [PATCH 4/4] More bug fixes --- Aura Debugger/Aura Debugger/Form1.Designer.cs | 3 +- Aura Debugger/Aura Debugger/Form1.cs | 58 +++++++++++++------ Aura Debugger/Aura Debugger/NetworkManager.cs | 45 ++++++++++++-- 3 files changed, 82 insertions(+), 24 deletions(-) diff --git a/Aura Debugger/Aura Debugger/Form1.Designer.cs b/Aura Debugger/Aura Debugger/Form1.Designer.cs index 002489e..090f67d 100644 --- a/Aura Debugger/Aura Debugger/Form1.Designer.cs +++ b/Aura Debugger/Aura Debugger/Form1.Designer.cs @@ -57,7 +57,7 @@ private void InitializeComponent() this.LabelStatus.Size = new System.Drawing.Size(38, 13); this.LabelStatus.TabIndex = 1; this.LabelStatus.Text = "Ready"; - this.LabelStatus.Visible = false; + this.LabelStatus.Visible = true; // // WorkerWait // @@ -231,6 +231,7 @@ private void InitializeComponent() this.TxtOutput.Size = new System.Drawing.Size(748, 465); this.TxtOutput.TabIndex = 12; this.TxtOutput.Text = ""; + this.TxtOutput.TextChanged += new System.EventHandler(this.TxtOutput_TextChanged); // // BtnSave // diff --git a/Aura Debugger/Aura Debugger/Form1.cs b/Aura Debugger/Aura Debugger/Form1.cs index 7ec978c..24aeae3 100644 --- a/Aura Debugger/Aura Debugger/Form1.cs +++ b/Aura Debugger/Aura Debugger/Form1.cs @@ -18,7 +18,7 @@ namespace Aura_Debugger { public partial class Form1 : Form { - private bool autoscroll; + private bool autoscroll = true; public Form1() { @@ -27,11 +27,7 @@ public Form1() private void Form1_Load(object sender, EventArgs e) { - BtnClear.Enabled = false; - BtnCopy.Enabled = false; - LabelStatus.Visible = false; - - autoscroll = true; + ResetState(); ConfigManager.LoadConfig(); } @@ -62,6 +58,19 @@ public void ResetState() BtnConnect.Text = "Connect"; BtnConnect.ForeColor = Color.LawnGreen; + + LabelStatus.Text = "Ready to connect"; + })); + } + + public void ConnectingState() + { + Invoke((MethodInvoker)(() => + { + BtnConnect.Text = "Disconnect"; + BtnConnect.ForeColor = Color.Tomato; + BtnWait.Enabled = false; + LabelStatus.Text = "Attempting connection to: " + NetworkManager.IP + ":" + NetworkManager.Port.ToString(); })); } @@ -73,9 +82,22 @@ public void ConnectedState() BtnCopy.Enabled = true; TxtIP.Enabled = false; BtnWait.Enabled = false; + BtnConnect.Enabled = true; + BtnWait.Enabled = false; BtnConnect.Text = "Disconnect"; BtnConnect.ForeColor = Color.Tomato; + + LabelStatus.Text = "Connected to: " + NetworkManager.IP + ":" + NetworkManager.Port.ToString(); + })); + } + + public void WaitState() + { + ConnectedState(); + Invoke((MethodInvoker)(() => + { + LabelStatus.Text = "Waiting for: " + NetworkManager.IP + ":" + NetworkManager.Port.ToString(); })); } @@ -171,33 +193,31 @@ private void BtnCopy_Click(object sender, EventArgs e) private void BtnWait_Click(object sender, EventArgs e) { - ConnectedState(); - string IP = string.Empty; using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) { - socket.Connect("8.8.8.8", 65530); + NetworkManager.IP = "8.8.8.8"; + NetworkManager.Port = 65530; + socket.Connect(NetworkManager.IP, NetworkManager.Port); var endPoint = socket.LocalEndPoint as IPEndPoint; IP = endPoint.Address.ToString(); } - LabelStatus.Text = "Waiting at " + IP + ", " + NetworkManager.Port; - LabelStatus.Visible = true; - WorkerWait.RunWorkerAsync(); } private void BtnConnect_Click(object sender, EventArgs e) { - if (TxtIP.Text.Length == 0) + if (NetworkManager.Waiting || NetworkManager.Connected) { - MessageBox.Show("Please specify an IP address and port"); + if (NetworkManager.Client != null) { NetworkManager.Client.Close(); } + if (NetworkManager.Listener != null) { NetworkManager.Listener.Stop(); } + ResetState(); + return; } - else - { - ConnectedState(); - WorkerConnect.RunWorkerAsync(); - } + + if (TxtIP.Text.Length == 0) { MessageBox.Show("Please specify an IP address and port"); } + else { WorkerConnect.RunWorkerAsync(); } } private void ChkWordWrap_CheckedChanged(object sender, EventArgs e) diff --git a/Aura Debugger/Aura Debugger/NetworkManager.cs b/Aura Debugger/Aura Debugger/NetworkManager.cs index c1f2642..cde27bc 100644 --- a/Aura Debugger/Aura Debugger/NetworkManager.cs +++ b/Aura Debugger/Aura Debugger/NetworkManager.cs @@ -16,9 +16,11 @@ public static class NetworkManager public static TcpListener Listener; public static TcpClient Client; + public static string IP; public static int Port; public static int PacketNumber; public static bool Connected; + public static bool Waiting; public static void Initialize() { @@ -27,9 +29,11 @@ public static void Initialize() Client = null; PacketNumber = 0; Port = 0; + IP = "0.0.0.0"; // not connected Connected = false; + Waiting = false; } public static void WriteToLog(string text) @@ -56,6 +60,7 @@ public static void WriteError(string text) public static void WaitForConnection() { Listener = null; + Waiting = true; try { @@ -68,11 +73,14 @@ public static void WaitForConnection() while (true) { WriteInfo("Waiting for a connection..."); + Program.MainForm.WaitState(); Client = Listener.AcceptTcpClient(); WriteInfo("Connected!"); Connected = true; + Waiting = false; + Program.MainForm.ConnectedState(); NetworkStream stream = Client.GetStream(); while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) @@ -84,16 +92,33 @@ public static void WaitForConnection() Client.Close(); WriteInfo("Connection closed!"); Program.MainForm.ResetState(); + Connected = false; } } // socket exception error - catch (SocketException e) { WriteError("Socket Exception: " + e); Program.MainForm.ResetState(); } + catch (SocketException e) + { + if (e.SocketErrorCode == SocketError.Interrupted) { } + else { WriteError("Socket Exception: " + e); } + Program.MainForm.ResetState(); + Waiting = false; + Connected = false; + } // stop listening and print message - finally { Listener.Stop(); WriteInfo("Connection closed!"); } + finally + { + Listener.Stop(); + WriteInfo("Connection closed!"); + Program.MainForm.ResetState(); + Waiting = false; + Connected = false; + } } public static void Connect(string addr) { + Waiting = true; + // parse input string string[] parts = addr.Split(':'); string ip = string.Empty; @@ -102,7 +127,10 @@ public static void Connect(string addr) if (parts.Length >= 1) { ip = parts[0]; } if (parts.Length >= 2) { port = parts[1]; } - // parse port + // set ip + IP = ip; + + // parse and set port if (!int.TryParse(port, out Port)) { WriteError("Invalid port " + port); @@ -126,12 +154,15 @@ public static void Connect(string addr) while (true) { WriteInfo("Waiting to connect..."); + Program.MainForm.ConnectingState(); Client = new TcpClient(); Client.Connect(ip, Port); WriteInfo("Connected!"); Connected = true; + Waiting = false; + Program.MainForm.ConnectedState(); NetworkStream stream = Client.GetStream(); while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) @@ -143,17 +174,23 @@ public static void Connect(string addr) Client.Close(); WriteInfo("Connection closed!"); Program.MainForm.ResetState(); + Connected = false; } } catch (SocketException e) { - WriteError("Socket Exception: " + e); + if (e.SocketErrorCode == SocketError.Interrupted) { } + else { WriteError("Socket Exception: " + e); } Program.MainForm.ResetState(); + Waiting = false; + Connected = false; } finally { WriteInfo("Connection closed!"); Program.MainForm.ResetState(); + Waiting = false; + Connected = false; } } }