diff --git a/AppConfig.cs b/AppConfig.cs index d68b0be..6c647cb 100644 --- a/AppConfig.cs +++ b/AppConfig.cs @@ -8,6 +8,7 @@ namespace FunDraw { public class AppConfig { - public static string APP_API_HOST = "https://fundraw.lt.id.vn"; + public static string APP_API_HOST = "http://localhost:3000"; + public static string WS_API_HOST = "ws://localhost:3000/game"; } } diff --git a/ChangePassword.Designer.cs b/ChangePassword.Designer.cs index a40351a..a9eab69 100644 --- a/ChangePassword.Designer.cs +++ b/ChangePassword.Designer.cs @@ -34,82 +34,41 @@ private void InitializeComponent() Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges7 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges8 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChangePassword)); - label2 = new Label(); label1 = new Label(); label3 = new Label(); - tbOldPass = new Guna.UI2.WinForms.Guna2TextBox(); tbNewPass = new Guna.UI2.WinForms.Guna2TextBox(); tbConfirm = new Guna.UI2.WinForms.Guna2TextBox(); guna2HtmlLabel2 = new Guna.UI2.WinForms.Guna2HtmlLabel(); btSend = new Guna.UI2.WinForms.Guna2Button(); SuspendLayout(); // - // label2 - // - label2.AutoSize = true; - label2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - label2.Location = new Point(158, 146); - label2.Name = "label2"; - label2.Size = new Size(130, 21); - label2.TabIndex = 3; - label2.Text = "Mật khẩu hiện tại"; - // // label1 // label1.AutoSize = true; label1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - label1.Location = new Point(158, 190); + label1.Location = new Point(116, 119); label1.Name = "label1"; - label1.Size = new Size(107, 21); + label1.Size = new Size(112, 21); label1.TabIndex = 4; - label1.Text = "Mật khẩu mới"; + label1.Text = "New Password"; // // label3 // label3.AutoSize = true; label3.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - label3.Location = new Point(158, 237); + label3.Location = new Point(116, 166); label3.Name = "label3"; - label3.Size = new Size(142, 21); + label3.Size = new Size(173, 21); label3.TabIndex = 5; - label3.Text = "Xác nhận mật khẩu"; - // - // tbOldPass - // - tbOldPass.Anchor = AnchorStyles.None; - tbOldPass.BorderRadius = 12; - tbOldPass.Cursor = Cursors.IBeam; - tbOldPass.CustomizableEdges = customizableEdges1; - tbOldPass.DefaultText = ""; - tbOldPass.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); - tbOldPass.DisabledState.FillColor = Color.FromArgb(226, 226, 226); - tbOldPass.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); - tbOldPass.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); - tbOldPass.FillColor = Color.FromArgb(224, 224, 224); - tbOldPass.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); - tbOldPass.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - tbOldPass.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - tbOldPass.Location = new Point(369, 146); - tbOldPass.Margin = new Padding(4, 5, 4, 5); - tbOldPass.Name = "tbOldPass"; - tbOldPass.PasswordChar = '●'; - tbOldPass.PlaceholderForeColor = Color.Gainsboro; - tbOldPass.PlaceholderText = ""; - tbOldPass.SelectedText = ""; - tbOldPass.ShadowDecoration.CustomizableEdges = customizableEdges2; - tbOldPass.Size = new Size(256, 21); - tbOldPass.TabIndex = 20; - tbOldPass.UseSystemPasswordChar = true; + label3.Text = "Confirm New Password"; // // tbNewPass // tbNewPass.Anchor = AnchorStyles.None; - tbNewPass.BorderRadius = 12; + tbNewPass.BorderRadius = 8; tbNewPass.Cursor = Cursors.IBeam; - tbNewPass.CustomizableEdges = customizableEdges3; + tbNewPass.CustomizableEdges = customizableEdges1; tbNewPass.DefaultText = ""; tbNewPass.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbNewPass.DisabledState.FillColor = Color.FromArgb(226, 226, 226); @@ -119,24 +78,24 @@ private void InitializeComponent() tbNewPass.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); tbNewPass.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); tbNewPass.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - tbNewPass.Location = new Point(369, 190); + tbNewPass.Location = new Point(311, 119); tbNewPass.Margin = new Padding(4, 5, 4, 5); tbNewPass.Name = "tbNewPass"; tbNewPass.PasswordChar = '●'; tbNewPass.PlaceholderForeColor = Color.Gainsboro; tbNewPass.PlaceholderText = ""; tbNewPass.SelectedText = ""; - tbNewPass.ShadowDecoration.CustomizableEdges = customizableEdges4; - tbNewPass.Size = new Size(256, 21); + tbNewPass.ShadowDecoration.CustomizableEdges = customizableEdges2; + tbNewPass.Size = new Size(256, 24); tbNewPass.TabIndex = 21; tbNewPass.UseSystemPasswordChar = true; // // tbConfirm // tbConfirm.Anchor = AnchorStyles.None; - tbConfirm.BorderRadius = 12; + tbConfirm.BorderRadius = 8; tbConfirm.Cursor = Cursors.IBeam; - tbConfirm.CustomizableEdges = customizableEdges5; + tbConfirm.CustomizableEdges = customizableEdges3; tbConfirm.DefaultText = ""; tbConfirm.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbConfirm.DisabledState.FillColor = Color.FromArgb(226, 226, 226); @@ -146,15 +105,15 @@ private void InitializeComponent() tbConfirm.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); tbConfirm.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); tbConfirm.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - tbConfirm.Location = new Point(369, 237); + tbConfirm.Location = new Point(311, 166); tbConfirm.Margin = new Padding(4, 5, 4, 5); tbConfirm.Name = "tbConfirm"; tbConfirm.PasswordChar = '●'; tbConfirm.PlaceholderForeColor = Color.Gainsboro; tbConfirm.PlaceholderText = ""; tbConfirm.SelectedText = ""; - tbConfirm.ShadowDecoration.CustomizableEdges = customizableEdges6; - tbConfirm.Size = new Size(256, 21); + tbConfirm.ShadowDecoration.CustomizableEdges = customizableEdges4; + tbConfirm.Size = new Size(256, 24); tbConfirm.TabIndex = 22; tbConfirm.UseSystemPasswordChar = true; // @@ -163,14 +122,14 @@ private void InitializeComponent() guna2HtmlLabel2.Anchor = AnchorStyles.None; guna2HtmlLabel2.AutoSize = false; guna2HtmlLabel2.BackColor = Color.Transparent; - guna2HtmlLabel2.Font = new Font("Microsoft Sans Serif", 28.2F, FontStyle.Bold, GraphicsUnit.Point, 0); + guna2HtmlLabel2.Font = new Font("Microsoft Sans Serif", 22F, FontStyle.Bold); guna2HtmlLabel2.ForeColor = SystemColors.WindowText; - guna2HtmlLabel2.Location = new Point(258, 67); + guna2HtmlLabel2.Location = new Point(200, 41); guna2HtmlLabel2.Margin = new Padding(4, 3, 4, 3); guna2HtmlLabel2.Name = "guna2HtmlLabel2"; guna2HtmlLabel2.Size = new Size(253, 44); guna2HtmlLabel2.TabIndex = 23; - guna2HtmlLabel2.Text = "Đổi mật khẩu"; + guna2HtmlLabel2.Text = "Change password"; guna2HtmlLabel2.TextAlignment = ContentAlignment.TopCenter; // // btSend @@ -178,7 +137,7 @@ private void InitializeComponent() btSend.Anchor = AnchorStyles.None; btSend.Animated = true; btSend.BorderRadius = 12; - btSend.CustomizableEdges = customizableEdges7; + btSend.CustomizableEdges = customizableEdges5; btSend.DisabledState.BorderColor = Color.DarkGray; btSend.DisabledState.CustomBorderColor = Color.DarkGray; btSend.DisabledState.FillColor = Color.FromArgb(169, 169, 169); @@ -186,30 +145,29 @@ private void InitializeComponent() btSend.FillColor = Color.FromArgb(160, 210, 235); btSend.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); btSend.ForeColor = Color.Black; - btSend.Location = new Point(288, 311); + btSend.Location = new Point(230, 240); btSend.Margin = new Padding(4, 3, 4, 3); btSend.Name = "btSend"; - btSend.ShadowDecoration.CustomizableEdges = customizableEdges8; + btSend.ShadowDecoration.CustomizableEdges = customizableEdges6; btSend.Size = new Size(166, 40); btSend.TabIndex = 24; - btSend.Text = "OK"; + btSend.Text = "Submit"; btSend.Click += btSend_Click; // // ChangePassword // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(766, 410); + ClientSize = new Size(650, 320); Controls.Add(btSend); Controls.Add(guna2HtmlLabel2); Controls.Add(tbConfirm); Controls.Add(tbNewPass); - Controls.Add(tbOldPass); Controls.Add(label3); Controls.Add(label1); - Controls.Add(label2); Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; Name = "ChangePassword"; Text = "Change Password"; ResumeLayout(false); @@ -217,11 +175,8 @@ private void InitializeComponent() } #endregion - - private Label label2; private Label label1; private Label label3; - private Guna.UI2.WinForms.Guna2TextBox tbOldPass; private Guna.UI2.WinForms.Guna2TextBox tbNewPass; private Guna.UI2.WinForms.Guna2TextBox tbConfirm; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel2; diff --git a/ChangePassword.cs b/ChangePassword.cs index 0aaa367..82e4664 100644 --- a/ChangePassword.cs +++ b/ChangePassword.cs @@ -19,11 +19,10 @@ public ChangePassword() private async void btSend_Click(object sender, EventArgs e) { - string old_pass = tbOldPass.Text; string new_pass = tbNewPass.Text; string confirm = tbConfirm.Text; - if (string.IsNullOrWhiteSpace(old_pass)|| string.IsNullOrWhiteSpace(new_pass)|| string.IsNullOrWhiteSpace(confirm)) + if (string.IsNullOrWhiteSpace(new_pass)|| string.IsNullOrWhiteSpace(confirm)) { MessageBox.Show("Please enter all required fields.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; @@ -33,14 +32,13 @@ private async void btSend_Click(object sender, EventArgs e) { MessageBox.Show("The passwords do not match. Please try again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); } - if(new_pass==old_pass) - { - MessageBox.Show("Please use a different password from your old one.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - if(await Session.ChangePassword(new_pass)) + + if (await Session.ChangePassword(new_pass)) { - MessageBox.Show("Changed password successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show("Changed password successfully! Please start the app again.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + Application.Exit(); } + else MessageBox.Show($"An error has occurred. Please try again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } diff --git a/Components/PlayerCard.Designer.cs b/Components/PlayerCard.Designer.cs new file mode 100644 index 0000000..2554fec --- /dev/null +++ b/Components/PlayerCard.Designer.cs @@ -0,0 +1,122 @@ +namespace FunDraw.Components +{ + partial class PlayerCard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + lbl_playerName = new Label(); + guna2CirclePictureBox1 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); + guna2Button1 = new Guna.UI2.WinForms.Guna2Button(); + lbl_playerScore = new Label(); + ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).BeginInit(); + SuspendLayout(); + // + // lbl_playerName + // + lbl_playerName.AutoSize = true; + lbl_playerName.BackColor = Color.FromArgb(160, 210, 235); + lbl_playerName.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0); + lbl_playerName.ForeColor = SystemColors.ActiveCaptionText; + lbl_playerName.Location = new Point(59, 6); + lbl_playerName.Name = "lbl_playerName"; + lbl_playerName.Size = new Size(41, 15); + lbl_playerName.TabIndex = 11; + lbl_playerName.Text = "Player"; + // + // guna2CirclePictureBox1 + // + guna2CirclePictureBox1.BackColor = Color.FromArgb(160, 210, 235); + guna2CirclePictureBox1.ImageRotate = 0F; + guna2CirclePictureBox1.Location = new Point(18, 6); + guna2CirclePictureBox1.Margin = new Padding(3, 2, 3, 2); + guna2CirclePictureBox1.Name = "guna2CirclePictureBox1"; + guna2CirclePictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges4; + guna2CirclePictureBox1.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; + guna2CirclePictureBox1.Size = new Size(36, 32); + guna2CirclePictureBox1.TabIndex = 10; + guna2CirclePictureBox1.TabStop = false; + // + // guna2Button1 + // + guna2Button1.Animated = true; + guna2Button1.AnimatedGIF = true; + guna2Button1.BorderRadius = 20; + guna2Button1.CustomizableEdges = customizableEdges5; + guna2Button1.DisabledState.BorderColor = Color.DarkGray; + guna2Button1.DisabledState.CustomBorderColor = Color.DarkGray; + guna2Button1.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + guna2Button1.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + guna2Button1.FillColor = Color.FromArgb(160, 210, 235); + guna2Button1.Font = new Font("Segoe UI", 9F); + guna2Button1.ForeColor = Color.White; + guna2Button1.ImageAlign = HorizontalAlignment.Left; + guna2Button1.Location = new Point(3, 2); + guna2Button1.Margin = new Padding(3, 2, 3, 2); + guna2Button1.Name = "guna2Button1"; + guna2Button1.ShadowDecoration.CustomizableEdges = customizableEdges6; + guna2Button1.Size = new Size(182, 38); + guna2Button1.TabIndex = 9; + guna2Button1.TextOffset = new Point(10, 0); + // + // lbl_playerScore + // + lbl_playerScore.AutoSize = true; + lbl_playerScore.BackColor = Color.FromArgb(160, 210, 235); + lbl_playerScore.ForeColor = SystemColors.ActiveCaptionText; + lbl_playerScore.Location = new Point(59, 21); + lbl_playerScore.Name = "lbl_playerScore"; + lbl_playerScore.Size = new Size(48, 15); + lbl_playerScore.TabIndex = 12; + lbl_playerScore.Text = "Score: 0"; + // + // PlayerCard + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.Transparent; + Controls.Add(lbl_playerScore); + Controls.Add(lbl_playerName); + Controls.Add(guna2CirclePictureBox1); + Controls.Add(guna2Button1); + Name = "PlayerCard"; + Size = new Size(187, 43); + ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label lbl_playerName; + private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox1; + private Guna.UI2.WinForms.Guna2Button guna2Button1; + private Label lbl_playerScore; + } +} diff --git a/Components/PlayerCard.cs b/Components/PlayerCard.cs new file mode 100644 index 0000000..4824b1d --- /dev/null +++ b/Components/PlayerCard.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FunDraw.Components +{ + public partial class PlayerCard : UserControl + { + public PlayerCard() + { + InitializeComponent(); + } + + public string PlayerName + { + get => lbl_playerName.Text; + set => lbl_playerName.Text = value; + } + + public int PlayerScore + { + get => int.Parse(lbl_playerScore.Text.Replace("Score: ","")); + set => lbl_playerScore.Text = $"Score: {value}"; + } + } +} diff --git a/Form1.resx b/Components/PlayerCard.resx similarity index 100% rename from Form1.resx rename to Components/PlayerCard.resx diff --git a/Components/WordButton.Designer.cs b/Components/WordButton.Designer.cs new file mode 100644 index 0000000..347d17e --- /dev/null +++ b/Components/WordButton.Designer.cs @@ -0,0 +1,67 @@ +namespace FunDraw.Components +{ + partial class WordButton + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges2 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + wordBtn = new Guna.UI2.WinForms.Guna2Button(); + SuspendLayout(); + // + // wordBtn + // + wordBtn.CustomizableEdges = customizableEdges1; + wordBtn.DisabledState.BorderColor = Color.DarkGray; + wordBtn.DisabledState.CustomBorderColor = Color.DarkGray; + wordBtn.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + wordBtn.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + wordBtn.Font = new Font("Segoe UI", 9F); + wordBtn.ForeColor = Color.White; + wordBtn.Location = new Point(0, 0); + wordBtn.Name = "wordBtn"; + wordBtn.ShadowDecoration.CustomizableEdges = customizableEdges2; + wordBtn.Size = new Size(232, 45); + wordBtn.TabIndex = 1; + wordBtn.Text = "Word"; + wordBtn.Click += wordBtn_Click; + // + // WordButton + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(wordBtn); + Name = "WordButton"; + Size = new Size(232, 45); + ResumeLayout(false); + } + + #endregion + + private Guna.UI2.WinForms.Guna2Button wordBtn; + } +} diff --git a/Components/WordButton.cs b/Components/WordButton.cs new file mode 100644 index 0000000..d3c61be --- /dev/null +++ b/Components/WordButton.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FunDraw.Components +{ + public partial class WordButton : UserControl + { + public WordButton() + { + InitializeComponent(); + } + + public string Word + { + get => wordBtn.Text; + set => wordBtn.Text = value; + } + + public event EventHandler WordButtonClick + { + add => wordBtn.Click += value; + remove => wordBtn.Click -= value; + } + + private void wordBtn_Click(object sender, EventArgs e) + { + Gateway.Instance.Emit("chooseWord", new { roomId = GameManager.roomId, word = this.Word }); + Debug.WriteLine(this.Word); + } + } +} diff --git a/Components/WordButton.resx b/Components/WordButton.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Components/WordButton.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ForgotPassword.Designer.cs b/ForgotPassword.Designer.cs index c68cb20..9983472 100644 --- a/ForgotPassword.Designer.cs +++ b/ForgotPassword.Designer.cs @@ -28,52 +28,53 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges2 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges3 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges7 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges8 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges9 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges10 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges11 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges12 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges13 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges14 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ForgotPassword)); - guna2HtmlLabel2 = new Guna.UI2.WinForms.Guna2HtmlLabel(); - guna2HtmlLabel1 = new Guna.UI2.WinForms.Guna2HtmlLabel(); tbEmail = new Guna.UI2.WinForms.Guna2TextBox(); - btSend = new Guna.UI2.WinForms.Guna2Button(); + btnEmail = new Guna.UI2.WinForms.Guna2Button(); + groupBox1 = new GroupBox(); + label2 = new Label(); + hideEmail = new PictureBox(); + label1 = new Label(); + groupBox2 = new GroupBox(); + label3 = new Label(); + btnOTP = new Guna.UI2.WinForms.Guna2Button(); + tbOTP = new Guna.UI2.WinForms.Guna2TextBox(); + hideOTP = new PictureBox(); + groupBox3 = new GroupBox(); + hidePassword = new PictureBox(); + btnPassword = new Guna.UI2.WinForms.Guna2Button(); + tbConfirm = new Guna.UI2.WinForms.Guna2TextBox(); + label4 = new Label(); + tbPassword = new Guna.UI2.WinForms.Guna2TextBox(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)hideEmail).BeginInit(); + groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)hideOTP).BeginInit(); + groupBox3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)hidePassword).BeginInit(); SuspendLayout(); // - // guna2HtmlLabel2 - // - guna2HtmlLabel2.Anchor = AnchorStyles.None; - guna2HtmlLabel2.BackColor = Color.Transparent; - guna2HtmlLabel2.Font = new Font("Microsoft Sans Serif", 28.2F, FontStyle.Bold, GraphicsUnit.Point, 0); - guna2HtmlLabel2.ForeColor = SystemColors.WindowText; - guna2HtmlLabel2.Location = new Point(235, 79); - guna2HtmlLabel2.Margin = new Padding(4, 3, 4, 3); - guna2HtmlLabel2.Name = "guna2HtmlLabel2"; - guna2HtmlLabel2.Size = new Size(276, 46); - guna2HtmlLabel2.TabIndex = 17; - guna2HtmlLabel2.Text = "Quên mật khẩu\r\n"; - guna2HtmlLabel2.TextAlignment = ContentAlignment.MiddleCenter; - // - // guna2HtmlLabel1 - // - guna2HtmlLabel1.Anchor = AnchorStyles.None; - guna2HtmlLabel1.BackColor = Color.Transparent; - guna2HtmlLabel1.Font = new Font("Microsoft Sans Serif", 13.8F, FontStyle.Regular, GraphicsUnit.Point, 0); - guna2HtmlLabel1.ForeColor = SystemColors.WindowText; - guna2HtmlLabel1.Location = new Point(157, 154); - guna2HtmlLabel1.Margin = new Padding(4, 3, 4, 3); - guna2HtmlLabel1.Name = "guna2HtmlLabel1"; - guna2HtmlLabel1.Size = new Size(445, 24); - guna2HtmlLabel1.TabIndex = 18; - guna2HtmlLabel1.Text = "Một email sẽ được gửi về để bạn có thể đặt lại mật khẩu"; - guna2HtmlLabel1.TextAlignment = ContentAlignment.MiddleCenter; - // // tbEmail // tbEmail.Anchor = AnchorStyles.None; tbEmail.BorderRadius = 12; tbEmail.Cursor = Cursors.IBeam; - tbEmail.CustomizableEdges = customizableEdges5; - tbEmail.DefaultText = "Email"; + tbEmail.CustomizableEdges = customizableEdges1; + tbEmail.DefaultText = ""; tbEmail.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbEmail.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbEmail.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -81,64 +82,313 @@ private void InitializeComponent() tbEmail.FillColor = Color.FromArgb(224, 224, 224); tbEmail.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); tbEmail.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + tbEmail.ForeColor = Color.Black; tbEmail.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - tbEmail.Location = new Point(178, 207); + tbEmail.Location = new Point(12, 43); tbEmail.Margin = new Padding(4, 5, 4, 5); tbEmail.Name = "tbEmail"; tbEmail.PasswordChar = '\0'; tbEmail.PlaceholderForeColor = Color.Gainsboro; tbEmail.PlaceholderText = ""; tbEmail.SelectedText = ""; - tbEmail.ShadowDecoration.CustomizableEdges = customizableEdges6; - tbEmail.Size = new Size(410, 39); + tbEmail.ShadowDecoration.CustomizableEdges = customizableEdges2; + tbEmail.Size = new Size(233, 39); tbEmail.TabIndex = 19; - tbEmail.Enter += tbEmail_Enter; - tbEmail.Leave += tbEmail_Leave; - // - // btSend - // - btSend.Anchor = AnchorStyles.None; - btSend.Animated = true; - btSend.BorderRadius = 12; - btSend.CustomizableEdges = customizableEdges7; - btSend.DisabledState.BorderColor = Color.DarkGray; - btSend.DisabledState.CustomBorderColor = Color.DarkGray; - btSend.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - btSend.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - btSend.FillColor = Color.FromArgb(160, 210, 235); - btSend.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); - btSend.ForeColor = Color.Black; - btSend.Location = new Point(298, 288); - btSend.Margin = new Padding(4, 3, 4, 3); - btSend.Name = "btSend"; - btSend.ShadowDecoration.CustomizableEdges = customizableEdges8; - btSend.Size = new Size(166, 40); - btSend.TabIndex = 20; - btSend.Text = "Gửi"; - btSend.Click += btSend_Click; + // + // btnEmail + // + btnEmail.Anchor = AnchorStyles.None; + btnEmail.Animated = true; + btnEmail.BorderRadius = 12; + btnEmail.CustomizableEdges = customizableEdges3; + btnEmail.DisabledState.BorderColor = Color.DarkGray; + btnEmail.DisabledState.CustomBorderColor = Color.DarkGray; + btnEmail.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + btnEmail.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + btnEmail.FillColor = Color.FromArgb(160, 210, 235); + btnEmail.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + btnEmail.ForeColor = Color.Black; + btnEmail.Location = new Point(253, 43); + btnEmail.Margin = new Padding(4, 3, 4, 3); + btnEmail.Name = "btnEmail"; + btnEmail.ShadowDecoration.CustomizableEdges = customizableEdges4; + btnEmail.Size = new Size(117, 40); + btnEmail.TabIndex = 20; + btnEmail.Text = "Submit"; + btnEmail.Click += btSend_Click; + // + // groupBox1 + // + groupBox1.Controls.Add(label2); + groupBox1.Controls.Add(btnEmail); + groupBox1.Controls.Add(tbEmail); + groupBox1.Controls.Add(hideEmail); + groupBox1.Location = new Point(12, 44); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(377, 103); + groupBox1.TabIndex = 21; + groupBox1.TabStop = false; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(12, 19); + label2.Name = "label2"; + label2.Size = new Size(136, 15); + label2.TabIndex = 21; + label2.Text = "Type your account email"; + // + // hideEmail + // + hideEmail.BorderStyle = BorderStyle.FixedSingle; + hideEmail.Location = new Point(0, 0); + hideEmail.Name = "hideEmail"; + hideEmail.Size = new Size(377, 103); + hideEmail.TabIndex = 24; + hideEmail.TabStop = false; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 18F, FontStyle.Bold, GraphicsUnit.Point, 0); + label1.Location = new Point(12, 9); + label1.Name = "label1"; + label1.Size = new Size(190, 32); + label1.TabIndex = 21; + label1.Text = "Reset Password"; + // + // groupBox2 + // + groupBox2.Controls.Add(hideOTP); + groupBox2.Controls.Add(label3); + groupBox2.Controls.Add(btnOTP); + groupBox2.Controls.Add(tbOTP); + groupBox2.Location = new Point(12, 153); + groupBox2.Name = "groupBox2"; + groupBox2.Size = new Size(377, 103); + groupBox2.TabIndex = 22; + groupBox2.TabStop = false; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(12, 19); + label3.Name = "label3"; + label3.Size = new Size(156, 15); + label3.TabIndex = 21; + label3.Text = "Enter OTP sent to your email"; + // + // btnOTP + // + btnOTP.Anchor = AnchorStyles.None; + btnOTP.Animated = true; + btnOTP.BorderRadius = 12; + btnOTP.CustomizableEdges = customizableEdges5; + btnOTP.DisabledState.BorderColor = Color.DarkGray; + btnOTP.DisabledState.CustomBorderColor = Color.DarkGray; + btnOTP.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + btnOTP.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + btnOTP.FillColor = Color.FromArgb(160, 210, 235); + btnOTP.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + btnOTP.ForeColor = Color.Black; + btnOTP.Location = new Point(253, 43); + btnOTP.Margin = new Padding(4, 3, 4, 3); + btnOTP.Name = "btnOTP"; + btnOTP.ShadowDecoration.CustomizableEdges = customizableEdges6; + btnOTP.Size = new Size(117, 40); + btnOTP.TabIndex = 20; + btnOTP.Text = "Submit"; + btnOTP.Click += btnOTP_Click; + // + // tbOTP + // + tbOTP.Anchor = AnchorStyles.None; + tbOTP.BorderRadius = 12; + tbOTP.Cursor = Cursors.IBeam; + tbOTP.CustomizableEdges = customizableEdges7; + tbOTP.DefaultText = ""; + tbOTP.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); + tbOTP.DisabledState.FillColor = Color.FromArgb(226, 226, 226); + tbOTP.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); + tbOTP.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); + tbOTP.FillColor = Color.FromArgb(224, 224, 224); + tbOTP.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + tbOTP.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + tbOTP.ForeColor = Color.Black; + tbOTP.HoverState.BorderColor = Color.FromArgb(94, 148, 255); + tbOTP.Location = new Point(12, 43); + tbOTP.Margin = new Padding(4, 5, 4, 5); + tbOTP.MaxLength = 6; + tbOTP.Name = "tbOTP"; + tbOTP.PasswordChar = '\0'; + tbOTP.PlaceholderForeColor = Color.Gainsboro; + tbOTP.PlaceholderText = ""; + tbOTP.SelectedText = ""; + tbOTP.ShadowDecoration.CustomizableEdges = customizableEdges8; + tbOTP.Size = new Size(233, 39); + tbOTP.TabIndex = 19; + tbOTP.KeyPress += tbOTP_KeyPress; + // + // hideOTP + // + hideOTP.BorderStyle = BorderStyle.FixedSingle; + hideOTP.Location = new Point(0, 0); + hideOTP.Name = "hideOTP"; + hideOTP.Size = new Size(377, 103); + hideOTP.TabIndex = 25; + hideOTP.TabStop = false; + // + // groupBox3 + // + groupBox3.Controls.Add(hidePassword); + groupBox3.Controls.Add(btnPassword); + groupBox3.Controls.Add(tbConfirm); + groupBox3.Controls.Add(label4); + groupBox3.Controls.Add(tbPassword); + groupBox3.Location = new Point(12, 262); + groupBox3.Name = "groupBox3"; + groupBox3.Size = new Size(377, 191); + groupBox3.TabIndex = 23; + groupBox3.TabStop = false; + // + // hidePassword + // + hidePassword.BorderStyle = BorderStyle.FixedSingle; + hidePassword.Location = new Point(0, 0); + hidePassword.Name = "hidePassword"; + hidePassword.Size = new Size(377, 191); + hidePassword.TabIndex = 25; + hidePassword.TabStop = false; + // + // btnPassword + // + btnPassword.Anchor = AnchorStyles.None; + btnPassword.Animated = true; + btnPassword.BorderRadius = 12; + btnPassword.CustomizableEdges = customizableEdges9; + btnPassword.DisabledState.BorderColor = Color.DarkGray; + btnPassword.DisabledState.CustomBorderColor = Color.DarkGray; + btnPassword.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + btnPassword.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + btnPassword.FillColor = Color.FromArgb(160, 210, 235); + btnPassword.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + btnPassword.ForeColor = Color.Black; + btnPassword.Location = new Point(12, 139); + btnPassword.Margin = new Padding(4, 3, 4, 3); + btnPassword.Name = "btnPassword"; + btnPassword.ShadowDecoration.CustomizableEdges = customizableEdges10; + btnPassword.Size = new Size(358, 40); + btnPassword.TabIndex = 23; + btnPassword.Text = "Submit"; + btnPassword.Click += btnPassword_Click; + // + // tbConfirm + // + tbConfirm.Anchor = AnchorStyles.None; + tbConfirm.BorderRadius = 12; + tbConfirm.Cursor = Cursors.IBeam; + tbConfirm.CustomizableEdges = customizableEdges11; + tbConfirm.DefaultText = ""; + tbConfirm.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); + tbConfirm.DisabledState.FillColor = Color.FromArgb(226, 226, 226); + tbConfirm.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); + tbConfirm.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); + tbConfirm.FillColor = Color.FromArgb(224, 224, 224); + tbConfirm.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + tbConfirm.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + tbConfirm.ForeColor = Color.Black; + tbConfirm.HoverState.BorderColor = Color.FromArgb(94, 148, 255); + tbConfirm.Location = new Point(12, 92); + tbConfirm.Margin = new Padding(4, 5, 4, 5); + tbConfirm.Name = "tbConfirm"; + tbConfirm.PasswordChar = '●'; + tbConfirm.PlaceholderForeColor = Color.Gainsboro; + tbConfirm.PlaceholderText = ""; + tbConfirm.SelectedText = ""; + tbConfirm.ShadowDecoration.CustomizableEdges = customizableEdges12; + tbConfirm.Size = new Size(358, 39); + tbConfirm.TabIndex = 22; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(12, 19); + label4.Name = "label4"; + label4.Size = new Size(112, 15); + label4.TabIndex = 21; + label4.Text = "Enter new password"; + // + // tbPassword + // + tbPassword.Anchor = AnchorStyles.None; + tbPassword.BorderRadius = 12; + tbPassword.Cursor = Cursors.IBeam; + tbPassword.CustomizableEdges = customizableEdges13; + tbPassword.DefaultText = ""; + tbPassword.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); + tbPassword.DisabledState.FillColor = Color.FromArgb(226, 226, 226); + tbPassword.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); + tbPassword.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); + tbPassword.FillColor = Color.FromArgb(224, 224, 224); + tbPassword.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + tbPassword.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + tbPassword.ForeColor = Color.Black; + tbPassword.HoverState.BorderColor = Color.FromArgb(94, 148, 255); + tbPassword.Location = new Point(12, 43); + tbPassword.Margin = new Padding(4, 5, 4, 5); + tbPassword.Name = "tbPassword"; + tbPassword.PasswordChar = '●'; + tbPassword.PlaceholderForeColor = Color.Gainsboro; + tbPassword.PlaceholderText = ""; + tbPassword.SelectedText = ""; + tbPassword.ShadowDecoration.CustomizableEdges = customizableEdges14; + tbPassword.Size = new Size(358, 39); + tbPassword.TabIndex = 19; // // ForgotPassword // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(781, 408); - Controls.Add(btSend); - Controls.Add(tbEmail); - Controls.Add(guna2HtmlLabel1); - Controls.Add(guna2HtmlLabel2); + ClientSize = new Size(404, 471); + Controls.Add(groupBox3); + Controls.Add(groupBox2); + Controls.Add(label1); + Controls.Add(groupBox1); Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; Name = "ForgotPassword"; Text = "Forgot Password"; + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)hideEmail).EndInit(); + groupBox2.ResumeLayout(false); + groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)hideOTP).EndInit(); + groupBox3.ResumeLayout(false); + groupBox3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)hidePassword).EndInit(); ResumeLayout(false); PerformLayout(); } #endregion - - private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel2; - private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel1; private Guna.UI2.WinForms.Guna2TextBox tbEmail; - private Guna.UI2.WinForms.Guna2Button btSend; + private Guna.UI2.WinForms.Guna2Button btnEmail; + private GroupBox groupBox1; + private Label label2; + private Label label1; + private GroupBox groupBox2; + private Label label3; + private Guna.UI2.WinForms.Guna2Button btnOTP; + private Guna.UI2.WinForms.Guna2TextBox tbOTP; + private GroupBox groupBox3; + private Guna.UI2.WinForms.Guna2Button btnPassword; + private Guna.UI2.WinForms.Guna2TextBox tbConfirm; + private Label label4; + private Guna.UI2.WinForms.Guna2TextBox tbPassword; + private PictureBox hideEmail; + private PictureBox hideOTP; + private PictureBox hidePassword; } } \ No newline at end of file diff --git a/ForgotPassword.cs b/ForgotPassword.cs index aa065b7..bffd736 100644 --- a/ForgotPassword.cs +++ b/ForgotPassword.cs @@ -13,6 +13,9 @@ namespace FunDraw { public partial class ForgotPassword : Form { + private string _OTP = ""; + private string _Email = ""; + public ForgotPassword() { InitializeComponent(); @@ -37,7 +40,9 @@ private async void btSend_Click(object sender, EventArgs e) { if (await Session.ForgotPassword(user_email)) { - MessageBox.Show("Password has been sent to your email. Please check your inbox.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + _Email = user_email; + hideEmail.BringToFront(); + hideOTP.SendToBack(); } else MessageBox.Show($"Email not found. Please check the email address and try again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -47,21 +52,38 @@ private async void btSend_Click(object sender, EventArgs e) } } - private void tbEmail_Enter(object sender, EventArgs e) + private void btnOTP_Click(object sender, EventArgs e) + { + _OTP = tbOTP.Text.Trim(); + + hideOTP.BringToFront(); + hidePassword.SendToBack(); + } + + private async void btnPassword_Click(object sender, EventArgs e) { - if (tbEmail.Text == "Email") + string password = tbPassword.Text; + string confirm_password = tbConfirm.Text; + + if (string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(confirm_password)) + { + MessageBox.Show("Please enter your new password and confirm it.", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (await Session.PasswordOTP(_Email, _OTP, password, confirm_password)) { - tbEmail.Text = ""; - tbEmail.ForeColor = Color.Black; + MessageBox.Show("Password changed successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.Close(); } + else MessageBox.Show("An error occurred. Please try again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } - private void tbEmail_Leave(object sender, EventArgs e) + private void tbOTP_KeyPress(object sender, KeyPressEventArgs e) { - if (tbEmail.Text == "") + if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) { - tbEmail.Text = "Email"; - tbEmail.ForeColor = Color.FromArgb(125, 137, 149); + e.Handled = true; } } } diff --git a/Form1.Designer.cs b/Form1.Designer.cs deleted file mode 100644 index f5a77d0..0000000 --- a/Form1.Designer.cs +++ /dev/null @@ -1,107 +0,0 @@ -namespace FunDraw -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - button1 = new Button(); - textBox1 = new TextBox(); - textBox2 = new TextBox(); - button2 = new Button(); - button3 = new Button(); - SuspendLayout(); - // - // button1 - // - button1.Location = new Point(406, 212); - button1.Name = "button1"; - button1.Size = new Size(198, 50); - button1.TabIndex = 0; - button1.Text = "Login"; - button1.UseVisualStyleBackColor = true; - button1.Click += button1_Click; - // - // textBox1 - // - textBox1.Location = new Point(278, 212); - textBox1.Name = "textBox1"; - textBox1.Size = new Size(100, 23); - textBox1.TabIndex = 1; - // - // textBox2 - // - textBox2.Location = new Point(278, 253); - textBox2.Name = "textBox2"; - textBox2.Size = new Size(100, 23); - textBox2.TabIndex = 2; - // - // button2 - // - button2.Location = new Point(459, 96); - button2.Name = "button2"; - button2.Size = new Size(198, 50); - button2.TabIndex = 3; - button2.Text = "Call API"; - button2.UseVisualStyleBackColor = true; - button2.Click += button2_Click; - // - // button3 - // - button3.Location = new Point(485, 308); - button3.Name = "button3"; - button3.Size = new Size(198, 50); - button3.TabIndex = 4; - button3.Text = "Refresh Token"; - button3.UseVisualStyleBackColor = true; - button3.Click += button3_Click; - // - // Form1 - // - AutoScaleDimensions = new SizeF(7F, 15F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); - Controls.Add(button3); - Controls.Add(button2); - Controls.Add(textBox2); - Controls.Add(textBox1); - Controls.Add(button1); - FormBorderStyle = FormBorderStyle.None; - Name = "Form1"; - Text = "Form1"; - ResumeLayout(false); - PerformLayout(); - } - - #endregion - - private Button button1; - private TextBox textBox2; - private TextBox textBox1; - private Button button2; - private Button button3; - } -} diff --git a/Form1.cs b/Form1.cs deleted file mode 100644 index 53f6cb6..0000000 --- a/Form1.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Newtonsoft.Json.Linq; -using System.Diagnostics; - -namespace FunDraw -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - - private async void button1_Click(object sender, EventArgs e) - { - string username = textBox1.Text.Trim(); - string password = textBox2.Text.Trim(); - await Session.Login(username, password); - } - - private async void button2_Click(object sender, EventArgs e) - { - JObject result = await Session.GET("users/profile", ""); - Debug.WriteLine(result); - } - - private async void button3_Click(object sender, EventArgs e) - { - await Session.RefreshToken(); - } - } -} diff --git a/FormState.cs b/FormState.cs new file mode 100644 index 0000000..d6d5bd6 --- /dev/null +++ b/FormState.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FunDraw +{ + public static class FormState + { + public static void LoginForm() + { + Thread th = new Thread(() => + { + Application.Run(new Login()); + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } + + public static void MainMenuForm() + { + Thread th = new Thread(() => + { + Application.Run(new MainMenu()); + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } + + public static void HostRoomForm() + { + Thread th = new Thread(() => + { + Application.Run(new HostRoom()); + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } + + public static void WaitingRoomForm() + { + Thread th = new Thread(() => + { + Application.Run(new WaitingRoom()); + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } + + public static void GameRoomForm() + { + Thread th = new Thread(() => + { + Application.Run(new GameRoom()); + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } + } +} diff --git a/FunDraw.csproj b/FunDraw.csproj index c06be8c..031c43a 100644 --- a/FunDraw.csproj +++ b/FunDraw.csproj @@ -12,9 +12,15 @@ + + + + + Form + Form diff --git a/GameManager.cs b/GameManager.cs new file mode 100644 index 0000000..50a3592 --- /dev/null +++ b/GameManager.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FunDraw +{ + public class GameManager + { + static string _roomId = ""; + static bool _isHost = false; + static bool _gameStarted = false; + static bool _isDrawer = false; + + public static string roomId + { + get { return _roomId; } + set { _roomId = value; } + } + + public static bool isHost + { + get { return _isHost; } + set { _isHost = value; } + } + + public static bool gameStart + { + get { return _gameStarted; } + set { _gameStarted = value; } + } + + public static bool isDrawer + { + get { return _isDrawer; } + set { _isDrawer = value; } + } + } +} diff --git a/GameRoom.Designer.cs b/GameRoom.Designer.cs new file mode 100644 index 0000000..373ebe8 --- /dev/null +++ b/GameRoom.Designer.cs @@ -0,0 +1,623 @@ +namespace FunDraw +{ + partial class GameRoom + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges19 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges20 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges17 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges18 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges21 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges22 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GameRoom)); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges23 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges24 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges25 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges26 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges27 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges28 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges29 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges30 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges31 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges32 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + guna2Panel1 = new Guna.UI2.WinForms.Guna2Panel(); + chatBox = new RichTextBox(); + chatInput = new Guna.UI2.WinForms.Guna2TextBox(); + canvas = new Guna.UI2.WinForms.Guna2PictureBox(); + roundLabel = new Label(); + timer = new Label(); + btnPencil = new Button(); + panel1 = new Panel(); + btnColourPalette = new Button(); + btnClear = new Button(); + btnEraser = new Button(); + wordHint = new TextBox(); + flowLayoutPanel1 = new FlowLayoutPanel(); + hideTool = new GroupBox(); + wordSelector = new Guna.UI2.WinForms.Guna2GroupBox(); + label2 = new Label(); + wordSelectorFlow = new FlowLayoutPanel(); + hideCanvas = new Guna.UI2.WinForms.Guna2PictureBox(); + endTurnBox = new Guna.UI2.WinForms.Guna2GroupBox(); + endTurnText = new TextBox(); + wordChooseBox = new Guna.UI2.WinForms.Guna2GroupBox(); + wordChooseText = new TextBox(); + endGameGroup = new GroupBox(); + textBox2 = new TextBox(); + playerRank = new TextBox(); + mainMenuBtn = new Guna.UI2.WinForms.Guna2Button(); + podium3 = new Label(); + pictureBox3 = new PictureBox(); + podium2 = new Label(); + pictureBox2 = new PictureBox(); + podium1 = new Label(); + pictureBox1 = new PictureBox(); + label3 = new Label(); + guna2Panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)canvas).BeginInit(); + panel1.SuspendLayout(); + wordSelector.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)hideCanvas).BeginInit(); + endTurnBox.SuspendLayout(); + wordChooseBox.SuspendLayout(); + endGameGroup.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox3).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox2).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + SuspendLayout(); + // + // guna2Panel1 + // + guna2Panel1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; + guna2Panel1.BorderRadius = 20; + guna2Panel1.Controls.Add(chatBox); + guna2Panel1.Controls.Add(chatInput); + guna2Panel1.CustomizableEdges = customizableEdges19; + guna2Panel1.FillColor = Color.Gainsboro; + guna2Panel1.ForeColor = SystemColors.AppWorkspace; + guna2Panel1.Location = new Point(1122, 9); + guna2Panel1.Margin = new Padding(3, 2, 3, 2); + guna2Panel1.Name = "guna2Panel1"; + guna2Panel1.ShadowDecoration.CustomizableEdges = customizableEdges20; + guna2Panel1.Size = new Size(206, 680); + guna2Panel1.TabIndex = 0; + // + // chatBox + // + chatBox.BackColor = Color.Gainsboro; + chatBox.BorderStyle = BorderStyle.None; + chatBox.Location = new Point(0, 24); + chatBox.Name = "chatBox"; + chatBox.Size = new Size(206, 620); + chatBox.TabIndex = 2; + chatBox.Text = ""; + // + // chatInput + // + chatInput.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + chatInput.BorderRadius = 20; + customizableEdges17.TopLeft = false; + customizableEdges17.TopRight = false; + chatInput.CustomizableEdges = customizableEdges17; + chatInput.DefaultText = ""; + chatInput.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); + chatInput.DisabledState.FillColor = Color.FromArgb(226, 226, 226); + chatInput.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); + chatInput.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); + chatInput.FillColor = Color.DarkSeaGreen; + chatInput.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + chatInput.Font = new Font("Segoe UI", 9F, FontStyle.Bold); + chatInput.ForeColor = Color.Black; + chatInput.HoverState.BorderColor = Color.FromArgb(94, 148, 255); + chatInput.Location = new Point(0, 640); + chatInput.Name = "chatInput"; + chatInput.PasswordChar = '\0'; + chatInput.PlaceholderForeColor = Color.DarkGray; + chatInput.PlaceholderText = ""; + chatInput.SelectedText = ""; + chatInput.ShadowDecoration.CustomizableEdges = customizableEdges18; + chatInput.Size = new Size(206, 40); + chatInput.TabIndex = 1; + chatInput.KeyDown += chatInput_KeyDown; + // + // canvas + // + canvas.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + canvas.BackColor = Color.White; + canvas.CustomizableEdges = customizableEdges21; + canvas.ImageRotate = 0F; + canvas.Location = new Point(203, 33); + canvas.Margin = new Padding(3, 2, 3, 2); + canvas.Name = "canvas"; + canvas.ShadowDecoration.CustomizableEdges = customizableEdges22; + canvas.Size = new Size(913, 566); + canvas.TabIndex = 1; + canvas.TabStop = false; + canvas.Paint += canvas_Paint; + canvas.MouseDown += canvas_MouseDown; + canvas.MouseMove += canvas_MouseMove; + canvas.MouseUp += canvas_MouseUp; + // + // roundLabel + // + roundLabel.AutoSize = true; + roundLabel.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + roundLabel.ForeColor = SystemColors.ActiveCaptionText; + roundLabel.Location = new Point(10, 9); + roundLabel.Name = "roundLabel"; + roundLabel.Size = new Size(60, 21); + roundLabel.TabIndex = 3; + roundLabel.Text = "Round"; + // + // timer + // + timer.AllowDrop = true; + timer.AutoSize = true; + timer.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + timer.ForeColor = Color.Red; + timer.Location = new Point(160, 9); + timer.Name = "timer"; + timer.Size = new Size(41, 21); + timer.TabIndex = 4; + timer.Text = "0:00"; + // + // btnPencil + // + btnPencil.Cursor = Cursors.Hand; + btnPencil.FlatAppearance.MouseDownBackColor = Color.Maroon; + btnPencil.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); + btnPencil.FlatStyle = FlatStyle.Flat; + btnPencil.ForeColor = Color.White; + btnPencil.Image = (Image)resources.GetObject("btnPencil.Image"); + btnPencil.ImageAlign = ContentAlignment.MiddleRight; + btnPencil.Location = new Point(404, 12); + btnPencil.Name = "btnPencil"; + btnPencil.Size = new Size(56, 63); + btnPencil.TabIndex = 6; + btnPencil.Text = "Pencil"; + btnPencil.TextAlign = ContentAlignment.BottomCenter; + btnPencil.UseVisualStyleBackColor = true; + btnPencil.Click += pencil_Click; + // + // panel1 + // + panel1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + panel1.BackColor = Color.FromArgb(64, 64, 64); + panel1.Controls.Add(btnColourPalette); + panel1.Controls.Add(btnClear); + panel1.Controls.Add(btnEraser); + panel1.Controls.Add(btnPencil); + panel1.Location = new Point(203, 604); + panel1.Name = "panel1"; + panel1.Size = new Size(913, 88); + panel1.TabIndex = 7; + // + // btnColourPalette + // + btnColourPalette.Cursor = Cursors.Hand; + btnColourPalette.FlatAppearance.MouseDownBackColor = Color.Maroon; + btnColourPalette.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); + btnColourPalette.FlatStyle = FlatStyle.Flat; + btnColourPalette.ForeColor = Color.White; + btnColourPalette.Image = (Image)resources.GetObject("btnColourPalette.Image"); + btnColourPalette.ImageAlign = ContentAlignment.TopRight; + btnColourPalette.Location = new Point(528, 12); + btnColourPalette.Name = "btnColourPalette"; + btnColourPalette.Size = new Size(58, 63); + btnColourPalette.TabIndex = 12; + btnColourPalette.Text = "Color"; + btnColourPalette.TextAlign = ContentAlignment.BottomCenter; + btnColourPalette.UseVisualStyleBackColor = true; + btnColourPalette.Click += colourPalette_Click; + // + // btnClear + // + btnClear.FlatAppearance.MouseDownBackColor = Color.Maroon; + btnClear.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); + btnClear.FlatStyle = FlatStyle.Flat; + btnClear.ForeColor = Color.White; + btnClear.ImageAlign = ContentAlignment.MiddleRight; + btnClear.Location = new Point(342, 12); + btnClear.Name = "btnClear"; + btnClear.Size = new Size(56, 63); + btnClear.TabIndex = 11; + btnClear.Text = "Clear"; + btnClear.UseVisualStyleBackColor = true; + btnClear.Click += Clear_Click; + // + // btnEraser + // + btnEraser.Cursor = Cursors.Hand; + btnEraser.FlatAppearance.MouseDownBackColor = Color.Maroon; + btnEraser.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); + btnEraser.FlatStyle = FlatStyle.Flat; + btnEraser.ForeColor = Color.White; + btnEraser.Image = (Image)resources.GetObject("btnEraser.Image"); + btnEraser.ImageAlign = ContentAlignment.TopRight; + btnEraser.Location = new Point(466, 12); + btnEraser.Name = "btnEraser"; + btnEraser.Size = new Size(56, 63); + btnEraser.TabIndex = 7; + btnEraser.Text = "Eraser"; + btnEraser.TextAlign = ContentAlignment.BottomCenter; + btnEraser.UseVisualStyleBackColor = true; + btnEraser.Click += eraser_Click; + // + // wordHint + // + wordHint.BackColor = SystemColors.ButtonFace; + wordHint.BorderStyle = BorderStyle.None; + wordHint.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + wordHint.Location = new Point(413, 5); + wordHint.Name = "wordHint"; + wordHint.ReadOnly = true; + wordHint.Size = new Size(500, 22); + wordHint.TabIndex = 8; + wordHint.TextAlign = HorizontalAlignment.Center; + // + // flowLayoutPanel1 + // + flowLayoutPanel1.BorderStyle = BorderStyle.FixedSingle; + flowLayoutPanel1.Location = new Point(10, 33); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new Size(185, 656); + flowLayoutPanel1.TabIndex = 39; + // + // hideTool + // + hideTool.Location = new Point(201, 604); + hideTool.Name = "hideTool"; + hideTool.Size = new Size(915, 89); + hideTool.TabIndex = 13; + hideTool.TabStop = false; + // + // wordSelector + // + wordSelector.BackColor = Color.Transparent; + wordSelector.BorderColor = Color.Black; + wordSelector.Controls.Add(label2); + wordSelector.Controls.Add(wordSelectorFlow); + wordSelector.CustomBorderColor = SystemColors.MenuHighlight; + wordSelector.CustomizableEdges = customizableEdges23; + wordSelector.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + wordSelector.ForeColor = Color.Black; + wordSelector.Location = new Point(547, 102); + wordSelector.Name = "wordSelector"; + wordSelector.ShadowDecoration.CustomizableEdges = customizableEdges24; + wordSelector.Size = new Size(242, 299); + wordSelector.TabIndex = 40; + wordSelector.Text = "You are the drawer!"; + wordSelector.TextAlign = HorizontalAlignment.Center; + // + // label2 + // + label2.AutoSize = true; + label2.Font = new Font("Segoe UI", 10F, FontStyle.Bold); + label2.Location = new Point(65, 42); + label2.Name = "label2"; + label2.Size = new Size(109, 19); + label2.TabIndex = 2; + label2.Text = "Choose a word"; + // + // wordSelectorFlow + // + wordSelectorFlow.BackColor = SystemColors.ButtonHighlight; + wordSelectorFlow.BorderStyle = BorderStyle.FixedSingle; + wordSelectorFlow.Location = new Point(0, 64); + wordSelectorFlow.Name = "wordSelectorFlow"; + wordSelectorFlow.Size = new Size(242, 235); + wordSelectorFlow.TabIndex = 1; + // + // hideCanvas + // + hideCanvas.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + hideCanvas.BackColor = Color.White; + hideCanvas.CustomizableEdges = customizableEdges25; + hideCanvas.FillColor = Color.Silver; + hideCanvas.ImageRotate = 0F; + hideCanvas.Location = new Point(203, 33); + hideCanvas.Margin = new Padding(3, 2, 3, 2); + hideCanvas.Name = "hideCanvas"; + hideCanvas.ShadowDecoration.CustomizableEdges = customizableEdges26; + hideCanvas.Size = new Size(911, 566); + hideCanvas.TabIndex = 42; + hideCanvas.TabStop = false; + // + // endTurnBox + // + endTurnBox.Controls.Add(endTurnText); + endTurnBox.CustomBorderColor = SystemColors.MenuHighlight; + endTurnBox.CustomizableEdges = customizableEdges27; + endTurnBox.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + endTurnBox.ForeColor = Color.Black; + endTurnBox.Location = new Point(513, 123); + endTurnBox.Name = "endTurnBox"; + endTurnBox.ShadowDecoration.CustomizableEdges = customizableEdges28; + endTurnBox.Size = new Size(300, 73); + endTurnBox.TabIndex = 43; + endTurnBox.Text = "Time is up! ⏰"; + endTurnBox.TextAlign = HorizontalAlignment.Center; + // + // endTurnText + // + endTurnText.BorderStyle = BorderStyle.None; + endTurnText.Font = new Font("Segoe UI", 11.25F); + endTurnText.Location = new Point(3, 43); + endTurnText.Name = "endTurnText"; + endTurnText.Size = new Size(294, 20); + endTurnText.TabIndex = 0; + endTurnText.Text = "The word was: {word}"; + endTurnText.TextAlign = HorizontalAlignment.Center; + // + // wordChooseBox + // + wordChooseBox.Controls.Add(wordChooseText); + wordChooseBox.CustomBorderColor = SystemColors.MenuHighlight; + wordChooseBox.CustomizableEdges = customizableEdges29; + wordChooseBox.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + wordChooseBox.ForeColor = Color.Black; + wordChooseBox.Location = new Point(513, 123); + wordChooseBox.Name = "wordChooseBox"; + wordChooseBox.ShadowDecoration.CustomizableEdges = customizableEdges30; + wordChooseBox.Size = new Size(300, 73); + wordChooseBox.TabIndex = 44; + wordChooseBox.Text = "Choosing a word...."; + wordChooseBox.TextAlign = HorizontalAlignment.Center; + // + // wordChooseText + // + wordChooseText.BorderStyle = BorderStyle.None; + wordChooseText.Font = new Font("Segoe UI", 11.25F); + wordChooseText.Location = new Point(3, 43); + wordChooseText.Name = "wordChooseText"; + wordChooseText.Size = new Size(294, 20); + wordChooseText.TabIndex = 0; + wordChooseText.Text = "{player} is choosing a word..."; + wordChooseText.TextAlign = HorizontalAlignment.Center; + // + // endGameGroup + // + endGameGroup.Controls.Add(textBox2); + endGameGroup.Controls.Add(playerRank); + endGameGroup.Controls.Add(mainMenuBtn); + endGameGroup.Controls.Add(podium3); + endGameGroup.Controls.Add(pictureBox3); + endGameGroup.Controls.Add(podium2); + endGameGroup.Controls.Add(pictureBox2); + endGameGroup.Controls.Add(podium1); + endGameGroup.Controls.Add(pictureBox1); + endGameGroup.Controls.Add(label3); + endGameGroup.Location = new Point(203, 33); + endGameGroup.Name = "endGameGroup"; + endGameGroup.Size = new Size(913, 566); + endGameGroup.TabIndex = 45; + endGameGroup.TabStop = false; + // + // textBox2 + // + textBox2.BackColor = SystemColors.ButtonFace; + textBox2.BorderStyle = BorderStyle.None; + textBox2.Font = new Font("Segoe UI", 11F); + textBox2.ForeColor = SystemColors.ControlDark; + textBox2.Location = new Point(0, 425); + textBox2.Name = "textBox2"; + textBox2.ReadOnly = true; + textBox2.Size = new Size(913, 20); + textBox2.TabIndex = 11; + textBox2.Text = "Automatically back to main menu in {seconds} seconds."; + textBox2.TextAlign = HorizontalAlignment.Center; + // + // playerRank + // + playerRank.BackColor = SystemColors.ButtonFace; + playerRank.BorderStyle = BorderStyle.None; + playerRank.Font = new Font("Cascadia Code SemiBold", 20.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + playerRank.ForeColor = SystemColors.ControlDark; + playerRank.Location = new Point(0, 332); + playerRank.Name = "playerRank"; + playerRank.ReadOnly = true; + playerRank.Size = new Size(913, 32); + playerRank.TabIndex = 10; + playerRank.Text = "You are #{rank} with score of {score}"; + playerRank.TextAlign = HorizontalAlignment.Center; + // + // mainMenuBtn + // + mainMenuBtn.BorderRadius = 12; + mainMenuBtn.CustomizableEdges = customizableEdges31; + mainMenuBtn.DisabledState.BorderColor = Color.DarkGray; + mainMenuBtn.DisabledState.CustomBorderColor = Color.DarkGray; + mainMenuBtn.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + mainMenuBtn.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + mainMenuBtn.Font = new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point, 0); + mainMenuBtn.ForeColor = Color.White; + mainMenuBtn.Location = new Point(362, 451); + mainMenuBtn.Name = "mainMenuBtn"; + mainMenuBtn.ShadowDecoration.CustomizableEdges = customizableEdges32; + mainMenuBtn.Size = new Size(180, 45); + mainMenuBtn.TabIndex = 9; + mainMenuBtn.Text = "Back to Main Menu"; + mainMenuBtn.Click += mainMenuBtn_Click; + // + // podium3 + // + podium3.AutoSize = true; + podium3.Font = new Font("Cascadia Code", 24F, FontStyle.Bold, GraphicsUnit.Point, 0); + podium3.ForeColor = Color.Coral; + podium3.Location = new Point(288, 258); + podium3.Name = "podium3"; + podium3.Size = new Size(133, 43); + podium3.TabIndex = 6; + podium3.Text = "#3 - 0"; + // + // pictureBox3 + // + pictureBox3.Image = Properties.Resources.medal3; + pictureBox3.Location = new Point(210, 253); + pictureBox3.Name = "pictureBox3"; + pictureBox3.Size = new Size(72, 54); + pictureBox3.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox3.TabIndex = 5; + pictureBox3.TabStop = false; + // + // podium2 + // + podium2.AutoSize = true; + podium2.Font = new Font("Cascadia Code", 24F, FontStyle.Bold, GraphicsUnit.Point, 0); + podium2.ForeColor = Color.DarkGray; + podium2.Location = new Point(288, 198); + podium2.Name = "podium2"; + podium2.Size = new Size(133, 43); + podium2.TabIndex = 4; + podium2.Text = "#2 - 0"; + // + // pictureBox2 + // + pictureBox2.Image = Properties.Resources.medal2; + pictureBox2.Location = new Point(210, 193); + pictureBox2.Name = "pictureBox2"; + pictureBox2.Size = new Size(72, 54); + pictureBox2.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox2.TabIndex = 3; + pictureBox2.TabStop = false; + // + // podium1 + // + podium1.AutoSize = true; + podium1.Font = new Font("Cascadia Code", 24F, FontStyle.Bold, GraphicsUnit.Point, 0); + podium1.ForeColor = Color.Goldenrod; + podium1.Location = new Point(288, 138); + podium1.Name = "podium1"; + podium1.Size = new Size(133, 43); + podium1.TabIndex = 2; + podium1.Text = "#1 - 0"; + // + // pictureBox1 + // + pictureBox1.Image = Properties.Resources.medal1; + pictureBox1.Location = new Point(210, 133); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(72, 54); + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox1.TabIndex = 1; + pictureBox1.TabStop = false; + // + // label3 + // + label3.AutoSize = true; + label3.Font = new Font("Cascadia Code", 32F, FontStyle.Bold); + label3.ForeColor = SystemColors.ControlDarkDark; + label3.Location = new Point(310, 19); + label3.Name = "label3"; + label3.Size = new Size(300, 57); + label3.TabIndex = 0; + label3.Text = "Game ended!"; + // + // GameRoom + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = SystemColors.ButtonFace; + ClientSize = new Size(1339, 704); + Controls.Add(flowLayoutPanel1); + Controls.Add(wordHint); + Controls.Add(timer); + Controls.Add(roundLabel); + Controls.Add(guna2Panel1); + Controls.Add(hideTool); + Controls.Add(panel1); + Controls.Add(hideCanvas); + Controls.Add(canvas); + Controls.Add(wordSelector); + Controls.Add(endTurnBox); + Controls.Add(wordChooseBox); + Controls.Add(endGameGroup); + ForeColor = SystemColors.ControlDark; + FormBorderStyle = FormBorderStyle.FixedToolWindow; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; + Name = "GameRoom"; + Text = "Game"; + Load += GameRoom_Load; + guna2Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)canvas).EndInit(); + panel1.ResumeLayout(false); + wordSelector.ResumeLayout(false); + wordSelector.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)hideCanvas).EndInit(); + endTurnBox.ResumeLayout(false); + endTurnBox.PerformLayout(); + wordChooseBox.ResumeLayout(false); + wordChooseBox.PerformLayout(); + endGameGroup.ResumeLayout(false); + endGameGroup.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox3).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox2).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Guna.UI2.WinForms.Guna2Panel guna2Panel1; + private Guna.UI2.WinForms.Guna2PictureBox canvas; + private Guna.UI2.WinForms.Guna2TextBox chatInput; + private Label roundLabel; + private Label timer; + private Button btnPencil; + private Panel panel1; + private Button btnEraser; + private Button btnClear; + private Button btnColourPalette; + private TextBox wordHint; + private FlowLayoutPanel flowLayoutPanel1; + private GroupBox hideTool; + private Guna.UI2.WinForms.Guna2GroupBox wordSelector; + private FlowLayoutPanel wordSelectorFlow; + private Guna.UI2.WinForms.Guna2PictureBox hideCanvas; + private RichTextBox chatBox; + private Guna.UI2.WinForms.Guna2GroupBox endTurnBox; + private Label label2; + private TextBox endTurnText; + private Guna.UI2.WinForms.Guna2GroupBox wordChooseBox; + private TextBox wordChooseText; + private GroupBox endGameGroup; + private Label label3; + private Label podium1; + private PictureBox pictureBox1; + private Label podium3; + private PictureBox pictureBox3; + private Label podium2; + private PictureBox pictureBox2; + private TextBox playerRank; + private Guna.UI2.WinForms.Guna2Button mainMenuBtn; + private TextBox textBox2; + } +} \ No newline at end of file diff --git a/GameRoom.cs b/GameRoom.cs new file mode 100644 index 0000000..495ef49 --- /dev/null +++ b/GameRoom.cs @@ -0,0 +1,138 @@ +using SkiaSharp; +using FunDraw.Types; +namespace FunDraw + +{ + public partial class GameRoom : Form + { + public GameRoom() + { + InitializeComponent(); + OnResize(EventArgs.Empty); + + Gateway.Instance.On("playerList", updatePlayerList); + Gateway.Instance.On("gameProgress", gameProgressHandler); + Gateway.Instance.On("chooseWord", chooseWordHandler); + Gateway.Instance.On("chatMessage", chatMessageHandler); + Gateway.Instance.On("chatGuessed", chatGuessedHandler); + Gateway.Instance.On("drawEvent", drawEventHandler); + } + + private void GameRoom_Load(object sender, EventArgs e) + { + Gateway.Instance.Emit("playerList", new { roomId = GameManager.roomId }); + + bitmap = new Bitmap(canvas.Width, canvas.Height); + var info = new SKImageInfo(bitmap.Width, bitmap.Height); + var bitmapData = bitmap.LockBits( + new Rectangle(0, 0, bitmap.Width, bitmap.Height), + System.Drawing.Imaging.ImageLockMode.ReadWrite, + System.Drawing.Imaging.PixelFormat.Format32bppArgb); + + surface = SKSurface.Create(info, bitmapData.Scan0, bitmapData.Stride); + skcanvas = surface.Canvas; + skcanvas.Clear(SKColors.White); + + color = SKColors.Black; + command = DrawCommand.PENCIL; + + paint = new SKPaint + { + Color = SKColors.Black, + StrokeWidth = 5, + IsAntialias = true, + Style = SKPaintStyle.Stroke + }; + + bitmap.UnlockBits(bitmapData); + } + + protected override void OnResize(EventArgs e) + { + base.OnResize(e); + } + + private void pencil_Click(object sender, EventArgs e) + { + SetPaint(color, 5); + command = DrawCommand.PENCIL; + } + + private void eraser_Click(object sender, EventArgs e) + { + SetPaint(SKColors.White, 10); + command = DrawCommand.ERASER; + } + + private void Clear_Click(object sender, EventArgs e) + { + skcanvas.Clear(SKColors.White); + canvas.Invalidate(); + SendDrawData("clear", new SKPoint(0, 0), new SKPoint(0, 0), SKColors.White); + } + + private void canvas_MouseDown(object sender, MouseEventArgs e) + { + if (!GameManager.isDrawer) return; + lastPoint = new SKPoint(e.X, e.Y); + } + + private void canvas_MouseMove(object sender, MouseEventArgs e) + { + if (lastPoint.HasValue) + { + var currentPoint = new SKPoint(e.X, e.Y); + skcanvas.DrawLine(lastPoint.Value, currentPoint, paint); + SendDrawData(command.ToString().ToLower(), lastPoint.Value, currentPoint, color); + lastPoint = currentPoint; + + canvas.Invalidate(); + } + } + + private void canvas_MouseUp(object sender, MouseEventArgs e) + { + lastPoint = null; + } + + private void canvas_Paint(object sender, PaintEventArgs e) + { + e.Graphics.DrawImage(bitmap, Point.Empty); + } + + ColorDialog colorDialog = new ColorDialog(); + Color new_Color; + + private void colourPalette_Click(object sender, EventArgs e) + { + colorDialog.ShowDialog(); + new_Color = colorDialog.Color; + color = GetSKColor(new_Color); + + SetPaint(color, 5); + } + + // Cleanup method + protected override void OnFormClosing(FormClosingEventArgs e) + { + + } + + private void chatInput_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter && chatInput.Focused) + { + Gateway.Instance.Emit("chatMessage", new { roomId = GameManager.roomId, message = chatInput.Text }); + chatInput.Clear(); + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private void mainMenuBtn_Click(object sender, EventArgs e) + { + FormState.MainMenuForm(); + this.Close(); + } + } +} diff --git a/GameRoom.resx b/GameRoom.resx new file mode 100644 index 0000000..c9c4c4d --- /dev/null +++ b/GameRoom.resx @@ -0,0 +1,863 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAADQAAAA1CAYAAAAOJMhOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABl0lEQVRoQ+2Wv0oDQRCHg52N4AtY6yUW + ol68u+TOvWDnk0RQIYQ0Fpa2FpIiioiPENL4LFp47xDCkcDPmd1NuGheYHC+Y+H+THEfv9lha4qi/D/Q + vwbu+vCPcsGSp0eg1wUGN7KlvI5jSFIDSqp3JU8qm7fQWRgMy1dv43kbAbddWULZIkEH5zgrQgSTA9wX + D97G4ctkkM0oGZKJiyYa4zqtAOHXMUZ4lydjyjZypE5mwjJ1xN+hFUzKWFgyvGeqyZBQRPcXMMjnbVky + +Sy1MiywkrHJGGTSZLjN/iRDMpwMf/NlMsh/txnvmVWbtYQlU5XhAUArpjHN77gFfZkMNsv4ZKTJ5PPl + AAgr08ztGXnJTDcMANtmBulM2jSzMsYlU2kzfie0zSoylI5LhgYAffNlMoimxv44T7D1ZATKMJeIcVpE + JBKst5lEGTob0/l4B0cfAfbHhzYlluH95Etk4YRoldvIixM6SdO1EJjMkpdBQEJbTgq7JJPIlWEazRSf + z3uyJRRFURRFURRFURRFURRFUQRSq/0AZ5qWWKkK3OgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAADAAAAAxCAYAAACcXioiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACN0lEQVRoQ+2TP2gTYRjGU6lB6dBJQW1j + hxKLHTpa1MFBRAluSkEUJykUxEVxEdx0koq4VBAHaxedipRsbR1EFKwRxOJQkJAgAU1rlU76+Bx58+W7 + 7+68CuYuyvsjv5D73vfe77k/ySiKoiiKEgHAzyaU9s4hLKTnu/UTmP98mb+7AzVPOT1dwoJ53lxZQrYI + dD0FRl9yCVlfvamMSYewQA2z2DUPbGF47yIys0Cxdj2kr6GMSxY7wCr9Zh17Dj/nN4N7T6B7DijVT/rq + rjI2GeyNJ9eGsL8yjpHKBUx/z5n1Ur2AEV5E/yJwY+WtWceLHN6P30P52lVgrTVHRidDc9MvNF+ZwBAv + IF+5iAPVc/gptZbWH/hDL6b7gcmtDV+N8f2SmoxOhuamX+kw73y+PIHB8iUcro61woa4er+A29uAqV7g + bg8w08flWpepy/j2YgfyfLg+gEPVMzjy6TSKGzt8tYCvd+PBzsbdv8UHs3Bs2dRkfPvxBRKDr020G09G + 8ez4EkrnZ4CP2826jG8/dpi/qYxvP4HN39BZWrPW/lAZnQy+zR/RfXQvPUrL1K5vUhmdDL7NC9QLP0j7 + 6B1q12OUkcniC3GW7qEDNEcfU7v+G2VcOpggy/QUPUiv0B/UChmljEmPQKi6cxyjjEmPsFCu0mqIqyeO + G8hV2gxx9VRwQ9lKiyGungpuKFtpMcTVU8MNZistPIiudQxhIaOUUzqPsLCu0tr5/LPBFUVRFEVRFOV/ + JZP5BSJUlfz8MpDLAAAAAElFTkSuQmCC + + + + + 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 + vgAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/GameRoomExtension.cs b/GameRoomExtension.cs new file mode 100644 index 0000000..0011342 --- /dev/null +++ b/GameRoomExtension.cs @@ -0,0 +1,340 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Timers; +using FunDraw.Components; +using FunDraw.Types; +using Newtonsoft.Json; +using SkiaSharp; +using SocketIOClient; + +namespace FunDraw +{ + public partial class GameRoom + { + private Bitmap bitmap; + private SKSurface surface; + private SKCanvas skcanvas; + private SKPaint paint; + private SKColor color; + private SKPoint? lastPoint = null; + private DrawCommand command; + private static System.Timers.Timer _timer = new System.Timers.Timer(1000); + + private class PointData + { + public float X { get; set; } + public float Y { get; set; } + } + + private class DrawingData + { + public string action { get; set; } + public PointData start { get; set; } + public PointData end { get; set; } + public string color { get; set; } + } + + private class GameProgress + { + public string state { get; set; } + public string word { get; set; } + public int timeLeft { get; set; } + public PlayerList[] players { get; set; } + } + + private class ChatMessage + { + public string sender { get; set; } + public string message { get; set; } + } + + private class ChooseWord + { + public string state { get; set; } + public string drawer { get; set; } + public string[] words { get; set; } + public long timeLeft { get; set; } + public int round { get; set; } + public int totalRounds { get; set; } + } + + private void updatePlayerList(SocketIOResponse response) + { + PlayerList[] data = response.GetValue(); + + Invoke((MethodInvoker)(() => flowLayoutPanel1.Controls.Clear())); + + for (int i = 0; i < data.Length; i++) + { + PlayerCard pc = new PlayerCard(); + pc.PlayerName = $"{data[i].name}"; + pc.PlayerScore = data[i].score; + + Invoke((MethodInvoker)(() => flowLayoutPanel1.Controls.Add(pc))); + } + } + + private void gameProgressHandler(SocketIOResponse response) + { + GameProgress data = response.GetValue(); + + if (data.state == "ending") + { + Invoke((MethodInvoker)(() => + { + wordHint.Clear(); + Label[] podium = new Label[] { podium1, podium2, podium3 }; + for (int i = 0; i < data.players.Length; i++) + { + podium[i].Text = $"{data.players[i].id} - {data.players[i].score}"; + } + + endGameGroup.BringToFront(); + })); + } + + if (data.state == "end") + { + GameManager.roomId = ""; + GameManager.isHost = false; + GameManager.gameStart = false; + GameManager.isDrawer = false; + + FormState.MainMenuForm(); + Invoke((MethodInvoker)(() => this.Close())); + return; + } + + if (data.state == "changing_turn") + { + Invoke((MethodInvoker)(() => + { + hideCanvas.BringToFront(); + hideTool.BringToFront(); + })); + return; + } + + if (data.state == "end_turn") + { + if (GameManager.isDrawer) GameManager.isDrawer = false; + Invoke((MethodInvoker)(() => + { + hideTool.BringToFront(); + endTurnText.Text = $"The word was: {data.word}"; + endTurnBox.BringToFront(); + })); + return; + } + + if (data.state == "playing") + { + int minutes = (int)Math.Floor((float)data.timeLeft / 60); + int seconds = data.timeLeft % 60; + + Debug.WriteLine(data.word); + + Invoke((MethodInvoker)(() => + { + timer.Text = $"{minutes}:{(seconds < 10 ? "0" : "")}{seconds}"; + wordHint.Text = data.word; + })); + return; + } + + } + + private void chooseWordHandler(SocketIOResponse response) + { + ChooseWord? result = response.GetValue(); + Invoke((MethodInvoker)(() => + { + hideCanvas.BringToFront(); + endTurnBox.SendToBack(); + skcanvas.Clear(SKColors.White); + canvas.Invalidate(); + })); + + if (_timer.Enabled) + { + _timer.Stop(); + } + + if (result.state == "you-selected") + { + Invoke((MethodInvoker)(() => + { + wordSelectorFlow.Controls.Clear(); + canvas.BringToFront(); + hideTool.SendToBack(); + })); + return; + } + + if (result.state == "selected") + { + Invoke((MethodInvoker)(() => + { + wordSelectorFlow.Controls.Clear(); + canvas.BringToFront(); + hideTool.BringToFront(); + })); + return; + } + + // Initialize word select timer without websocket + _timer.Elapsed += (sender, e) => + { + long time = (result.timeLeft - DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()) / 1000; + string timerString = "0:" + (time < 10 ? "0" : "") + (time > 0 ? time : 0).ToString(); + + Invoke((MethodInvoker)(() => timer.Text = timerString)); + }; + _timer.Start(); + + if (result.drawer == "#you") + { + GameManager.isDrawer = true; + Invoke((MethodInvoker)(() => + { + wordSelectorFlow.Controls.Clear(); + + foreach (var word in result.words) + { + WordButton wb = new WordButton(); + wb.Word = word; + wordSelectorFlow.Controls.Add(wb); + } + + wordSelector.BringToFront(); + roundLabel.Text = $"Round {result.round}/{result.totalRounds}"; + })); + return; + } else + { + Invoke((MethodInvoker)(() => + { + wordChooseText.Text = $"{result.drawer} is choosing a word..."; + wordChooseBox.BringToFront(); + roundLabel.Text = $"Round {result.round}/{result.totalRounds}"; + })); + } + } + + private void drawEventHandler(SocketIOResponse response) + { + var result = response.GetValue(); + ProcessDrawingMessage(result.ToString()); + } + + void ProcessDrawingMessage(string jsonData) + { + if (GameManager.isDrawer) return; + var drawData = JsonConvert.DeserializeObject(jsonData); + + this.Invoke((MethodInvoker)delegate + { + switch (drawData.action) + { + case "pencil": + skcanvas.DrawLine( + new SKPoint(drawData.start.X, drawData.start.Y), + new SKPoint(drawData.end.X, drawData.end.Y), + new SKPaint + { + Color = GetSKColor(ColorTranslator.FromHtml(drawData.color)), + StrokeWidth = 5, + IsAntialias = true, + Style = SKPaintStyle.Stroke + } + ); + canvas.Invalidate(); + break; + case "eraser": + skcanvas.DrawLine( + new SKPoint(drawData.start.X, drawData.start.Y), + new SKPoint(drawData.end.X, drawData.end.Y), + new SKPaint + { + Color = SKColors.White, + StrokeWidth = 10, + IsAntialias = true, + Style = SKPaintStyle.Stroke + } + ); + canvas.Invalidate(); + break; + case "clear": + skcanvas.Clear(SKColors.White); + canvas.Invalidate(); + break; + } + }); + } + + void SendDrawData(string action, SKPoint start, SKPoint end, SKColor color) + { + var drawData = new DrawingData + { + action = action, + start = new PointData { X = start.X, Y = start.Y }, + end = new PointData { X = end.X, Y = end.Y }, + color = ColorTranslator.ToHtml(GetColor(color)) + }; + + Gateway.Instance.Emit("drawEvent", new { roomId = GameManager.roomId, payload = drawData }); + } + + void chatMessageHandler(SocketIOResponse response) + { + var result = response.GetValue(); + ChatMessage? data = JsonConvert.DeserializeObject(result); + Invoke((MethodInvoker)(() => chatBox.AppendText($"{data.sender}: {data.message}\n"))); + } + + void chatGuessedHandler(SocketIOResponse response) + { + var result = response.GetValue(); + ChatMessage? data = JsonConvert.DeserializeObject(result); + + Invoke((MethodInvoker)(() => + { + if (data.message == "guessed") + { + chatBox.SelectionColor = Color.Green; + chatBox.AppendText($"{data.sender} guessed the word!\n"); + } else + { + chatBox.SelectionColor = Color.LightSlateGray; + chatBox.AppendText($"{data.sender}: {data.message}\n"); + } + })); + } + + private void SetPaint(SKColor color, int? stroke) + { + paint = new SKPaint + { + Color = color, + StrokeWidth = 5, + IsAntialias = true, + Style = SKPaintStyle.Stroke + }; + } + + private static SKColor GetSKColor(Color color) + { + return new SKColor(color.R, color.G, color.B, color.A); + } + + private static Color GetColor(SKColor color) + { + return Color.FromArgb(color.Alpha, color.Red, color.Green, color.Blue); + } + + } +} diff --git a/Gateway.cs b/Gateway.cs new file mode 100644 index 0000000..f0e8aec --- /dev/null +++ b/Gateway.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SocketIOClient; + +namespace FunDraw +{ + public sealed class Gateway + { + private static readonly Lazy _instance = new(() => new Gateway()); + private SocketIOClient.SocketIO _socket; + public static bool socketState { get; set; } = false; + + public static Gateway Instance => _instance.Value; + + private Gateway() + { + _socket = new SocketIOClient.SocketIO("ws://localhost:3000/game", new SocketIOOptions + { + Query = new List> + { + new KeyValuePair("token", Session.accessToken), + } + }); + + _socket.OnConnected += (sender, e) => + { + Debug.WriteLine("Connected to WebSocket."); + socketState = true; + }; + _socket.OnDisconnected += (sender, reason) => + { + Debug.WriteLine($"Disconnected: {reason}"); + socketState = false; + }; + } + + public async void Connect() + { + try + { + await _socket.ConnectAsync(); + } + catch (Exception ex) + { + Debug.WriteLine($"WebSocket connection error: {ex.Message}"); + } + } + + public async void Disconnect() + { + try + { + await _socket.DisconnectAsync(); + } + catch (Exception ex) + { + Debug.WriteLine($"WebSocket disconnection error: {ex.Message}"); + } + } + + public void On(string eventName, Action callback) + { + _socket.On(eventName, callback); + } + + public async void Emit(string eventName, params object[] data) + { + if (!socketState) + { + Debug.WriteLine("Socket is not connected."); + return; + } + try + { + await _socket.EmitAsync(eventName, data); + } + catch (Exception ex) + { + Debug.WriteLine($"Emit error: {ex.Message}"); + } + } + } +} diff --git a/HoSoNgChoi.cs b/HoSoNgChoi.cs deleted file mode 100644 index 0c1b6f6..0000000 --- a/HoSoNgChoi.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -namespace FunDraw -{ - public partial class HoSoNgChoi : Form - { - private Size formOriginalSize; - private Rectangle circle; - private Rectangle click_pic; - private Rectangle player; - private Rectangle playerDisplay; - private Rectangle id; - private Rectangle IDDisplay; - private Rectangle tham_gia; - private Rectangle thamgiaDisplay; - private Rectangle email; - private Rectangle emailDisplay; - private Rectangle forgot_pass; - private Types.UserProfile userProfile; - public HoSoNgChoi(Types.UserProfile? profile = null) - { - InitializeComponent(); - this.Resize += HoSoNgChoi_Resize; - formOriginalSize = this.Size; - circle = new Rectangle(guna2CirclePictureBox1.Location, guna2CirclePictureBox1.Size); - click_pic = new Rectangle(Click_pic.Location, Click_pic.Size); - player = new Rectangle(lbPlayer.Location, lbPlayer.Size); - playerDisplay = new Rectangle(lbPlayer.Location, lbPlayer.Size); - id = new Rectangle(label2.Location, label2.Size); - IDDisplay = new Rectangle(lbID.Location, lbID.Size); - tham_gia = new Rectangle(label3.Location, label3.Size); - thamgiaDisplay = new Rectangle(lbJoin.Location, lbJoin.Size); - email = new Rectangle(label4.Location, label4.Size); - emailDisplay = new Rectangle(lbEmail.Location, lbEmail.Size); - forgot_pass = new Rectangle(lbChangePassword.Location, lbChangePassword.Size); - userProfile = profile ?? new Types.UserProfile - { - Username = "Người chơi mặc định", - ID = "0000", - JoinedDate = DateTime.Now, - Email = "default@example.com" - }; - LoadUserProfile(); - } - private void LoadUserProfile() - { - lbPlayer.Text = $"{userProfile.Username}"; - lbID.Text = $"{userProfile.ID}"; - lbJoin.Text = $"{userProfile.JoinedDate:yyyy-MM-dd}"; - lbEmail.Text = $"{userProfile.Email}"; - } - private async void UpdateUserProfile() - { - try - { - userProfile = await Session.GetUserProfile(); - LoadUserProfile(); - } - catch (Exception ex) - { - MessageBox.Show($"Không thể cập nhật hồ sơ: {ex.Message}", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - private void HoSoNgChoi_Load(object sender, EventArgs e) - { - _ = InitializeUserProfileAsync(); - } - private async Task InitializeUserProfileAsync() - { - await FetchUserProfile(); - } - private void resize_control(Control c, Rectangle r) - { - float xRatio = (float)(this.Width) / (float)(formOriginalSize.Width); - float yRatio = (float)(this.Height) / (float)(formOriginalSize.Height); - - int newX = (int)(r.X * xRatio); - int newY = (int)(r.Y * yRatio); - int newWidth = (int)(r.Width * xRatio); - int newHeight = (int)(r.Height * yRatio); - - c.Location = new Point(newX, newY); - c.Size = new Size(newWidth, newHeight); - } - private void HoSoNgChoi_Resize(object? sender, EventArgs e) - { - resize_control(guna2CirclePictureBox1, circle); - resize_control(Click_pic, click_pic); - resize_control(lbPlayer, player); - resize_control(lbPlayer, playerDisplay); - resize_control(label2, id); - resize_control(lbID, IDDisplay); - resize_control(label3, tham_gia); - resize_control(lbJoin, thamgiaDisplay); - resize_control(label4, email); - resize_control(lbEmail, emailDisplay); - resize_control(lbChangePassword, forgot_pass); - } - - private async Task FetchUserProfile() - { - try - { - userProfile = await Session.GetUserProfile(); - //LoadUserProfile(); - } - catch (Exception ex) - { - MessageBox.Show($"Không thể cập nhật hồ sơ: {ex.Message}", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - private void lbChangePassword_Click(object sender, EventArgs e) - { - ChangePassword cp = new ChangePassword(); - cp.ShowDialog(); - } - } -} diff --git a/HostRoom.Designer.cs b/HostRoom.Designer.cs index b392ef1..8e0ab1a 100644 --- a/HostRoom.Designer.cs +++ b/HostRoom.Designer.cs @@ -32,8 +32,6 @@ private void InitializeComponent() Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges2 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges17 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges18 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges7 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); @@ -46,47 +44,15 @@ private void InitializeComponent() Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges14 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges15 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges16 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges17 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges18 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges19 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges20 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges21 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges22 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges23 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges24 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges25 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges26 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges27 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges28 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges29 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges30 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges31 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges32 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges33 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges34 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges35 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges36 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HostRoom)); guna2Panel1 = new Guna.UI2.WinForms.Guna2Panel(); - guna2TextBox1 = new Guna.UI2.WinForms.Guna2TextBox(); - listBox1 = new ListBox(); - guna2Panel2 = new Guna.UI2.WinForms.Guna2Panel(); - label10 = new Label(); - label11 = new Label(); - label8 = new Label(); - label9 = new Label(); - label6 = new Label(); - label7 = new Label(); - label5 = new Label(); - label4 = new Label(); - guna2CirclePictureBox4 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2CirclePictureBox3 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2CirclePictureBox2 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2CirclePictureBox1 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2Button4 = new Guna.UI2.WinForms.Guna2Button(); - guna2Button3 = new Guna.UI2.WinForms.Guna2Button(); - guna2Button2 = new Guna.UI2.WinForms.Guna2Button(); - guna2Button1 = new Guna.UI2.WinForms.Guna2Button(); + chatBox = new RichTextBox(); + chatInput = new Guna.UI2.WinForms.Guna2TextBox(); label1 = new Label(); - lbTime = new Label(); lbWaiting = new Label(); lbThamGia = new Guna.UI2.WinForms.Guna2HtmlLabel(); guna2HtmlLabel1 = new Guna.UI2.WinForms.Guna2HtmlLabel(); @@ -94,8 +60,6 @@ private void InitializeComponent() guna2HtmlLabel3 = new Guna.UI2.WinForms.Guna2HtmlLabel(); guna2HtmlLabel4 = new Guna.UI2.WinForms.Guna2HtmlLabel(); guna2HtmlLabel5 = new Guna.UI2.WinForms.Guna2HtmlLabel(); - guna2HtmlLabel6 = new Guna.UI2.WinForms.Guna2HtmlLabel(); - tbCustom = new Guna.UI2.WinForms.Guna2TextBox(); btInvite = new Guna.UI2.WinForms.Guna2Button(); btStart = new Guna.UI2.WinForms.Guna2Button(); cbCustomWords = new Guna.UI2.WinForms.Guna2CheckBox(); @@ -103,16 +67,11 @@ private void InitializeComponent() cobDrawtime = new Guna.UI2.WinForms.Guna2ComboBox(); cobRounds = new Guna.UI2.WinForms.Guna2ComboBox(); cobGameMode = new Guna.UI2.WinForms.Guna2ComboBox(); - cobWordCount = new Guna.UI2.WinForms.Guna2ComboBox(); cobHints = new Guna.UI2.WinForms.Guna2ComboBox(); + cobWordsCount = new Guna.UI2.WinForms.Guna2ComboBox(); guna2PictureBox1 = new Guna.UI2.WinForms.Guna2PictureBox(); - guna2ComboBox1 = new Guna.UI2.WinForms.Guna2ComboBox(); + flowLayoutPanel1 = new FlowLayoutPanel(); guna2Panel1.SuspendLayout(); - guna2Panel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox4).BeginInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox3).BeginInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox2).BeginInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).BeginInit(); ((System.ComponentModel.ISupportInitialize)guna2PictureBox1).BeginInit(); SuspendLayout(); // @@ -120,316 +79,56 @@ private void InitializeComponent() // guna2Panel1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; guna2Panel1.BorderRadius = 20; - guna2Panel1.Controls.Add(guna2TextBox1); - guna2Panel1.Controls.Add(listBox1); + guna2Panel1.Controls.Add(chatBox); + guna2Panel1.Controls.Add(chatInput); guna2Panel1.CustomizableEdges = customizableEdges3; guna2Panel1.FillColor = Color.Gainsboro; guna2Panel1.ForeColor = SystemColors.AppWorkspace; - guna2Panel1.Location = new Point(830, 9); + guna2Panel1.Location = new Point(825, 9); guna2Panel1.Margin = new Padding(3, 2, 3, 2); guna2Panel1.Name = "guna2Panel1"; guna2Panel1.ShadowDecoration.CustomizableEdges = customizableEdges4; - guna2Panel1.Size = new Size(206, 488); + guna2Panel1.Size = new Size(206, 487); guna2Panel1.TabIndex = 0; // - // guna2TextBox1 + // chatBox // - guna2TextBox1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - guna2TextBox1.BorderRadius = 20; + chatBox.BackColor = Color.Gainsboro; + chatBox.BorderStyle = BorderStyle.None; + chatBox.Location = new Point(0, 24); + chatBox.Name = "chatBox"; + chatBox.Size = new Size(206, 428); + chatBox.TabIndex = 2; + chatBox.Text = ""; + // + // chatInput + // + chatInput.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + chatInput.BorderRadius = 20; customizableEdges1.TopLeft = false; customizableEdges1.TopRight = false; - guna2TextBox1.CustomizableEdges = customizableEdges1; - guna2TextBox1.DefaultText = ""; - guna2TextBox1.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); - guna2TextBox1.DisabledState.FillColor = Color.FromArgb(226, 226, 226); - guna2TextBox1.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); - guna2TextBox1.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); - guna2TextBox1.FillColor = Color.FromArgb(76, 175, 80); - guna2TextBox1.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); - guna2TextBox1.Font = new Font("Segoe UI", 9F, FontStyle.Bold); - guna2TextBox1.ForeColor = Color.Black; - guna2TextBox1.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - guna2TextBox1.Location = new Point(0, 448); - guna2TextBox1.Name = "guna2TextBox1"; - guna2TextBox1.PasswordChar = '\0'; - guna2TextBox1.PlaceholderForeColor = Color.DarkGray; - guna2TextBox1.PlaceholderText = ""; - guna2TextBox1.SelectedText = ""; - guna2TextBox1.ShadowDecoration.CustomizableEdges = customizableEdges2; - guna2TextBox1.Size = new Size(206, 40); - guna2TextBox1.TabIndex = 1; - // - // listBox1 - // - listBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - listBox1.BackColor = Color.Gainsboro; - listBox1.FormattingEnabled = true; - listBox1.ItemHeight = 15; - listBox1.Location = new Point(0, 24); - listBox1.Margin = new Padding(3, 2, 3, 2); - listBox1.Name = "listBox1"; - listBox1.Size = new Size(206, 424); - listBox1.TabIndex = 0; - // - // guna2Panel2 - // - guna2Panel2.Controls.Add(label10); - guna2Panel2.Controls.Add(label11); - guna2Panel2.Controls.Add(label8); - guna2Panel2.Controls.Add(label9); - guna2Panel2.Controls.Add(label6); - guna2Panel2.Controls.Add(label7); - guna2Panel2.Controls.Add(label5); - guna2Panel2.Controls.Add(label4); - guna2Panel2.Controls.Add(guna2CirclePictureBox4); - guna2Panel2.Controls.Add(guna2CirclePictureBox3); - guna2Panel2.Controls.Add(guna2CirclePictureBox2); - guna2Panel2.Controls.Add(guna2CirclePictureBox1); - guna2Panel2.Controls.Add(guna2Button4); - guna2Panel2.Controls.Add(guna2Button3); - guna2Panel2.Controls.Add(guna2Button2); - guna2Panel2.Controls.Add(guna2Button1); - guna2Panel2.CustomizableEdges = customizableEdges17; - guna2Panel2.Location = new Point(10, 33); - guna2Panel2.Margin = new Padding(3, 2, 3, 2); - guna2Panel2.Name = "guna2Panel2"; - guna2Panel2.ShadowDecoration.CustomizableEdges = customizableEdges18; - guna2Panel2.Size = new Size(187, 464); - guna2Panel2.TabIndex = 2; - // - // label10 - // - label10.AutoSize = true; - label10.BackColor = Color.FromArgb(160, 210, 235); - label10.ForeColor = Color.FromArgb(224, 224, 224); - label10.Location = new Point(59, 159); - label10.Name = "label10"; - label10.Size = new Size(48, 15); - label10.TabIndex = 15; - label10.Text = "Score: 0"; - // - // label11 - // - label11.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - label11.AutoSize = true; - label11.BackColor = Color.FromArgb(160, 210, 235); - label11.ForeColor = SystemColors.ActiveCaptionText; - label11.Location = new Point(59, 142); - label11.Name = "label11"; - label11.Size = new Size(39, 15); - label11.TabIndex = 14; - label11.Text = "Player"; - // - // label8 - // - label8.AutoSize = true; - label8.BackColor = Color.FromArgb(160, 210, 235); - label8.ForeColor = Color.FromArgb(224, 224, 224); - label8.Location = new Point(59, 116); - label8.Name = "label8"; - label8.Size = new Size(48, 15); - label8.TabIndex = 13; - label8.Text = "Score: 0"; - // - // label9 - // - label9.AutoSize = true; - label9.BackColor = Color.FromArgb(160, 210, 235); - label9.ForeColor = SystemColors.ActiveCaptionText; - label9.Location = new Point(59, 99); - label9.Name = "label9"; - label9.Size = new Size(39, 15); - label9.TabIndex = 12; - label9.Text = "Player"; - // - // label6 - // - label6.AutoSize = true; - label6.BackColor = Color.FromArgb(160, 210, 235); - label6.ForeColor = Color.FromArgb(224, 224, 224); - label6.Location = new Point(59, 74); - label6.Name = "label6"; - label6.Size = new Size(48, 15); - label6.TabIndex = 11; - label6.Text = "Score: 0"; - // - // label7 - // - label7.AutoSize = true; - label7.BackColor = Color.FromArgb(160, 210, 235); - label7.ForeColor = SystemColors.ActiveCaptionText; - label7.Location = new Point(59, 56); - label7.Name = "label7"; - label7.Size = new Size(39, 15); - label7.TabIndex = 10; - label7.Text = "Player"; - // - // label5 - // - label5.AutoSize = true; - label5.BackColor = Color.FromArgb(160, 210, 235); - label5.ForeColor = Color.FromArgb(224, 224, 224); - label5.Location = new Point(59, 31); - label5.Name = "label5"; - label5.Size = new Size(48, 15); - label5.TabIndex = 9; - label5.Text = "Score: 0"; - // - // label4 - // - label4.AutoSize = true; - label4.BackColor = Color.FromArgb(160, 210, 235); - label4.ForeColor = SystemColors.ActiveCaptionText; - label4.Location = new Point(59, 14); - label4.Name = "label4"; - label4.Size = new Size(39, 15); - label4.TabIndex = 8; - label4.Text = "Player"; - // - // guna2CirclePictureBox4 - // - guna2CirclePictureBox4.BackColor = Color.FromArgb(160, 210, 235); - guna2CirclePictureBox4.ImageRotate = 0F; - guna2CirclePictureBox4.Location = new Point(18, 142); - guna2CirclePictureBox4.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox4.Name = "guna2CirclePictureBox4"; - guna2CirclePictureBox4.ShadowDecoration.CustomizableEdges = customizableEdges5; - guna2CirclePictureBox4.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox4.Size = new Size(36, 32); - guna2CirclePictureBox4.TabIndex = 7; - guna2CirclePictureBox4.TabStop = false; - // - // guna2CirclePictureBox3 - // - guna2CirclePictureBox3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2CirclePictureBox3.BackColor = Color.FromArgb(160, 210, 235); - guna2CirclePictureBox3.ImageRotate = 0F; - guna2CirclePictureBox3.Location = new Point(18, 99); - guna2CirclePictureBox3.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox3.Name = "guna2CirclePictureBox3"; - guna2CirclePictureBox3.ShadowDecoration.CustomizableEdges = customizableEdges6; - guna2CirclePictureBox3.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox3.Size = new Size(36, 32); - guna2CirclePictureBox3.TabIndex = 6; - guna2CirclePictureBox3.TabStop = false; - // - // guna2CirclePictureBox2 - // - guna2CirclePictureBox2.BackColor = Color.FromArgb(160, 210, 235); - guna2CirclePictureBox2.ImageRotate = 0F; - guna2CirclePictureBox2.Location = new Point(18, 56); - guna2CirclePictureBox2.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox2.Name = "guna2CirclePictureBox2"; - guna2CirclePictureBox2.ShadowDecoration.CustomizableEdges = customizableEdges7; - guna2CirclePictureBox2.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox2.Size = new Size(36, 32); - guna2CirclePictureBox2.TabIndex = 5; - guna2CirclePictureBox2.TabStop = false; - // - // guna2CirclePictureBox1 - // - guna2CirclePictureBox1.BackColor = Color.FromArgb(160, 210, 235); - guna2CirclePictureBox1.ImageRotate = 0F; - guna2CirclePictureBox1.Location = new Point(18, 14); - guna2CirclePictureBox1.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox1.Name = "guna2CirclePictureBox1"; - guna2CirclePictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges8; - guna2CirclePictureBox1.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox1.Size = new Size(36, 32); - guna2CirclePictureBox1.TabIndex = 4; - guna2CirclePictureBox1.TabStop = false; - // - // guna2Button4 - // - guna2Button4.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2Button4.Animated = true; - guna2Button4.AnimatedGIF = true; - guna2Button4.AutoRoundedCorners = true; - guna2Button4.BorderRadius = 18; - guna2Button4.CustomizableEdges = customizableEdges9; - guna2Button4.DisabledState.BorderColor = Color.DarkGray; - guna2Button4.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button4.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button4.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button4.FillColor = Color.FromArgb(160, 210, 235); - guna2Button4.Font = new Font("Segoe UI", 9F); - guna2Button4.ForeColor = Color.White; - guna2Button4.ImageAlign = HorizontalAlignment.Left; - guna2Button4.Location = new Point(3, 139); - guna2Button4.Margin = new Padding(3, 2, 3, 2); - guna2Button4.Name = "guna2Button4"; - guna2Button4.ShadowDecoration.CustomizableEdges = customizableEdges10; - guna2Button4.Size = new Size(182, 38); - guna2Button4.TabIndex = 3; - guna2Button4.TextOffset = new Point(10, 0); - // - // guna2Button3 - // - guna2Button3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2Button3.Animated = true; - guna2Button3.AnimatedGIF = true; - guna2Button3.BorderRadius = 20; - guna2Button3.CustomizableEdges = customizableEdges11; - guna2Button3.DisabledState.BorderColor = Color.DarkGray; - guna2Button3.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button3.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button3.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button3.FillColor = Color.FromArgb(160, 210, 235); - guna2Button3.Font = new Font("Segoe UI", 9F); - guna2Button3.ForeColor = Color.White; - guna2Button3.ImageAlign = HorizontalAlignment.Left; - guna2Button3.Location = new Point(3, 96); - guna2Button3.Margin = new Padding(3, 2, 3, 2); - guna2Button3.Name = "guna2Button3"; - guna2Button3.ShadowDecoration.CustomizableEdges = customizableEdges12; - guna2Button3.Size = new Size(182, 38); - guna2Button3.TabIndex = 2; - guna2Button3.TextOffset = new Point(10, 0); - // - // guna2Button2 - // - guna2Button2.Animated = true; - guna2Button2.AnimatedGIF = true; - guna2Button2.BorderRadius = 20; - guna2Button2.CustomizableEdges = customizableEdges13; - guna2Button2.DisabledState.BorderColor = Color.DarkGray; - guna2Button2.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button2.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button2.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button2.FillColor = Color.FromArgb(160, 210, 235); - guna2Button2.Font = new Font("Segoe UI", 9F); - guna2Button2.ForeColor = Color.White; - guna2Button2.ImageAlign = HorizontalAlignment.Left; - guna2Button2.Location = new Point(3, 53); - guna2Button2.Margin = new Padding(3, 2, 3, 2); - guna2Button2.Name = "guna2Button2"; - guna2Button2.ShadowDecoration.CustomizableEdges = customizableEdges14; - guna2Button2.Size = new Size(182, 38); - guna2Button2.TabIndex = 1; - guna2Button2.TextOffset = new Point(10, 0); - // - // guna2Button1 - // - guna2Button1.Animated = true; - guna2Button1.AnimatedGIF = true; - guna2Button1.BorderRadius = 20; - guna2Button1.CustomizableEdges = customizableEdges15; - guna2Button1.DisabledState.BorderColor = Color.DarkGray; - guna2Button1.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button1.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button1.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button1.FillColor = Color.FromArgb(160, 210, 235); - guna2Button1.Font = new Font("Segoe UI", 9F); - guna2Button1.ForeColor = Color.White; - guna2Button1.ImageAlign = HorizontalAlignment.Left; - guna2Button1.Location = new Point(3, 10); - guna2Button1.Margin = new Padding(3, 2, 3, 2); - guna2Button1.Name = "guna2Button1"; - guna2Button1.ShadowDecoration.CustomizableEdges = customizableEdges16; - guna2Button1.Size = new Size(182, 38); - guna2Button1.TabIndex = 0; - guna2Button1.TextOffset = new Point(10, 0); - guna2Button1.Click += guna2Button1_Click; + chatInput.CustomizableEdges = customizableEdges1; + chatInput.DefaultText = ""; + chatInput.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); + chatInput.DisabledState.FillColor = Color.FromArgb(226, 226, 226); + chatInput.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); + chatInput.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); + chatInput.FillColor = Color.FromArgb(76, 175, 80); + chatInput.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + chatInput.Font = new Font("Segoe UI", 9F, FontStyle.Bold); + chatInput.ForeColor = Color.Black; + chatInput.HoverState.BorderColor = Color.FromArgb(94, 148, 255); + chatInput.Location = new Point(0, 447); + chatInput.Name = "chatInput"; + chatInput.PasswordChar = '\0'; + chatInput.PlaceholderForeColor = Color.DarkGray; + chatInput.PlaceholderText = ""; + chatInput.SelectedText = ""; + chatInput.ShadowDecoration.CustomizableEdges = customizableEdges2; + chatInput.Size = new Size(206, 40); + chatInput.TabIndex = 1; + chatInput.TextChanged += chatInput_TextChanged; + chatInput.KeyDown += chatInput_KeyDown; // // label1 // @@ -438,21 +137,9 @@ private void InitializeComponent() label1.ForeColor = SystemColors.ActiveCaptionText; label1.Location = new Point(10, 9); label1.Name = "label1"; - label1.Size = new Size(60, 21); + label1.Size = new Size(78, 21); label1.TabIndex = 3; - label1.Text = "Round"; - // - // lbTime - // - lbTime.AllowDrop = true; - lbTime.AutoSize = true; - lbTime.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); - lbTime.ForeColor = Color.Red; - lbTime.Location = new Point(160, 9); - lbTime.Name = "lbTime"; - lbTime.Size = new Size(41, 21); - lbTime.TabIndex = 4; - lbTime.Text = "0:00"; + label1.Text = "ID: %id%"; // // lbWaiting // @@ -460,7 +147,7 @@ private void InitializeComponent() lbWaiting.AutoSize = true; lbWaiting.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); lbWaiting.ForeColor = SystemColors.ActiveCaptionText; - lbWaiting.Location = new Point(459, 9); + lbWaiting.Location = new Point(457, 9); lbWaiting.Name = "lbWaiting"; lbWaiting.Size = new Size(70, 21); lbWaiting.TabIndex = 5; @@ -538,57 +225,13 @@ private void InitializeComponent() guna2HtmlLabel5.TabIndex = 22; guna2HtmlLabel5.Text = "Hints"; // - // guna2HtmlLabel6 - // - guna2HtmlLabel6.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - guna2HtmlLabel6.BackColor = Color.FromArgb(224, 224, 224); - guna2HtmlLabel6.Font = new Font("Microsoft Sans Serif", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - guna2HtmlLabel6.ForeColor = Color.Black; - guna2HtmlLabel6.Location = new Point(215, 196); - guna2HtmlLabel6.Margin = new Padding(4, 3, 4, 3); - guna2HtmlLabel6.Name = "guna2HtmlLabel6"; - guna2HtmlLabel6.Size = new Size(101, 20); - guna2HtmlLabel6.TabIndex = 23; - guna2HtmlLabel6.Text = "Custom words"; - // - // tbCustom - // - tbCustom.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - tbCustom.BackColor = Color.FromArgb(250, 250, 250); - tbCustom.BorderColor = Color.FromArgb(250, 250, 250); - tbCustom.BorderRadius = 5; - tbCustom.Cursor = Cursors.IBeam; - tbCustom.CustomizableEdges = customizableEdges19; - tbCustom.DefaultText = "Minimum of 10 words. 1-32 characters per word! 20000 characters maximum. Separated by a, (comma)"; - tbCustom.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); - tbCustom.DisabledState.FillColor = Color.FromArgb(226, 226, 226); - tbCustom.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); - tbCustom.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); - tbCustom.FillColor = Color.FromArgb(250, 250, 250); - tbCustom.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); - tbCustom.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - tbCustom.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - tbCustom.Location = new Point(215, 224); - tbCustom.Margin = new Padding(4, 5, 4, 5); - tbCustom.Multiline = true; - tbCustom.Name = "tbCustom"; - tbCustom.PasswordChar = '\0'; - tbCustom.PlaceholderForeColor = Color.Gainsboro; - tbCustom.PlaceholderText = ""; - tbCustom.SelectedText = ""; - tbCustom.ShadowDecoration.CustomizableEdges = customizableEdges20; - tbCustom.Size = new Size(599, 211); - tbCustom.TabIndex = 25; - tbCustom.Enter += tbCustom_Enter; - tbCustom.Leave += tbCustom_Leave; - // // btInvite // btInvite.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; btInvite.Animated = true; btInvite.BackColor = Color.FromArgb(224, 224, 224); btInvite.BorderRadius = 12; - btInvite.CustomizableEdges = customizableEdges21; + btInvite.CustomizableEdges = customizableEdges5; btInvite.DisabledState.BorderColor = Color.DarkGray; btInvite.DisabledState.CustomBorderColor = Color.DarkGray; btInvite.DisabledState.FillColor = Color.FromArgb(169, 169, 169); @@ -596,10 +239,10 @@ private void InitializeComponent() btInvite.FillColor = Color.FromArgb(160, 210, 235); btInvite.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); btInvite.ForeColor = Color.Black; - btInvite.Location = new Point(619, 443); + btInvite.Location = new Point(614, 442); btInvite.Margin = new Padding(4, 3, 4, 3); btInvite.Name = "btInvite"; - btInvite.ShadowDecoration.CustomizableEdges = customizableEdges22; + btInvite.ShadowDecoration.CustomizableEdges = customizableEdges6; btInvite.Size = new Size(195, 38); btInvite.TabIndex = 26; btInvite.Text = "Invite"; @@ -611,7 +254,7 @@ private void InitializeComponent() btStart.Animated = true; btStart.BackColor = Color.FromArgb(224, 224, 224); btStart.BorderRadius = 12; - btStart.CustomizableEdges = customizableEdges23; + btStart.CustomizableEdges = customizableEdges7; btStart.DisabledState.BorderColor = Color.DarkGray; btStart.DisabledState.CustomBorderColor = Color.DarkGray; btStart.DisabledState.FillColor = Color.FromArgb(169, 169, 169); @@ -619,13 +262,14 @@ private void InitializeComponent() btStart.FillColor = Color.FromArgb(76, 175, 80); btStart.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); btStart.ForeColor = Color.Black; - btStart.Location = new Point(215, 443); + btStart.Location = new Point(215, 442); btStart.Margin = new Padding(4, 3, 4, 3); btStart.Name = "btStart"; - btStart.ShadowDecoration.CustomizableEdges = customizableEdges24; + btStart.ShadowDecoration.CustomizableEdges = customizableEdges8; btStart.Size = new Size(396, 38); btStart.TabIndex = 27; btStart.Text = "Start!"; + btStart.Click += btStart_Click; // // cbCustomWords // @@ -638,7 +282,7 @@ private void InitializeComponent() cbCustomWords.CheckedState.FillColor = Color.FromArgb(94, 148, 255); cbCustomWords.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); cbCustomWords.ForeColor = Color.Black; - cbCustomWords.Location = new Point(634, 192); + cbCustomWords.Location = new Point(629, 191); cbCustomWords.Margin = new Padding(4, 3, 4, 3); cbCustomWords.Name = "cbCustomWords"; cbCustomWords.Size = new Size(180, 24); @@ -654,7 +298,7 @@ private void InitializeComponent() // cobPlayers.Anchor = AnchorStyles.Top | AnchorStyles.Right; cobPlayers.BackColor = Color.Transparent; - cobPlayers.CustomizableEdges = customizableEdges25; + cobPlayers.CustomizableEdges = customizableEdges9; cobPlayers.DrawMode = DrawMode.OwnerDrawFixed; cobPlayers.DropDownStyle = ComboBoxStyle.DropDownList; cobPlayers.FocusedColor = Color.FromArgb(94, 148, 255); @@ -662,19 +306,20 @@ private void InitializeComponent() cobPlayers.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); cobPlayers.ForeColor = Color.Black; cobPlayers.ItemHeight = 18; - cobPlayers.Items.AddRange(new object[] { "2", "3", "4", "5", "6", "7", "8", "9", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20" }); - cobPlayers.Location = new Point(484, 43); + cobPlayers.Items.AddRange(new object[] { "2", "3", "4", "5", "6", "7", "8", "9", "11", "12" }); + cobPlayers.Location = new Point(479, 43); cobPlayers.Margin = new Padding(4, 3, 4, 3); cobPlayers.Name = "cobPlayers"; - cobPlayers.ShadowDecoration.CustomizableEdges = customizableEdges26; + cobPlayers.ShadowDecoration.CustomizableEdges = customizableEdges10; cobPlayers.Size = new Size(330, 24); cobPlayers.TabIndex = 19; + cobPlayers.SelectedIndexChanged += cobPlayers_SelectedIndexChanged; // // cobDrawtime // cobDrawtime.Anchor = AnchorStyles.Top | AnchorStyles.Right; cobDrawtime.BackColor = Color.Transparent; - cobDrawtime.CustomizableEdges = customizableEdges27; + cobDrawtime.CustomizableEdges = customizableEdges11; cobDrawtime.DrawMode = DrawMode.OwnerDrawFixed; cobDrawtime.DropDownStyle = ComboBoxStyle.DropDownList; cobDrawtime.FocusedColor = Color.FromArgb(94, 148, 255); @@ -683,18 +328,19 @@ private void InitializeComponent() cobDrawtime.ForeColor = Color.Black; cobDrawtime.ItemHeight = 18; cobDrawtime.Items.AddRange(new object[] { "15", "20", "30", "40", "50", "60", "70", "80", "90", "100", "120", "150", "180", "210", "240" }); - cobDrawtime.Location = new Point(484, 69); + cobDrawtime.Location = new Point(479, 69); cobDrawtime.Margin = new Padding(4, 3, 4, 3); cobDrawtime.Name = "cobDrawtime"; - cobDrawtime.ShadowDecoration.CustomizableEdges = customizableEdges28; + cobDrawtime.ShadowDecoration.CustomizableEdges = customizableEdges12; cobDrawtime.Size = new Size(330, 24); cobDrawtime.TabIndex = 30; + cobDrawtime.SelectedIndexChanged += cobDrawtime_SelectedIndexChanged; // // cobRounds // cobRounds.Anchor = AnchorStyles.Top | AnchorStyles.Right; cobRounds.BackColor = Color.Transparent; - cobRounds.CustomizableEdges = customizableEdges29; + cobRounds.CustomizableEdges = customizableEdges13; cobRounds.DrawMode = DrawMode.OwnerDrawFixed; cobRounds.DropDownStyle = ComboBoxStyle.DropDownList; cobRounds.FocusedColor = Color.FromArgb(94, 148, 255); @@ -702,19 +348,20 @@ private void InitializeComponent() cobRounds.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); cobRounds.ForeColor = Color.Black; cobRounds.ItemHeight = 18; - cobRounds.Items.AddRange(new object[] { "2", "3", "4", "5", "6", "7", "8", "9", "10" }); - cobRounds.Location = new Point(484, 95); + cobRounds.Items.AddRange(new object[] { "1", "2", "3", "4", "5", "6", "7", "8" }); + cobRounds.Location = new Point(479, 95); cobRounds.Margin = new Padding(4, 3, 4, 3); cobRounds.Name = "cobRounds"; - cobRounds.ShadowDecoration.CustomizableEdges = customizableEdges30; + cobRounds.ShadowDecoration.CustomizableEdges = customizableEdges14; cobRounds.Size = new Size(330, 24); cobRounds.TabIndex = 31; + cobRounds.SelectedIndexChanged += cobRounds_SelectedIndexChanged; // // cobGameMode // cobGameMode.Anchor = AnchorStyles.Top | AnchorStyles.Right; cobGameMode.BackColor = Color.Transparent; - cobGameMode.CustomizableEdges = customizableEdges31; + cobGameMode.CustomizableEdges = customizableEdges15; cobGameMode.DrawMode = DrawMode.OwnerDrawFixed; cobGameMode.DropDownStyle = ComboBoxStyle.DropDownList; cobGameMode.FocusedColor = Color.FromArgb(94, 148, 255); @@ -723,38 +370,18 @@ private void InitializeComponent() cobGameMode.ForeColor = Color.Black; cobGameMode.ItemHeight = 18; cobGameMode.Items.AddRange(new object[] { "Normal", "Hidden", "Combination" }); - cobGameMode.Location = new Point(484, 121); + cobGameMode.Location = new Point(479, 121); cobGameMode.Margin = new Padding(4, 3, 4, 3); cobGameMode.Name = "cobGameMode"; - cobGameMode.ShadowDecoration.CustomizableEdges = customizableEdges32; + cobGameMode.ShadowDecoration.CustomizableEdges = customizableEdges16; cobGameMode.Size = new Size(330, 24); cobGameMode.TabIndex = 32; // - // cobWordCount - // - cobWordCount.Anchor = AnchorStyles.Top | AnchorStyles.Right; - cobWordCount.BackColor = Color.Transparent; - cobWordCount.CustomizableEdges = customizableEdges33; - cobWordCount.DrawMode = DrawMode.OwnerDrawFixed; - cobWordCount.DropDownStyle = ComboBoxStyle.DropDownList; - cobWordCount.FocusedColor = Color.FromArgb(94, 148, 255); - cobWordCount.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); - cobWordCount.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - cobWordCount.ForeColor = Color.Black; - cobWordCount.ItemHeight = 18; - cobWordCount.Items.AddRange(new object[] { "1", "2", "3", "4", "5" }); - cobWordCount.Location = new Point(484, 147); - cobWordCount.Margin = new Padding(4, 3, 4, 3); - cobWordCount.Name = "cobWordCount"; - cobWordCount.ShadowDecoration.CustomizableEdges = customizableEdges34; - cobWordCount.Size = new Size(330, 24); - cobWordCount.TabIndex = 33; - // // cobHints // cobHints.Anchor = AnchorStyles.Top | AnchorStyles.Right; cobHints.BackColor = Color.Transparent; - cobHints.CustomizableEdges = customizableEdges31; + cobHints.CustomizableEdges = customizableEdges17; cobHints.DrawMode = DrawMode.OwnerDrawFixed; cobHints.DropDownStyle = ComboBoxStyle.DropDownList; cobHints.FocusedColor = Color.FromArgb(94, 148, 255); @@ -763,67 +390,73 @@ private void InitializeComponent() cobHints.ForeColor = Color.Black; cobHints.ItemHeight = 18; cobHints.Items.AddRange(new object[] { "1", "2", "3", "4", "5" }); - cobHints.Location = new Point(484, 121); + cobHints.Location = new Point(479, 147); cobHints.Margin = new Padding(4, 3, 4, 3); cobHints.Name = "cobHints"; - cobHints.ShadowDecoration.CustomizableEdges = customizableEdges32; + cobHints.ShadowDecoration.CustomizableEdges = customizableEdges18; cobHints.Size = new Size(330, 24); - cobHints.TabIndex = 35; + cobHints.TabIndex = 33; + // + // cobWordsCount + // + cobWordsCount.Anchor = AnchorStyles.Top | AnchorStyles.Right; + cobWordsCount.BackColor = Color.Transparent; + cobWordsCount.CustomizableEdges = customizableEdges3; + cobWordsCount.DrawMode = DrawMode.OwnerDrawFixed; + cobWordsCount.DropDownStyle = ComboBoxStyle.DropDownList; + cobWordsCount.FocusedColor = Color.FromArgb(94, 148, 255); + cobWordsCount.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + cobWordsCount.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + cobWordsCount.ForeColor = Color.Black; + cobWordsCount.ItemHeight = 18; + cobWordsCount.Items.AddRange(new object[] { "2", "3", "4", "5" }); + cobWordsCount.Location = new Point(479, 121); + cobWordsCount.Margin = new Padding(4, 3, 4, 3); + cobWordsCount.Name = "cobWordsCount"; + cobWordsCount.ShadowDecoration.CustomizableEdges = customizableEdges4; + cobWordsCount.Size = new Size(330, 24); + cobWordsCount.TabIndex = 35; + cobWordsCount.SelectedIndexChanged += cobHints_SelectedIndexChanged; // // guna2PictureBox1 // guna2PictureBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; guna2PictureBox1.BackColor = SystemColors.ButtonFace; guna2PictureBox1.BorderRadius = 15; - guna2PictureBox1.CustomizableEdges = customizableEdges33; + guna2PictureBox1.CustomizableEdges = customizableEdges19; guna2PictureBox1.FillColor = Color.FromArgb(224, 224, 224); guna2PictureBox1.ImageRotate = 0F; guna2PictureBox1.Location = new Point(203, 33); guna2PictureBox1.Margin = new Padding(3, 2, 3, 2); guna2PictureBox1.Name = "guna2PictureBox1"; - guna2PictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges34; - guna2PictureBox1.Size = new Size(621, 464); + guna2PictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges20; + guna2PictureBox1.Size = new Size(616, 463); guna2PictureBox1.TabIndex = 36; guna2PictureBox1.TabStop = false; // - // guna2ComboBox1 - // - guna2ComboBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; - guna2ComboBox1.BackColor = Color.Transparent; - guna2ComboBox1.CustomizableEdges = customizableEdges35; - guna2ComboBox1.DrawMode = DrawMode.OwnerDrawFixed; - guna2ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList; - guna2ComboBox1.FocusedColor = Color.FromArgb(94, 148, 255); - guna2ComboBox1.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); - guna2ComboBox1.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - guna2ComboBox1.ForeColor = Color.Black; - guna2ComboBox1.ItemHeight = 18; - guna2ComboBox1.Items.AddRange(new object[] { "0", "1", "2", "3", "4", "5" }); - guna2ComboBox1.Location = new Point(484, 147); - guna2ComboBox1.Margin = new Padding(4, 3, 4, 3); - guna2ComboBox1.Name = "guna2ComboBox1"; - guna2ComboBox1.ShadowDecoration.CustomizableEdges = customizableEdges36; - guna2ComboBox1.Size = new Size(330, 24); - guna2ComboBox1.TabIndex = 37; + // flowLayoutPanel1 + // + flowLayoutPanel1.BorderStyle = BorderStyle.FixedSingle; + flowLayoutPanel1.Location = new Point(12, 33); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new Size(185, 463); + flowLayoutPanel1.TabIndex = 38; // // HostRoom // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; BackColor = SystemColors.ButtonFace; - ClientSize = new Size(1047, 512); - Controls.Add(guna2ComboBox1); + ClientSize = new Size(1042, 511); + Controls.Add(flowLayoutPanel1); + Controls.Add(cobWordsCount); Controls.Add(cobHints); - Controls.Add(cobWordCount); Controls.Add(cobGameMode); Controls.Add(cobRounds); Controls.Add(cobDrawtime); Controls.Add(cobPlayers); - Controls.Add(cbCustomWords); Controls.Add(btStart); Controls.Add(btInvite); - Controls.Add(tbCustom); - Controls.Add(guna2HtmlLabel6); Controls.Add(guna2HtmlLabel5); Controls.Add(guna2HtmlLabel4); Controls.Add(guna2HtmlLabel3); @@ -831,23 +464,19 @@ private void InitializeComponent() Controls.Add(guna2HtmlLabel1); Controls.Add(lbThamGia); Controls.Add(lbWaiting); - Controls.Add(lbTime); Controls.Add(label1); - Controls.Add(guna2Panel2); Controls.Add(guna2Panel1); Controls.Add(guna2PictureBox1); + Controls.Add(cbCustomWords); ForeColor = SystemColors.ControlDark; + FormBorderStyle = FormBorderStyle.FixedSingle; Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; Name = "HostRoom"; Text = "Host Room"; + Load += HostRoom_Load; guna2Panel1.ResumeLayout(false); - guna2Panel2.ResumeLayout(false); - guna2Panel2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox4).EndInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox3).EndInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox2).EndInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).EndInit(); ((System.ComponentModel.ISupportInitialize)guna2PictureBox1).EndInit(); ResumeLayout(false); PerformLayout(); @@ -856,36 +485,15 @@ private void InitializeComponent() #endregion private Guna.UI2.WinForms.Guna2Panel guna2Panel1; - private Guna.UI2.WinForms.Guna2TextBox guna2TextBox1; - private ListBox listBox1; - private Guna.UI2.WinForms.Guna2Panel guna2Panel2; - private Guna.UI2.WinForms.Guna2Button guna2Button1; + private Guna.UI2.WinForms.Guna2TextBox chatInput; private Label label1; - private Label lbTime; - private Guna.UI2.WinForms.Guna2Button guna2Button4; - private Guna.UI2.WinForms.Guna2Button guna2Button3; - private Guna.UI2.WinForms.Guna2Button guna2Button2; private Label lbWaiting; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox4; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox3; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox2; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox1; - private Label label10; - private Label label11; - private Label label8; - private Label label9; - private Label label6; - private Label label7; - private Label label5; - private Label label4; private Guna.UI2.WinForms.Guna2HtmlLabel lbThamGia; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel1; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel2; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel3; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel4; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel5; - private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel6; - private Guna.UI2.WinForms.Guna2TextBox tbCustom; private Guna.UI2.WinForms.Guna2Button btInvite; private Guna.UI2.WinForms.Guna2Button btStart; private Guna.UI2.WinForms.Guna2CheckBox cbCustomWords; @@ -893,9 +501,10 @@ private void InitializeComponent() private Guna.UI2.WinForms.Guna2ComboBox cobDrawtime; private Guna.UI2.WinForms.Guna2ComboBox cobRounds; private Guna.UI2.WinForms.Guna2ComboBox cobGameMode; - private Guna.UI2.WinForms.Guna2ComboBox cobWordCount; private Guna.UI2.WinForms.Guna2ComboBox cobHints; + private Guna.UI2.WinForms.Guna2ComboBox cobWordsCount; private Guna.UI2.WinForms.Guna2PictureBox guna2PictureBox1; - private Guna.UI2.WinForms.Guna2ComboBox guna2ComboBox1; + private FlowLayoutPanel flowLayoutPanel1; + private RichTextBox chatBox; } } \ No newline at end of file diff --git a/HostRoom.cs b/HostRoom.cs index 6a986eb..3a3c8e4 100644 --- a/HostRoom.cs +++ b/HostRoom.cs @@ -7,47 +7,166 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using SocketIOClient; +using System.Diagnostics; +using FunDraw.Components; +using FunDraw.Types; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace FunDraw { public partial class HostRoom : Form { + private int playersCount = 8; + private int drawTime = 120; + private int rounds = 3; + private int wordsCount = 3; + private int hints = 2; + public HostRoom() { InitializeComponent(); + flowLayoutPanel1.Controls.Clear(); + + cobPlayers.SelectedIndex = 6; + cobDrawtime.SelectedIndex = 10; // 10 + cobRounds.SelectedIndex = 2; + cobHints.SelectedIndex = 1; + cobWordsCount.SelectedIndex = 2; + label1.Text = $"ID: {GameManager.roomId.Insert(4, "-")}"; + Gateway.Instance.On("roomInfo", roomInfoHandler); + Gateway.Instance.On("playerList", updatePlayerList); + Gateway.Instance.On("chatMessage", chatMessageHandler); + Gateway.Instance.On("startGame", startGameHandler); } - private void guna2PictureBox1_Click(object sender, EventArgs e) + private void HostRoom_Load(object sender, EventArgs e) { - + Gateway.Instance.Emit("roomInfo", new { roomId = GameManager.roomId }); + Gateway.Instance.Emit("playerList", new { roomId = GameManager.roomId }); } - private void guna2Button1_Click(object sender, EventArgs e) + private void roomInfoHandler(SocketIOResponse response) { + var result = response.GetValue(); + var data = JsonConvert.DeserializeObject(result); } - private void tbCustom_Enter(object sender, EventArgs e) + private void updatePlayerList(SocketIOResponse response) { - if (tbCustom.Text == "Minimum of 10 words. 1-32 characters per word! 20000 characters maximum. Separated by a, (comma)") + PlayerList[] data = response.GetValue(); + + Invoke((MethodInvoker)(() => flowLayoutPanel1.Controls.Clear())); + + for (int i = 0; i < data.Length; i++) { - tbCustom.Text = ""; - tbCustom.ForeColor = Color.Black; + PlayerCard pc = new PlayerCard(); + pc.PlayerName = $"{data[i].name}"; + pc.PlayerScore = data[i].score; + + Invoke((MethodInvoker)(() => flowLayoutPanel1.Controls.Add(pc))); } } - private void tbCustom_Leave(object sender, EventArgs e) + private void chatMessageHandler(SocketIOResponse response) + { + var result = response.GetValue(); + var data = JsonConvert.DeserializeObject(result); + + Invoke((MethodInvoker)(() => chatBox.AppendText($"{data["sender"]}: {data["message"]}\n"))); + } + + private void startGameHandler(SocketIOResponse response) { - if (tbCustom.Text == "") + var result = response.GetValue(); + var data = JsonConvert.DeserializeObject(result); + if (data.ContainsKey("error")) { - tbCustom.Text = "Minimum of 10 words. 1-32 characters per word! 20000 characters maximum. Separated by a, (comma)"; - tbCustom.ForeColor = Color.FromArgb(125, 137, 149); + GameManager.gameStart = false; + MessageBox.Show($"{data["error"]}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; } + GameManager.gameStart = true; + FormState.GameRoomForm(); + Invoke((MethodInvoker)(() => this.Close())); } + //private void tbCustom_Enter(object sender, EventArgs e) + //{ + // if (tbCustom.Text == "Minimum of 10 words. 1-32 characters per word! 20000 characters maximum. Separated by a, (comma)") + // { + // tbCustom.Text = ""; + // tbCustom.ForeColor = Color.Black; + // } + //} + + //private void tbCustom_Leave(object sender, EventArgs e) + //{ + // if (tbCustom.Text == "") + // { + // tbCustom.Text = "Minimum of 10 words. 1-32 characters per word! 20000 characters maximum. Separated by a, (comma)"; + // tbCustom.ForeColor = Color.FromArgb(125, 137, 149); + // } + //} + private void btInvite_Click(object sender, EventArgs e) { + Clipboard.SetText(GameManager.roomId.Insert(4, "-")); + MessageBox.Show("Copied room code to clipboard!"); + } + + private void btStart_Click(object sender, EventArgs e) + { + var payload = new + { + roomId = GameManager.roomId, + playersCount = playersCount, + drawTime = drawTime, + roundsCount = rounds, + wordsCount = wordsCount, + hintsCount = hints, + customWords = new string[0], + }; + Gateway.Instance.Emit("startGame", payload); + } + + private void cobPlayers_SelectedIndexChanged(object sender, EventArgs e) + { + playersCount = int.Parse(cobPlayers.SelectedItem.ToString()); + } + + private void cobDrawtime_SelectedIndexChanged(object sender, EventArgs e) + { + drawTime = int.Parse(cobDrawtime.SelectedItem.ToString()); + } + + private void cobRounds_SelectedIndexChanged(object sender, EventArgs e) + { + rounds = int.Parse(cobRounds.SelectedItem.ToString()); + } + + private void cobHints_SelectedIndexChanged(object sender, EventArgs e) + { + hints = int.Parse(cobHints.SelectedItem.ToString()); + } + private void chatInput_TextChanged(object sender, EventArgs e) + { + + } + + private void chatInput_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter && chatInput.Focused) + { + Gateway.Instance.Emit("chatMessage", new { roomId = GameManager.roomId, message = chatInput.Text }); + chatInput.Clear(); + e.Handled = true; + e.SuppressKeyPress = true; + } } } } diff --git a/In_Game_Guesser.Designer.cs b/In_Game_Guesser.Designer.cs deleted file mode 100644 index 03ea5c0..0000000 --- a/In_Game_Guesser.Designer.cs +++ /dev/null @@ -1,667 +0,0 @@ -namespace FunDraw -{ - partial class In_Game_Guesser - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges3 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges2 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges19 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges20 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges7 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges8 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges9 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges10 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges11 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges12 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges13 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges14 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges15 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges16 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges17 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges18 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(In_Game_Guesser)); - guna2Panel1 = new Guna.UI2.WinForms.Guna2Panel(); - guna2TextBox1 = new Guna.UI2.WinForms.Guna2TextBox(); - listBox1 = new ListBox(); - guna2PictureBox1 = new Guna.UI2.WinForms.Guna2PictureBox(); - guna2Panel2 = new Guna.UI2.WinForms.Guna2Panel(); - label10 = new Label(); - label11 = new Label(); - label8 = new Label(); - label9 = new Label(); - label6 = new Label(); - label7 = new Label(); - label5 = new Label(); - label4 = new Label(); - guna2CirclePictureBox4 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2CirclePictureBox3 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2CirclePictureBox2 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2CirclePictureBox1 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); - guna2Button4 = new Guna.UI2.WinForms.Guna2Button(); - guna2Button3 = new Guna.UI2.WinForms.Guna2Button(); - guna2Button2 = new Guna.UI2.WinForms.Guna2Button(); - guna2Button1 = new Guna.UI2.WinForms.Guna2Button(); - label1 = new Label(); - label2 = new Label(); - label3 = new Label(); - button1 = new Button(); - panel1 = new Panel(); - button3 = new Button(); - Clear = new Button(); - Line = new Button(); - Rectangle = new Button(); - Elipse = new Button(); - button2 = new Button(); - guna2Panel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)guna2PictureBox1).BeginInit(); - guna2Panel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox4).BeginInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox3).BeginInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox2).BeginInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).BeginInit(); - panel1.SuspendLayout(); - SuspendLayout(); - // - // guna2Panel1 - // - guna2Panel1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - guna2Panel1.BorderRadius = 20; - guna2Panel1.Controls.Add(guna2TextBox1); - guna2Panel1.Controls.Add(listBox1); - guna2Panel1.CustomizableEdges = customizableEdges3; - guna2Panel1.FillColor = Color.Gainsboro; - guna2Panel1.ForeColor = SystemColors.AppWorkspace; - guna2Panel1.Location = new Point(1122, 9); - guna2Panel1.Margin = new Padding(3, 2, 3, 2); - guna2Panel1.Name = "guna2Panel1"; - guna2Panel1.ShadowDecoration.CustomizableEdges = customizableEdges4; - guna2Panel1.Size = new Size(206, 680); - guna2Panel1.TabIndex = 0; - // - // guna2TextBox1 - // - guna2TextBox1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - guna2TextBox1.BorderRadius = 20; - customizableEdges1.TopLeft = false; - customizableEdges1.TopRight = false; - guna2TextBox1.CustomizableEdges = customizableEdges1; - guna2TextBox1.DefaultText = ""; - guna2TextBox1.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); - guna2TextBox1.DisabledState.FillColor = Color.FromArgb(226, 226, 226); - guna2TextBox1.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); - guna2TextBox1.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); - guna2TextBox1.FillColor = Color.DarkSeaGreen; - guna2TextBox1.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); - guna2TextBox1.Font = new Font("Segoe UI", 9F, FontStyle.Bold); - guna2TextBox1.ForeColor = Color.Black; - guna2TextBox1.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - guna2TextBox1.Location = new Point(0, 640); - guna2TextBox1.Name = "guna2TextBox1"; - guna2TextBox1.PasswordChar = '\0'; - guna2TextBox1.PlaceholderForeColor = Color.DarkGray; - guna2TextBox1.PlaceholderText = ""; - guna2TextBox1.SelectedText = ""; - guna2TextBox1.ShadowDecoration.CustomizableEdges = customizableEdges2; - guna2TextBox1.Size = new Size(206, 40); - guna2TextBox1.TabIndex = 1; - // - // listBox1 - // - listBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - listBox1.BackColor = Color.Gainsboro; - listBox1.FormattingEnabled = true; - listBox1.ItemHeight = 15; - listBox1.Location = new Point(0, 24); - listBox1.Margin = new Padding(3, 2, 3, 2); - listBox1.Name = "listBox1"; - listBox1.Size = new Size(206, 604); - listBox1.TabIndex = 0; - // - // guna2PictureBox1 - // - guna2PictureBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2PictureBox1.BackColor = SystemColors.ControlDark; - guna2PictureBox1.CustomizableEdges = customizableEdges5; - guna2PictureBox1.ImageRotate = 0F; - guna2PictureBox1.Location = new Point(203, 33); - guna2PictureBox1.Margin = new Padding(3, 2, 3, 2); - guna2PictureBox1.Name = "guna2PictureBox1"; - guna2PictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges6; - guna2PictureBox1.Size = new Size(913, 566); - guna2PictureBox1.TabIndex = 1; - guna2PictureBox1.TabStop = false; - guna2PictureBox1.Paint += guna2PictureBox1_Paint; - guna2PictureBox1.MouseDown += guna2PictureBox1_MouseDown; - guna2PictureBox1.MouseMove += guna2PictureBox1_MouseMove; - guna2PictureBox1.MouseUp += guna2PictureBox1_MouseUp; - // - // guna2Panel2 - // - guna2Panel2.Controls.Add(label10); - guna2Panel2.Controls.Add(label11); - guna2Panel2.Controls.Add(label8); - guna2Panel2.Controls.Add(label9); - guna2Panel2.Controls.Add(label6); - guna2Panel2.Controls.Add(label7); - guna2Panel2.Controls.Add(label5); - guna2Panel2.Controls.Add(label4); - guna2Panel2.Controls.Add(guna2CirclePictureBox4); - guna2Panel2.Controls.Add(guna2CirclePictureBox3); - guna2Panel2.Controls.Add(guna2CirclePictureBox2); - guna2Panel2.Controls.Add(guna2CirclePictureBox1); - guna2Panel2.Controls.Add(guna2Button4); - guna2Panel2.Controls.Add(guna2Button3); - guna2Panel2.Controls.Add(guna2Button2); - guna2Panel2.Controls.Add(guna2Button1); - guna2Panel2.CustomizableEdges = customizableEdges19; - guna2Panel2.Location = new Point(10, 33); - guna2Panel2.Margin = new Padding(3, 2, 3, 2); - guna2Panel2.Name = "guna2Panel2"; - guna2Panel2.ShadowDecoration.CustomizableEdges = customizableEdges20; - guna2Panel2.Size = new Size(187, 464); - guna2Panel2.TabIndex = 2; - // - // label10 - // - label10.AutoSize = true; - label10.BackColor = Color.CornflowerBlue; - label10.ForeColor = SystemColors.ControlLight; - label10.Location = new Point(59, 159); - label10.Name = "label10"; - label10.Size = new Size(48, 15); - label10.TabIndex = 15; - label10.Text = "Score: 0"; - // - // label11 - // - label11.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - label11.AutoSize = true; - label11.BackColor = Color.CornflowerBlue; - label11.ForeColor = SystemColors.ActiveCaptionText; - label11.Location = new Point(59, 142); - label11.Name = "label11"; - label11.Size = new Size(39, 15); - label11.TabIndex = 14; - label11.Text = "Player"; - // - // label8 - // - label8.AutoSize = true; - label8.BackColor = Color.CornflowerBlue; - label8.ForeColor = SystemColors.ControlLight; - label8.Location = new Point(59, 116); - label8.Name = "label8"; - label8.Size = new Size(48, 15); - label8.TabIndex = 13; - label8.Text = "Score: 0"; - // - // label9 - // - label9.AutoSize = true; - label9.BackColor = Color.CornflowerBlue; - label9.ForeColor = SystemColors.ActiveCaptionText; - label9.Location = new Point(59, 99); - label9.Name = "label9"; - label9.Size = new Size(39, 15); - label9.TabIndex = 12; - label9.Text = "Player"; - // - // label6 - // - label6.AutoSize = true; - label6.BackColor = Color.CornflowerBlue; - label6.ForeColor = SystemColors.ControlLight; - label6.Location = new Point(59, 74); - label6.Name = "label6"; - label6.Size = new Size(48, 15); - label6.TabIndex = 11; - label6.Text = "Score: 0"; - // - // label7 - // - label7.AutoSize = true; - label7.BackColor = Color.CornflowerBlue; - label7.ForeColor = SystemColors.ActiveCaptionText; - label7.Location = new Point(59, 56); - label7.Name = "label7"; - label7.Size = new Size(39, 15); - label7.TabIndex = 10; - label7.Text = "Player"; - // - // label5 - // - label5.AutoSize = true; - label5.BackColor = Color.CornflowerBlue; - label5.ForeColor = SystemColors.ControlLight; - label5.Location = new Point(59, 31); - label5.Name = "label5"; - label5.Size = new Size(48, 15); - label5.TabIndex = 9; - label5.Text = "Score: 0"; - // - // label4 - // - label4.AutoSize = true; - label4.BackColor = Color.CornflowerBlue; - label4.ForeColor = SystemColors.ActiveCaptionText; - label4.Location = new Point(59, 14); - label4.Name = "label4"; - label4.Size = new Size(39, 15); - label4.TabIndex = 8; - label4.Text = "Player"; - // - // guna2CirclePictureBox4 - // - guna2CirclePictureBox4.BackColor = Color.CornflowerBlue; - guna2CirclePictureBox4.ImageRotate = 0F; - guna2CirclePictureBox4.Location = new Point(18, 142); - guna2CirclePictureBox4.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox4.Name = "guna2CirclePictureBox4"; - guna2CirclePictureBox4.ShadowDecoration.CustomizableEdges = customizableEdges7; - guna2CirclePictureBox4.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox4.Size = new Size(36, 32); - guna2CirclePictureBox4.TabIndex = 7; - guna2CirclePictureBox4.TabStop = false; - // - // guna2CirclePictureBox3 - // - guna2CirclePictureBox3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2CirclePictureBox3.BackColor = Color.CornflowerBlue; - guna2CirclePictureBox3.ImageRotate = 0F; - guna2CirclePictureBox3.Location = new Point(18, 99); - guna2CirclePictureBox3.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox3.Name = "guna2CirclePictureBox3"; - guna2CirclePictureBox3.ShadowDecoration.CustomizableEdges = customizableEdges8; - guna2CirclePictureBox3.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox3.Size = new Size(36, 32); - guna2CirclePictureBox3.TabIndex = 6; - guna2CirclePictureBox3.TabStop = false; - // - // guna2CirclePictureBox2 - // - guna2CirclePictureBox2.BackColor = Color.CornflowerBlue; - guna2CirclePictureBox2.ImageRotate = 0F; - guna2CirclePictureBox2.Location = new Point(18, 56); - guna2CirclePictureBox2.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox2.Name = "guna2CirclePictureBox2"; - guna2CirclePictureBox2.ShadowDecoration.CustomizableEdges = customizableEdges9; - guna2CirclePictureBox2.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox2.Size = new Size(36, 32); - guna2CirclePictureBox2.TabIndex = 5; - guna2CirclePictureBox2.TabStop = false; - // - // guna2CirclePictureBox1 - // - guna2CirclePictureBox1.BackColor = Color.CornflowerBlue; - guna2CirclePictureBox1.ImageRotate = 0F; - guna2CirclePictureBox1.Location = new Point(18, 14); - guna2CirclePictureBox1.Margin = new Padding(3, 2, 3, 2); - guna2CirclePictureBox1.Name = "guna2CirclePictureBox1"; - guna2CirclePictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges10; - guna2CirclePictureBox1.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox1.Size = new Size(36, 32); - guna2CirclePictureBox1.TabIndex = 4; - guna2CirclePictureBox1.TabStop = false; - // - // guna2Button4 - // - guna2Button4.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2Button4.Animated = true; - guna2Button4.AnimatedGIF = true; - guna2Button4.AutoRoundedCorners = true; - guna2Button4.BorderRadius = 18; - guna2Button4.CustomizableEdges = customizableEdges11; - guna2Button4.DisabledState.BorderColor = Color.DarkGray; - guna2Button4.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button4.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button4.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button4.FillColor = Color.CornflowerBlue; - guna2Button4.Font = new Font("Segoe UI", 9F); - guna2Button4.ForeColor = Color.White; - guna2Button4.ImageAlign = HorizontalAlignment.Left; - guna2Button4.Location = new Point(3, 139); - guna2Button4.Margin = new Padding(3, 2, 3, 2); - guna2Button4.Name = "guna2Button4"; - guna2Button4.ShadowDecoration.CustomizableEdges = customizableEdges12; - guna2Button4.Size = new Size(182, 38); - guna2Button4.TabIndex = 3; - guna2Button4.TextOffset = new Point(10, 0); - // - // guna2Button3 - // - guna2Button3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - guna2Button3.Animated = true; - guna2Button3.AnimatedGIF = true; - guna2Button3.BorderRadius = 20; - guna2Button3.CustomizableEdges = customizableEdges13; - guna2Button3.DisabledState.BorderColor = Color.DarkGray; - guna2Button3.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button3.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button3.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button3.FillColor = Color.CornflowerBlue; - guna2Button3.Font = new Font("Segoe UI", 9F); - guna2Button3.ForeColor = Color.White; - guna2Button3.ImageAlign = HorizontalAlignment.Left; - guna2Button3.Location = new Point(3, 96); - guna2Button3.Margin = new Padding(3, 2, 3, 2); - guna2Button3.Name = "guna2Button3"; - guna2Button3.ShadowDecoration.CustomizableEdges = customizableEdges14; - guna2Button3.Size = new Size(182, 38); - guna2Button3.TabIndex = 2; - guna2Button3.TextOffset = new Point(10, 0); - // - // guna2Button2 - // - guna2Button2.Animated = true; - guna2Button2.AnimatedGIF = true; - guna2Button2.BorderRadius = 20; - guna2Button2.CustomizableEdges = customizableEdges15; - guna2Button2.DisabledState.BorderColor = Color.DarkGray; - guna2Button2.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button2.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button2.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button2.FillColor = Color.CornflowerBlue; - guna2Button2.Font = new Font("Segoe UI", 9F); - guna2Button2.ForeColor = Color.White; - guna2Button2.ImageAlign = HorizontalAlignment.Left; - guna2Button2.Location = new Point(3, 53); - guna2Button2.Margin = new Padding(3, 2, 3, 2); - guna2Button2.Name = "guna2Button2"; - guna2Button2.ShadowDecoration.CustomizableEdges = customizableEdges16; - guna2Button2.Size = new Size(182, 38); - guna2Button2.TabIndex = 1; - guna2Button2.TextOffset = new Point(10, 0); - // - // guna2Button1 - // - guna2Button1.Animated = true; - guna2Button1.AnimatedGIF = true; - guna2Button1.BorderRadius = 20; - guna2Button1.CustomizableEdges = customizableEdges17; - guna2Button1.DisabledState.BorderColor = Color.DarkGray; - guna2Button1.DisabledState.CustomBorderColor = Color.DarkGray; - guna2Button1.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - guna2Button1.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - guna2Button1.FillColor = Color.CornflowerBlue; - guna2Button1.Font = new Font("Segoe UI", 9F); - guna2Button1.ForeColor = Color.White; - guna2Button1.ImageAlign = HorizontalAlignment.Left; - guna2Button1.Location = new Point(3, 10); - guna2Button1.Margin = new Padding(3, 2, 3, 2); - guna2Button1.Name = "guna2Button1"; - guna2Button1.ShadowDecoration.CustomizableEdges = customizableEdges18; - guna2Button1.Size = new Size(182, 38); - guna2Button1.TabIndex = 0; - guna2Button1.TextOffset = new Point(10, 0); - // - // label1 - // - label1.AutoSize = true; - label1.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); - label1.ForeColor = SystemColors.ActiveCaptionText; - label1.Location = new Point(10, 9); - label1.Name = "label1"; - label1.Size = new Size(60, 21); - label1.TabIndex = 3; - label1.Text = "Round"; - // - // label2 - // - label2.AllowDrop = true; - label2.AutoSize = true; - label2.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); - label2.ForeColor = Color.Red; - label2.Location = new Point(160, 9); - label2.Name = "label2"; - label2.Size = new Size(41, 21); - label2.TabIndex = 4; - label2.Text = "0:01"; - // - // label3 - // - label3.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - label3.AutoSize = true; - label3.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); - label3.ForeColor = SystemColors.ActiveCaptionText; - label3.Location = new Point(459, 9); - label3.Name = "label3"; - label3.Size = new Size(113, 21); - label3.TabIndex = 5; - label3.Text = "Tung Nguyen"; - // - // button1 - // - button1.Cursor = Cursors.Hand; - button1.FlatAppearance.MouseDownBackColor = Color.Maroon; - button1.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - button1.FlatStyle = FlatStyle.Flat; - button1.ForeColor = Color.White; - button1.Image = (Image)resources.GetObject("button1.Image"); - button1.ImageAlign = ContentAlignment.MiddleRight; - button1.Location = new Point(103, 12); - button1.Name = "button1"; - button1.Size = new Size(56, 63); - button1.TabIndex = 6; - button1.Text = "Pencil"; - button1.TextAlign = ContentAlignment.BottomCenter; - button1.UseVisualStyleBackColor = true; - button1.Click += button1_Click; - // - // panel1 - // - panel1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - panel1.BackColor = Color.FromArgb(64, 64, 64); - panel1.Controls.Add(button3); - panel1.Controls.Add(Clear); - panel1.Controls.Add(Line); - panel1.Controls.Add(Rectangle); - panel1.Controls.Add(Elipse); - panel1.Controls.Add(button2); - panel1.Controls.Add(button1); - panel1.Location = new Point(203, 604); - panel1.Name = "panel1"; - panel1.Size = new Size(913, 88); - panel1.TabIndex = 7; - // - // button3 - // - button3.Cursor = Cursors.Hand; - button3.FlatAppearance.MouseDownBackColor = Color.Maroon; - button3.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - button3.FlatStyle = FlatStyle.Flat; - button3.ForeColor = Color.White; - button3.Image = (Image)resources.GetObject("button3.Image"); - button3.ImageAlign = ContentAlignment.TopRight; - button3.Location = new Point(492, 12); - button3.Name = "button3"; - button3.Size = new Size(58, 63); - button3.TabIndex = 12; - button3.Text = "Color"; - button3.TextAlign = ContentAlignment.BottomCenter; - button3.UseVisualStyleBackColor = true; - button3.Click += button3_Click; - // - // Clear - // - Clear.FlatAppearance.MouseDownBackColor = Color.Maroon; - Clear.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - Clear.FlatStyle = FlatStyle.Flat; - Clear.ForeColor = Color.White; - Clear.ImageAlign = ContentAlignment.MiddleRight; - Clear.Location = new Point(27, 12); - Clear.Name = "Clear"; - Clear.Size = new Size(56, 63); - Clear.TabIndex = 11; - Clear.Text = "Clear"; - Clear.UseVisualStyleBackColor = true; - Clear.Click += Clear_Click; - // - // Line - // - Line.Cursor = Cursors.Hand; - Line.FlatAppearance.MouseDownBackColor = Color.Maroon; - Line.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - Line.FlatStyle = FlatStyle.Flat; - Line.ForeColor = Color.White; - Line.Image = (Image)resources.GetObject("Line.Image"); - Line.ImageAlign = ContentAlignment.TopCenter; - Line.Location = new Point(412, 12); - Line.Name = "Line"; - Line.Size = new Size(58, 63); - Line.TabIndex = 10; - Line.Text = "Line"; - Line.TextAlign = ContentAlignment.BottomCenter; - Line.UseVisualStyleBackColor = true; - Line.Click += Line_Click; - // - // Rectangle - // - Rectangle.Cursor = Cursors.Hand; - Rectangle.FlatAppearance.MouseDownBackColor = Color.Maroon; - Rectangle.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - Rectangle.FlatStyle = FlatStyle.Flat; - Rectangle.ForeColor = Color.White; - Rectangle.Image = (Image)resources.GetObject("Rectangle.Image"); - Rectangle.ImageAlign = ContentAlignment.TopCenter; - Rectangle.Location = new Point(333, 12); - Rectangle.Name = "Rectangle"; - Rectangle.Size = new Size(58, 63); - Rectangle.TabIndex = 9; - Rectangle.Text = "Rectan"; - Rectangle.TextAlign = ContentAlignment.BottomCenter; - Rectangle.UseVisualStyleBackColor = true; - Rectangle.Click += Rectangle_Click; - // - // Elipse - // - Elipse.Cursor = Cursors.Hand; - Elipse.FlatAppearance.MouseDownBackColor = Color.Maroon; - Elipse.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - Elipse.FlatStyle = FlatStyle.Flat; - Elipse.ForeColor = Color.White; - Elipse.Image = (Image)resources.GetObject("Elipse.Image"); - Elipse.ImageAlign = ContentAlignment.TopCenter; - Elipse.Location = new Point(256, 12); - Elipse.Name = "Elipse"; - Elipse.Size = new Size(58, 63); - Elipse.TabIndex = 8; - Elipse.Text = "Elipse"; - Elipse.TextAlign = ContentAlignment.BottomCenter; - Elipse.UseVisualStyleBackColor = true; - Elipse.Click += Elipse_Click; - // - // button2 - // - button2.Cursor = Cursors.Hand; - button2.FlatAppearance.MouseDownBackColor = Color.Maroon; - button2.FlatAppearance.MouseOverBackColor = Color.FromArgb(64, 0, 0); - button2.FlatStyle = FlatStyle.Flat; - button2.ForeColor = Color.White; - button2.Image = (Image)resources.GetObject("button2.Image"); - button2.ImageAlign = ContentAlignment.TopRight; - button2.Location = new Point(181, 12); - button2.Name = "button2"; - button2.Size = new Size(56, 63); - button2.TabIndex = 7; - button2.Text = "Eraser"; - button2.TextAlign = ContentAlignment.BottomCenter; - button2.UseVisualStyleBackColor = true; - button2.Click += button2_Click; - // - // In_Game_Guesser - // - AutoScaleDimensions = new SizeF(7F, 15F); - AutoScaleMode = AutoScaleMode.Font; - BackColor = SystemColors.ButtonFace; - ClientSize = new Size(1339, 704); - Controls.Add(panel1); - Controls.Add(label3); - Controls.Add(label2); - Controls.Add(label1); - Controls.Add(guna2Panel2); - Controls.Add(guna2PictureBox1); - Controls.Add(guna2Panel1); - ForeColor = SystemColors.ControlDark; - Icon = (Icon)resources.GetObject("$this.Icon"); - FormBorderStyle = FormBorderStyle.FixedToolWindow; - Margin = new Padding(3, 2, 3, 2); - Name = "In_Game_Guesser"; - Text = "Fun Draw"; - guna2Panel1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)guna2PictureBox1).EndInit(); - guna2Panel2.ResumeLayout(false); - guna2Panel2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox4).EndInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox3).EndInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox2).EndInit(); - ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).EndInit(); - panel1.ResumeLayout(false); - ResumeLayout(false); - PerformLayout(); - } - - #endregion - - private Guna.UI2.WinForms.Guna2Panel guna2Panel1; - private Guna.UI2.WinForms.Guna2PictureBox guna2PictureBox1; - private Guna.UI2.WinForms.Guna2TextBox guna2TextBox1; - private ListBox listBox1; - private Guna.UI2.WinForms.Guna2Panel guna2Panel2; - private Guna.UI2.WinForms.Guna2Button guna2Button1; - private Label label1; - private Label label2; - private Guna.UI2.WinForms.Guna2Button guna2Button4; - private Guna.UI2.WinForms.Guna2Button guna2Button3; - private Guna.UI2.WinForms.Guna2Button guna2Button2; - private Label label3; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox4; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox3; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox2; - private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox1; - private Label label10; - private Label label11; - private Label label8; - private Label label9; - private Label label6; - private Label label7; - private Label label5; - private Label label4; - private Button button1; - private Panel panel1; - private Button button2; - private Button Elipse; - private Button Rectangle; - private Button Line; - private Button Clear; - private Button button3; - } -} \ No newline at end of file diff --git a/In_Game_Guesser.cs b/In_Game_Guesser.cs deleted file mode 100644 index c32a75d..0000000 --- a/In_Game_Guesser.cs +++ /dev/null @@ -1,333 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Net.Sockets; -using System.Net; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using System.Threading; -using System.Runtime.InteropServices; -using System.Threading.Tasks; -using System.Data.SqlClient; -using Newtonsoft.Json; -using System.Runtime.Serialization; -using System.Collections.Concurrent; -using System.Net.WebSockets; -namespace FunDraw - -{ - public partial class In_Game_Guesser : Form - { - private ClientWebSocket webSocket; - private CancellationTokenSource cancellationTokenSource; - Bitmap? bm; - Graphics? g; - - public In_Game_Guesser() - { - InitializeComponent(); - OnResize(EventArgs.Empty); - ConnectToServer(); - } - - async void ConnectToServer() - { - webSocket = new ClientWebSocket(); - cancellationTokenSource = new CancellationTokenSource(); - - try - { - // Replace with your WebSocket server URL - await webSocket.ConnectAsync(new Uri("wss://ws-test-fundraw.lt.id.vn/game"), cancellationTokenSource.Token); - - // Start receiving messages - _ = ReceiveMessagesAsync(); - } - catch (Exception ex) - { - MessageBox.Show($"Không thể kết nối với server! Lỗi: {ex.Message}", - "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - async Task ReceiveMessagesAsync() - { - var buffer = new byte[1024 * 4]; - - try - { - while (webSocket.State == WebSocketState.Open) - { - var result = await webSocket.ReceiveAsync( - new ArraySegment(buffer), - cancellationTokenSource.Token); - - if (result.MessageType == WebSocketMessageType.Text) - { - var message = Encoding.UTF8.GetString(buffer, 0, result.Count); - ProcessDrawingMessage(message); - } - - if (result.MessageType == WebSocketMessageType.Close) - { - await webSocket.CloseAsync( - WebSocketCloseStatus.NormalClosure, - "Closing", - cancellationTokenSource.Token); - break; - } - } - } - catch (Exception ex) - { - MessageBox.Show($"Lỗi kết nối: {ex.Message}", - "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private class DrawingData - { - public string Action { get; set; } - public PointData Start { get; set; } - public PointData End { get; set; } - public string Color { get; set; } - } - - private class PointData - { - public int X { get; set; } - public int Y { get; set; } - } - void ProcessDrawingMessage(string jsonData) - { - try - { - var drawData = JsonConvert.DeserializeObject(jsonData); - - // Invoke on UI thread to prevent cross-thread issues - this.Invoke((MethodInvoker)delegate { - switch (drawData.Action) - { - case "line": - g.DrawLine(new Pen(ColorTranslator.FromHtml(drawData.Color)), - new Point(drawData.Start.X, drawData.Start.Y), - new Point(drawData.End.X, drawData.End.Y)); - break; - case "erase": - g.DrawLine(new Pen(Color.White, 10), - new Point(drawData.Start.X, drawData.Start.Y), - new Point(drawData.End.X, drawData.End.Y)); - break; - case "ellipse": - g.DrawEllipse(new Pen(ColorTranslator.FromHtml(drawData.Color)), - drawData.Start.X, drawData.Start.Y, - drawData.End.X, drawData.End.Y); - break; - case "rectangle": - g.DrawRectangle(new Pen(ColorTranslator.FromHtml(drawData.Color)), - drawData.Start.X, drawData.Start.Y, - drawData.End.X, drawData.End.Y); - break; - case "clear": - g.Clear(Color.White); - break; - } - guna2PictureBox1.Refresh(); - }); - } - catch (Exception ex) - { - MessageBox.Show($"Lỗi xử lý dữ liệu: {ex.Message}", - "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - async void SendDrawData(string action, Point start, Point end, Color color) - { - if (webSocket.State == WebSocketState.Open) - { - var drawData = new DrawingData - { - Action = action, - Start = new PointData { X = start.X, Y = start.Y }, - End = new PointData { X = end.X, Y = end.Y }, - Color = ColorTranslator.ToHtml(color) - }; - - string jsonData = JsonConvert.SerializeObject(drawData); - var buffer = Encoding.UTF8.GetBytes(jsonData); - - await webSocket.SendAsync( - new ArraySegment(buffer), - WebSocketMessageType.Text, - true, - cancellationTokenSource.Token); - } - } - - - - protected override void OnResize(EventArgs e) - { - base.OnResize(e); - if (guna2PictureBox1.Width > 0 && guna2PictureBox1.Height > 0) - { - bm = new Bitmap(guna2PictureBox1.Width, guna2PictureBox1.Height); - g = Graphics.FromImage(bm); - g.Clear(Color.White); - guna2PictureBox1.Image = bm; - } - } - - bool paint = false; - Point px, py; - Pen p = new Pen(Color.Black, 1); - Pen erase = new Pen(Color.White, 10); - int index; - int x, y, sX, sY, cX, cY; - - ColorDialog colorDialog = new ColorDialog(); - Color new_Color; - - private void button1_Click(object sender, EventArgs e) - { - index = 1; - } - - private void guna2PictureBox1_MouseDown(object sender, MouseEventArgs e) - { - paint = true; - py = e.Location; - - cX = e.X; - cY = e.Y; - } - - private void guna2PictureBox1_MouseMove(object sender, MouseEventArgs e) - { - if (paint) - { - if (index == 1) - { - px = e.Location; - g.DrawLine(p, px, py); - py = px; - SendDrawData("line", px, py, p.Color); - } - if (index == 2) - { - px = e.Location; - g.DrawLine(erase, px, py); - py = px; - SendDrawData("erase", px, py, erase.Color); - } - } - guna2PictureBox1.Refresh(); - - x = e.X; - y = e.Y; - - sX = e.X - cX; - sY = e.Y - cY; - } - - private void guna2PictureBox1_MouseUp(object sender, MouseEventArgs e) - { - paint = false; - - sX = x - cX; - sY = y - cY; - - if (index == 3) - { - g.DrawEllipse(p, cX, cY, sX, sY); - SendDrawData("ellipse", new Point(cX, cY), new Point(sX, sY), p.Color); - } - if (index == 4) - { - g.DrawRectangle(p, cX, cY, sX, sY); - SendDrawData("rectangle", new Point(cX, cY), new Point(sX, sY), p.Color); - } - if (index == 5) - { - g.DrawLine(p, cX, cY, x, y); - SendDrawData("line", new Point(cX, cY), new Point(x, y), p.Color); - } - } - - private void button2_Click(object sender, EventArgs e) - { - index = 2; - } - - private void Elipse_Click(object sender, EventArgs e) - { - index = 3; - } - - private void Rectangle_Click(object sender, EventArgs e) - { - index = 4; - } - - private void Line_Click(object sender, EventArgs e) - { - index = 5; - } - - private void guna2PictureBox1_Paint(object sender, PaintEventArgs e) - { - Graphics g = e.Graphics; - if (paint) - { - if (index == 3) - { - g.DrawEllipse(p, cX, cY, sX, sY); - } - if (index == 4) - { - g.DrawRectangle(p, cX, cY, sX, sY); - } - if (index == 5) - { - g.DrawLine(p, cX, cY, x, y); - } - } - } - - private void Clear_Click(object sender, EventArgs e) - { - g.Clear(Color.White); - guna2PictureBox1.Image = bm; - index = 0; - SendDrawData("clear", Point.Empty, Point.Empty, Color.White); - } - - private void button3_Click(object sender, EventArgs e) - { - colorDialog.ShowDialog(); - new_Color = colorDialog.Color; - guna2PictureBox1.BackColor = new_Color; - p.Color = new_Color; - } - - // Cleanup method - protected override void OnFormClosing(FormClosingEventArgs e) - { - base.OnFormClosing(e); - - // Close WebSocket connection - if (webSocket != null && webSocket.State == WebSocketState.Open) - { - webSocket.CloseAsync( - WebSocketCloseStatus.NormalClosure, - "Closing", - CancellationToken.None).Wait(); - } - } - } -} diff --git a/In_Game_Guesser.resx b/In_Game_Guesser.resx deleted file mode 100644 index 13380b2..0000000 --- a/In_Game_Guesser.resx +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - iVBORw0KGgoAAAANSUhEUgAAADQAAAA1CAYAAAAOJMhOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABl0lEQVRoQ+2Wv0oDQRCHg52N4AtY6yUW - ol68u+TOvWDnk0RQIYQ0Fpa2FpIiioiPENL4LFp47xDCkcDPmd1NuGheYHC+Y+H+THEfv9lha4qi/D/Q - vwbu+vCPcsGSp0eg1wUGN7KlvI5jSFIDSqp3JU8qm7fQWRgMy1dv43kbAbddWULZIkEH5zgrQgSTA9wX - D97G4ctkkM0oGZKJiyYa4zqtAOHXMUZ4lydjyjZypE5mwjJ1xN+hFUzKWFgyvGeqyZBQRPcXMMjnbVky - +Sy1MiywkrHJGGTSZLjN/iRDMpwMf/NlMsh/txnvmVWbtYQlU5XhAUArpjHN77gFfZkMNsv4ZKTJ5PPl - AAgr08ztGXnJTDcMANtmBulM2jSzMsYlU2kzfie0zSoylI5LhgYAffNlMoimxv44T7D1ZATKMJeIcVpE - JBKst5lEGTob0/l4B0cfAfbHhzYlluH95Etk4YRoldvIixM6SdO1EJjMkpdBQEJbTgq7JJPIlWEazRSf - z3uyJRRFURRFURRFURRFURRFUQRSq/0AZ5qWWKkK3OgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAADAAAAAxCAYAAACcXioiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACN0lEQVRoQ+2TP2gTYRjGU6lB6dBJQW1j - hxKLHTpa1MFBRAluSkEUJykUxEVxEdx0koq4VBAHaxedipRsbR1EFKwRxOJQkJAgAU1rlU76+Bx58+W7 - 7+68CuYuyvsjv5D73vfe77k/ySiKoiiKEgHAzyaU9s4hLKTnu/UTmP98mb+7AzVPOT1dwoJ53lxZQrYI - dD0FRl9yCVlfvamMSYewQA2z2DUPbGF47yIys0Cxdj2kr6GMSxY7wCr9Zh17Dj/nN4N7T6B7DijVT/rq - rjI2GeyNJ9eGsL8yjpHKBUx/z5n1Ur2AEV5E/yJwY+WtWceLHN6P30P52lVgrTVHRidDc9MvNF+ZwBAv - IF+5iAPVc/gptZbWH/hDL6b7gcmtDV+N8f2SmoxOhuamX+kw73y+PIHB8iUcro61woa4er+A29uAqV7g - bg8w08flWpepy/j2YgfyfLg+gEPVMzjy6TSKGzt8tYCvd+PBzsbdv8UHs3Bs2dRkfPvxBRKDr020G09G - 8ez4EkrnZ4CP2826jG8/dpi/qYxvP4HN39BZWrPW/lAZnQy+zR/RfXQvPUrL1K5vUhmdDL7NC9QLP0j7 - 6B1q12OUkcniC3GW7qEDNEcfU7v+G2VcOpggy/QUPUiv0B/UChmljEmPQKi6cxyjjEmPsFCu0mqIqyeO - G8hV2gxx9VRwQ9lKiyGungpuKFtpMcTVU8MNZistPIiudQxhIaOUUzqPsLCu0tr5/LPBFUVRFEVRFOV/ - JZP5BSJUlfz8MpDLAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABjUlEQVRYR+2YyUoDURBFG7JVY5xAN36G - vyP4IYqunA2iqLj185xwVrQ9R15BCLit14sUHEjCg7rUrVddnWYSXYq2XeuVj3UDIYuwAavlpzqBgHk4 - gEe4qSaIxH04hTdo4Q7WIdcyEi7BIfyAQl5gC2bLkZwwIezDMyjkG7SqX47kBAkHcF0EKMResSJT5UhO - kFBrrMAnKOQLNmFQjuQECbXmBMKadziG9IoswBlEs4Y1M+VITpBQIVrzCtGsO1DFmguIOfIEuzBdjuQE - CW3WIwhr7JXOzBG/VxHiHPHaKuQBtqGKNVYghHyA1syVIzlBQitij4Q1CnGOpFfE6+utGZ8jVYQ4R+L6 - 2qz2SLo1PvTOIQaaFu1BlWb1WRPWONCqzBErojWjc8TJmi7EVdE5EmuAzeqzpoo1ViQWI9eAKvuIFXFn - DWscbM6R9DXA14krGJ0jViR9MfIFS2u0JJq1yojvge8x96AQ58kQcisSQeJluIRbsCK5rxPjgYAVsEK5 - t+a/QEg3/iWYxF80zS+r0Bb2OyA45wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhUlEQVRYR+2WwQmAMBAEA0kLaUILsHyb - 0E78xw0cRuRAfSQXZQfmc8g6zzhCfkFKk4eDgV4SCjhGmAyMklDIx8tHrbyN2eBc0bz/OGaVcxWwv5z+ - xZgD7DNGBfuMUcE+Y1SwzxgV7DNGBfuMUcE+Y1Sw/yqmq5deS/uPCXA0MEgCIV/GuR1zk17N5VjmYgAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACNUlEQVRYR+2WzYtNcRyHr6G8jHcWw9Qw - Xhpk46VQkgUWFkrZTspG4x+QshFWo+wtLC2wQ/aUIQs7/8Eoyowob+F6vvWc6aT7O/fec3/X6j71bD7n - +/2c072dl8aAAf+LZvPQctyFx/C4HsARR/oLJxrCHfgcmxV+wYs47GpeKB7D79jq5Cl/47QVeaDwKv7x - BOFDnMC1OORY8deN4CSW59/hGsfqQ8mdUukr3OahSphbgvFX/cLYncNRD3cPy9ctCmv93OzFLxgXEh2z - xt3B4mYLwlvGtWB/I/6w66VxZ7AQd81Xl2eMe4KeM/aFW4zbw3A8P4rFceOeoeuenXNG7WH4tUsPjLJA - 3157407bYJyGoWEXwp3G2aAzHojRfc4oDUO7HQ5XG2eDzmm7HxmlYeiow+HCAy0XdJ6ye94oDUMnHG4a - ZYXehV/eKA1D8fbt58UctP+nURqG9jscLjPOBp3xiojuN0ZpGBp1ONxknA06n9l906gaBouX26RRFuhb - ZW84ZlwNg5eKJaMs0HfB3vjOWWpcDYMrXYjFKeOeoGexfeE1485g4UZpecK4NnQ8tav986UVLM5a8AnX - G3cNu3ftCY8YdweL8Z76YMlnPO2hjmA+PkWeuB9e8VA9KIhb/X2p8D7u8XBLOL4CzztfeNnDvUPZzD/l - 8Sl5G0/idtyHU/gCy3PzeNiafFA6jh+x/OWfMu7GuAkWud4fOME6PIuP8RsWF/AW4yN+K3b2HBkwoDaN - xl+JAcO4nDxKNAAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABGdBTUEAALGPC/xhBQAAAoBJREFUaEPt - l01rFEEQhhf1IupBQT0oYkAS3cl+sIsaD5KDf0F/jDdzMH7+g5wCnjzlboIgIRBFFEEH9OIl5KTgRUNM - d/tUbw1kl4m74mF6oB4odqnuaert6qqeaRiGYRiGYaTPnPdHW96vFzbr3HrT+6YO14sZ7090vP/UDiEU - 1sEQ9b0ZwgWdVg/a3k9hb/eLKayLRVF1yVSXQDleL8vEFCaZyrz/POv9DX0sTfohXCYzL8pElFnLufeI - v6mPpwWBnadmXpUFfpBJptiAu7pEOtwJ4TCBfSwLepyRpS0245YuVT0U9ynEDHWzfzFpEtTdbV2uWhBz - id3dLAt0UktGEPWSIWYtBubc89FAJzGtodet3d2+LlsNBDGNoFV+JaClVggnM+eeInAQ5ITGGm963s/p - stXA3XGWjGzorb+EoDPilzcDBC1GkSOBlxnNIGd+Ly5aJQScx4C8fyYNQd2RKIpMjQY/atTMNzbkoj5W - DZIZROQE/Lvp3HIjhEM6NAx+juBD5v4qE8Mx2xrdiEogMytyzAh0WV1/heP4hLk7+8Xg+4BvRqdUiwjq - EdR8CEfUNRay+kg2IRrdjKN2VYeqh0YQM9RxbkFdY+k6NxDEmzfd7Lq60yDb21uhNqRN/6SG7qv7QJj3 - GNvBvpCZjrrTQZoCovL4PYMoXv8XShsDPu6k2BTIzA/snI6kCcHmcoykyCVTfH0e16Ghto2Qr2TmtA6l - y5RkSi9WjlPIQrjX3t4+pmIWESKX5jt+M30kfRAyTZNYLUQh4EHMDP/JyiZirunU+nCFDHCvrFErg7aM - SWb6dRRTIJ8PNIh5shKtVsfMMAzDMAzDMAzDMP6TRuMPQgpeMRJaGtkAAAAASUVORK5CYII= - - - \ No newline at end of file diff --git a/LocalStorage.cs b/LocalStorage.cs index 23347a3..a891be3 100644 --- a/LocalStorage.cs +++ b/LocalStorage.cs @@ -73,21 +73,9 @@ public static string GetAccessToken() return _accessToken; } - public static string GetRefreshToken() - { - string _refreshToken = ReadStorage("refreshToken"); - - return _refreshToken; - } - public static string SetAccessToken(string accessToken) { return WriteStorage("accessToken", accessToken); } - - public static string SetRefreshToken(string refreshToken) - { - return WriteStorage("refreshToken", refreshToken); - } } } diff --git a/Login.Designer.cs b/Login.Designer.cs index f0f71db..d9ce2cf 100644 --- a/Login.Designer.cs +++ b/Login.Designer.cs @@ -28,45 +28,32 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges8 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges9 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges10 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges11 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges12 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges13 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges14 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - cpbLogo = new Guna.UI2.WinForms.Guna2CirclePictureBox(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges2 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges3 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Login)); tbUsername = new Guna.UI2.WinForms.Guna2TextBox(); tbPassword = new Guna.UI2.WinForms.Guna2TextBox(); lbForgetPassword = new Guna.UI2.WinForms.Guna2HtmlLabel(); btLogin = new Guna.UI2.WinForms.Guna2Button(); lbRegister = new Guna.UI2.WinForms.Guna2HtmlLabel(); guna2HtmlLabel2 = new Guna.UI2.WinForms.Guna2HtmlLabel(); - ((System.ComponentModel.ISupportInitialize)cpbLogo).BeginInit(); + pictureBox1 = new PictureBox(); + label1 = new Label(); + label2 = new Label(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); SuspendLayout(); // - // cpbLogo - // - cpbLogo.Anchor = AnchorStyles.None; - cpbLogo.BackColor = SystemColors.ButtonHighlight; - cpbLogo.FillColor = Color.Gainsboro; - cpbLogo.ImageRotate = 0F; - cpbLogo.Location = new Point(356, 29); - cpbLogo.Margin = new Padding(4, 3, 4, 3); - cpbLogo.Name = "cpbLogo"; - cpbLogo.ShadowDecoration.CustomizableEdges = customizableEdges8; - cpbLogo.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - cpbLogo.Size = new Size(174, 141); - cpbLogo.TabIndex = 10; - cpbLogo.TabStop = false; - // // tbUsername // tbUsername.Anchor = AnchorStyles.None; tbUsername.BorderRadius = 12; tbUsername.Cursor = Cursors.IBeam; - tbUsername.CustomizableEdges = customizableEdges9; - tbUsername.DefaultText = "Tên đăng nhập"; + tbUsername.CustomizableEdges = customizableEdges1; + tbUsername.DefaultText = ""; tbUsername.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbUsername.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbUsername.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -74,25 +61,28 @@ private void InitializeComponent() tbUsername.FillColor = Color.FromArgb(224, 224, 224); tbUsername.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); tbUsername.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + tbUsername.ForeColor = Color.Black; tbUsername.HoverState.BorderColor = Color.FromArgb(94, 148, 255); - tbUsername.Location = new Point(299, 200); + tbUsername.Location = new Point(299, 182); tbUsername.Margin = new Padding(4, 5, 4, 5); tbUsername.Name = "tbUsername"; tbUsername.PasswordChar = '\0'; tbUsername.PlaceholderForeColor = Color.Gainsboro; tbUsername.PlaceholderText = ""; tbUsername.SelectedText = ""; - tbUsername.ShadowDecoration.CustomizableEdges = customizableEdges10; + tbUsername.ShadowDecoration.CustomizableEdges = customizableEdges2; tbUsername.Size = new Size(289, 39); tbUsername.TabIndex = 11; + tbUsername.Enter += tbUsername_Enter; + tbUsername.Leave += tbUsername_Leave; // // tbPassword // tbPassword.Anchor = AnchorStyles.None; tbPassword.BorderRadius = 12; tbPassword.Cursor = Cursors.IBeam; - tbPassword.CustomizableEdges = customizableEdges11; - tbPassword.DefaultText = "Mật khẩu"; + tbPassword.CustomizableEdges = customizableEdges3; + tbPassword.DefaultText = ""; tbPassword.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbPassword.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbPassword.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -100,15 +90,16 @@ private void InitializeComponent() tbPassword.FillColor = Color.FromArgb(224, 224, 224); tbPassword.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); tbPassword.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + tbPassword.ForeColor = Color.Black; tbPassword.HoverState.BorderColor = Color.FromArgb(94, 148, 255); tbPassword.Location = new Point(299, 250); tbPassword.Margin = new Padding(4, 5, 4, 5); tbPassword.Name = "tbPassword"; - tbPassword.PasswordChar = '\0'; + tbPassword.PasswordChar = '●'; tbPassword.PlaceholderForeColor = Color.Gainsboro; tbPassword.PlaceholderText = ""; tbPassword.SelectedText = ""; - tbPassword.ShadowDecoration.CustomizableEdges = customizableEdges12; + tbPassword.ShadowDecoration.CustomizableEdges = customizableEdges4; tbPassword.Size = new Size(289, 39); tbPassword.TabIndex = 12; // @@ -116,14 +107,14 @@ private void InitializeComponent() // lbForgetPassword.Anchor = AnchorStyles.None; lbForgetPassword.BackColor = Color.Transparent; - lbForgetPassword.Font = new Font("Microsoft Sans Serif", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + lbForgetPassword.Font = new Font("Microsoft Sans Serif", 10F); lbForgetPassword.ForeColor = SystemColors.Highlight; lbForgetPassword.Location = new Point(299, 304); lbForgetPassword.Margin = new Padding(4, 3, 4, 3); lbForgetPassword.Name = "lbForgetPassword"; - lbForgetPassword.Size = new Size(104, 20); + lbForgetPassword.Size = new Size(111, 18); lbForgetPassword.TabIndex = 13; - lbForgetPassword.Text = "Quên mật khẩu"; + lbForgetPassword.Text = "Forgot password?"; lbForgetPassword.TextAlignment = ContentAlignment.MiddleCenter; lbForgetPassword.Click += lbForgetPassword_Click; // @@ -132,7 +123,7 @@ private void InitializeComponent() btLogin.Anchor = AnchorStyles.None; btLogin.Animated = true; btLogin.BorderRadius = 12; - btLogin.CustomizableEdges = customizableEdges13; + btLogin.CustomizableEdges = customizableEdges5; btLogin.DisabledState.BorderColor = Color.DarkGray; btLogin.DisabledState.CustomBorderColor = Color.DarkGray; btLogin.DisabledState.FillColor = Color.FromArgb(169, 169, 169); @@ -143,10 +134,10 @@ private void InitializeComponent() btLogin.Location = new Point(373, 353); btLogin.Margin = new Padding(4, 3, 4, 3); btLogin.Name = "btLogin"; - btLogin.ShadowDecoration.CustomizableEdges = customizableEdges14; + btLogin.ShadowDecoration.CustomizableEdges = customizableEdges6; btLogin.Size = new Size(158, 40); btLogin.TabIndex = 14; - btLogin.Text = "Đăng nhập"; + btLogin.Text = "Submit"; btLogin.Click += btLogin_Click; // // lbRegister @@ -155,12 +146,12 @@ private void InitializeComponent() lbRegister.BackColor = Color.Transparent; lbRegister.Font = new Font("Microsoft Sans Serif", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); lbRegister.ForeColor = SystemColors.Highlight; - lbRegister.Location = new Point(481, 412); + lbRegister.Location = new Point(484, 412); lbRegister.Margin = new Padding(4, 3, 4, 3); lbRegister.Name = "lbRegister"; - lbRegister.Size = new Size(61, 22); + lbRegister.Size = new Size(63, 22); lbRegister.TabIndex = 15; - lbRegister.Text = "Đăng ký"; + lbRegister.Text = "Register"; lbRegister.TextAlignment = ContentAlignment.MiddleCenter; lbRegister.Click += lbRegister_Click; // @@ -173,40 +164,75 @@ private void InitializeComponent() guna2HtmlLabel2.Location = new Point(331, 412); guna2HtmlLabel2.Margin = new Padding(4, 3, 4, 3); guna2HtmlLabel2.Name = "guna2HtmlLabel2"; - guna2HtmlLabel2.Size = new Size(140, 22); + guna2HtmlLabel2.Size = new Size(149, 22); guna2HtmlLabel2.TabIndex = 16; - guna2HtmlLabel2.Text = "Chưa có tài khoản?"; + guna2HtmlLabel2.Text = "Don't have account?"; guna2HtmlLabel2.TextAlignment = ContentAlignment.MiddleCenter; // + // pictureBox1 + // + pictureBox1.Image = Properties.Resources.fundrawLogo; + pictureBox1.Location = new Point(0, 20); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(894, 131); + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox1.TabIndex = 17; + pictureBox1.TabStop = false; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 12F); + label1.Location = new Point(299, 156); + label1.Name = "label1"; + label1.Size = new Size(81, 21); + label1.TabIndex = 18; + label1.Text = "Username"; + // + // label2 + // + label2.AutoSize = true; + label2.Font = new Font("Segoe UI", 12F); + label2.Location = new Point(299, 224); + label2.Name = "label2"; + label2.Size = new Size(76, 21); + label2.TabIndex = 19; + label2.Text = "Password"; + // // Login // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; BackColor = SystemColors.ControlLightLight; ClientSize = new Size(894, 440); + Controls.Add(label2); + Controls.Add(label1); Controls.Add(guna2HtmlLabel2); Controls.Add(lbRegister); Controls.Add(btLogin); Controls.Add(lbForgetPassword); Controls.Add(tbPassword); Controls.Add(tbUsername); - Controls.Add(cpbLogo); + Controls.Add(pictureBox1); + Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; Name = "Login"; Text = "Login"; - ((System.ComponentModel.ISupportInitialize)cpbLogo).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); ResumeLayout(false); PerformLayout(); } #endregion - - private Guna.UI2.WinForms.Guna2CirclePictureBox cpbLogo; private Guna.UI2.WinForms.Guna2TextBox tbUsername; private Guna.UI2.WinForms.Guna2TextBox tbPassword; private Guna.UI2.WinForms.Guna2HtmlLabel lbForgetPassword; private Guna.UI2.WinForms.Guna2Button btLogin; private Guna.UI2.WinForms.Guna2HtmlLabel lbRegister; private Guna.UI2.WinForms.Guna2HtmlLabel guna2HtmlLabel2; + private PictureBox pictureBox1; + private Label label1; + private Label label2; } } \ No newline at end of file diff --git a/Login.cs b/Login.cs index 216d95f..7b8a5da 100644 --- a/Login.cs +++ b/Login.cs @@ -11,6 +11,8 @@ using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; using FunDraw; +using System.Diagnostics; +using static System.Net.Mime.MediaTypeNames; namespace FunDraw { public partial class Login : Form @@ -18,6 +20,27 @@ public partial class Login : Form public Login() { InitializeComponent(); + AuthenticateCheck(); + } + + private async void AuthenticateCheck() + { + string accessToken = LocalStorage.GetAccessToken(); + if (accessToken != null && accessToken != string.Empty) + { + Types.UserProfile profile = await Session.GetUserProfile(); + if (profile != null) + { + Session.username = profile.Username; + Session.accessToken = accessToken; + + FormState.MainMenuForm(); + this.Close(); + return; + } + } + + LocalStorage.SetAccessToken(string.Empty); } private void lbForgetPassword_Click(object sender, EventArgs e) @@ -28,19 +51,14 @@ private void lbForgetPassword_Click(object sender, EventArgs e) private async void btLogin_Click(object sender, EventArgs e) { - if (await Session.Login(tbUsername.Text, tbPassword.Text)) + string username = tbUsername.Text; + string password = tbPassword.Text; + + bool login = await Session.Login(username, password); + if (login) { - JObject result = await Session.GET("users/profile", ""); - if (result != null) - { - MessageBox.Show("Login successful", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - Form1 form1 = new Form1(); - form1.ShowDialog(); - } - else - { - MessageBox.Show("Login failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } + FormState.MainMenuForm(); + this.Close(); } else { @@ -53,5 +71,15 @@ private void lbRegister_Click(object sender, EventArgs e) Register register = new Register(); register.ShowDialog(); } + + private void tbUsername_Enter(object sender, EventArgs e) + { + + } + + private void tbUsername_Leave(object sender, EventArgs e) + { + + } } } \ No newline at end of file diff --git a/Login.resx b/Login.resx index 21d3f7b..a5c6363 100644 --- a/Login.resx +++ b/Login.resx @@ -120,258 +120,699 @@ - AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA - AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqamoYYmJigl1d - XcJeXl7AYWFhqGJiYopiYmJwZGRkXGZmZktlZWU/YGBgNWVlZStlZWUmaWlpImZmZh5kZGQcampqGGpq - ahhtbW0VbW1tFWRkZBdqamoYampqGGJiYhpmZmYeaWlpImZmZihgYGAtXl5eNmZmZkFiYmJRYmJiYGJi - YnJjY2ONYWFhtV9fX8FiYmKSZWVlNYCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABiYmKUXFxc/FxcXP9cXFz/XFxc/1xcXP9cXFz+XV1d+lxcXPdcXFz0XV1d8V1dXeteXl7nXl5e5F1d - XeFdXV3eXV1d211dXdtdXV3ZXV1d2V5eXtpdXV3bXV1d211dXd1dXV3gXl5e5F1dXeldXV3tXV1d8l1d - XfRdXV34XFxc+1xcXP5cXFz/XFxc/1xcXP9cXFz+Xl5e52hoaFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAICAgAZeXl7YXl1b/2ZnVf9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/a2tT/2tr - U/9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/amtT/2lqVP9palT/aWpU/2pr - VP9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/a2tU/2NkV/9cXFz/XFxc/19fX9VtbW0VAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAZmZlralJY7/6+yKv+ztSn/s7Yp/7O2Kf+ytin/srYp/7K1 - Kf+ztin/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztin/s7Uq/7G0 - Kv+xtCn/sbQp/7G0Kv+ytSn/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztir/s7Yq/6mrL/92eEz/XFxc/11d - Xe9nZ2cvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZmQWVlj7Zubwm/7u+Jf+7viX/u74l/7u+ - Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7q9Jf+6vSX/ubwk/7i7 - Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/6Wo - If+qrSv/Z2hV/11dXe1lZWUrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa2bQe4uyrbu74l/7u+ - Jf+7viX/ubwl/7S3JP+vsiL/qawi/6SnIf+foiH/nJ8g/5iaHv+XmR//lJcf/4+RHf+LjRz/iIoc/4SG - Gv+DhRv/h4ob/5ibIP+6vST/u74l/7u+Jf+6vST/ub0k/7a4I/+wsyP/qawi/6KkIP+cniD/qash/7u+ - Jf+7viX/tLck/6epIf+lqCT/cnNP/11dXepmZmYjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANXV - gAa7vSnau74l/7u+Jf+7viX/p6oh/5ibH/+dnyD/o6Yh/6iqI/+nqiL/qKsi/6utIf+jpSH/oKMg/6Ci - If+goiH/nqAg/5yeH/+cniD/m50g/5qcH/+XmR7/kpQe/5OVHv+Skx7/jo8c/42OHP+TlB3/mpwg/6Gj - If+lqCH/sbQj/7u+Jf+qrCH/i40c/7S3JP+3uib/dXdO/11dXedqamodAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9wCzTu74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7q9 - Jf+Zmx//kpQe/5udH/+mqCH/r7Ij/7O2I/+0tyP/trkk/7a6JP+4uyT/uLsk/7m8Jf+6vSX/u74l/7u+ - Jf+7viX/u74l/7u+Jf+7viX/u74l/7e6JP+KjB3/t7ok/7u+Jf+4uyb/eHlM/15eXuRkZGQXAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8vy3Ou74l/7u+Jf+7viX/sbQj/6qtIv+oqyP/p6oj/6Ol - IP+eoiH/nqEg/6CjIP+cnx//lZce/7W4JP+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7m8 - JP+3uiT/s7Yk/6+yJf+srif/q60u/6qsNf+nqDn/oKE7/4OFHf+vsSL/u74l/7u+Jf+5vCb/entL/19f - X9tra2sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wC3Cu74l/7u+Jf+7viX/qKoh/6Gj - If+prCL/tLck/7e6JP+3uiP/t7oj/7i7JP+4uyX/uLsk/7m8JP+1uCT/rbAj/6OmI/+dnif/mZsu/5ma - O/+Yl03/j45a/5CMaf+emYH/trGl/7+5u//AuMT/y8LT/9zR5f/l2vD/0sje/4yNK/+7viX/u74l/7u+ - Jf+5vCb/fH1L/2FhYdBmZmYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wC+6u74l/7u+ - Jf+7viX/uLwl/52eLP+lpUT/qKdQ/6+uYf+wrm7/q6h0/66qgf+1r5H/trGf/7avqP+7s7P/yL/F/9LJ - 1v/Vyt//2Mzk/9/U7P/o3Pb/69/6/+3g+v/t4Pv/7eD7/+3g+//t4Pv/7eD7/+7h+//u4fv/3tPs/4mJ - N/+7viX/u74l/7u+Jf+5vCb/fn9I/2FhYc5tbW0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC+wSysu74l/7u+Jf+7viX/s7Yk/4eBbP/q3vj/69/5/+zf+f/s3/r/7N/6/+3g+//t4Pv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/5dr0/+nd - 9//u4fv/59v1/4GARP+7viX/u74l/7u+Jf+5vCb/f4FH/2BgYMV0dHQLAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC8wCyhu74l/7u+Jf+7viX/tbgk/4R/Z//t4Pr/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+HW - 7/+XkKL/OTU+/7uzyP/u4fv/69/5/3Z1Tf+6vSX/oKMh/7S3JP+6vSb/goRG/19fX79xcXEJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vSyeu74l/7u+Jf+7viX/t7ok/397X//t4Pr/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//r3/n/v7bM/zc1Pf8HBgr/LSsz/+TY8f/u4fv/7eD6/3l2XP+4uyT/jpEf/62vIv+6vSX/hohD/19f - X7tgYGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vi+Zu74l/7u+Jf+vsiP/tbgk/3x5 - Wf/t4Pr/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7eH7/9jN5P9oY3D/GRge/wcGCv8HBgr/bml3/+3g+v/u4fv/7eD7/4WCcf+0tyT/kJMe/6qt - Iv+6vSX/iotB/19fX7tgYGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vy2Pu74l/7u+ - Jf+RlCD/sLMj/3x5Vf/s3/r/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/3tLr/4KAiP9bWl3/EREU/wcGCv8PDhP/t67E/+3g+//u4fv/7uD7/5WQ - i/+vsiP/k5Qd/6irIv+7viX/jY4//19fX7tgYGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC8wDCFu74l/7u+Jf+RlCD/sLMj/3x6Uf/s3/n/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//g1O3/WFVg/woLD/8xMTT/YWBj/01MT/83NTz/39Tt/+7h - +//u4fv/7uD7/6afpf+rriP/lpcd/6iqIf+7viX/kJE+/19fX8FmZmYKAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC7vy+Du74l/7u+Jf+SlB7/r7Ii/357T//r3/n/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+vf+P+HgpD/CwwO/wYHC/8GBwv/CQoO/0xM - UP/IwdD/7N/6/+7h+//u4fv/7uD7/7WuvP+oqyP/mZsf/6apIf+7viX/kpQ8/19fX8JmZmYKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+wDB1u74l/bu+Jf+Qkh3/rbAi/39+Tf/r3/j/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/69/5/5uUpv8VFRj/BwcI/wYH - Cf8xMjP/Tk5Q/396iP/o2/T/7uH7/+7h+//u4fv/7uD7/7mxw/+nqSX/n6Ef/6SmIf+7viX/lZc7/19f - X8R0dHQLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8wC5uu74l/Lu+Jf+Qkh7/rbAj/4OC - TP/r3vj/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//t4Pv/wrjP/yAg - Jf8GBgn/CAcI/xwcHP+qqab/g36H/+ba8v/u4fv/7uH7/+7h+//u4fv/7uH7/760x/+mqCb/pKch/6Kk - IP+7viX/mJo5/2FhYc5tbW0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wDBlu74m+7u+ - Jf+PkR3/rbAi/4aFTP/q3vf/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//SyN//NzU9/wgHC/8HBgr/CgoN/319e/94dXr/1Mng/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/8G5 - zf+mqCj/qq0h/5+hIP+7viX/m542/2JiYtF3d3cPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADAwy9du74m+ru+Jf+NkB//rrEj/4iHSv/p3fb/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+HV7v9VUVz/BwYJ/wcGCv8LCg7/aGdn/42Lj//PxNr/7eD6/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/8e+1P+nqSz/r7Ej/5udH/+7viX/oKM0/19fX9txcXESAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC7vixWu74l+bu+Jf+PkR//sbQj/4mGRf/o2/T/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/6975/395iP8NDBH/BwYK/wYGCf9KSkv/f35+/7Couv/s3/n/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/8/G2/+nqS//s7Yl/5eaH/+7viX/pagy/2BgX+JoaGgWAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vixSu74l+Lu+Jf+PkR//srUj/4aGQ//n2vP/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//s3/n/nZao/wwMEP8HBgr/BwcL/y4uMP+WlZT/pJys/+3g - +v/u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/9jN5P+nqTL/tbgk/5OVHv+7viX/qasv/15e - XedoaGgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6vi5Ou74l+Lu+Jf+NkB//tbck/4aG - QP/l2fH/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7g+//b0uj/bmxz/woJDv8GBgr/LSwt/5ST - kv+Hgoz/5trz/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/9/U6/+lpjT/trkj/5SW - Hf+7viX/q64u/15eXOlkZGQhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+vjBKvL4m97u+ - Jf+OkB//tLck/4qKPf/k2PD/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+DU7P9JR1D/TkxS/3Nx - dv8rKS7/WllZ/397g//k2PD/7eD7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+TZ - 8f+ipDb/trkk/5SWH/+7viX/rbAt/2BgW+xmZmYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC+wjFDvL8m9ru+Jf+Pkh7/tLck/4yMOv/h1e7/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/7qx - xf8JCAz/BwYL/xoaHv9eXGH/jouT/9jN4//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+fc9f+goTn/t7oj/5OVHv+7viX/r7Is/2FiW+9qamowAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC8vDNBu74m9ru+Jf+Qkx//s7ck/4uLNv/e0+v/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+ba9P+PiJj/KScu/wgHC/8vLTT/0cjf/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+nd9v+foDv/t7ok/5KUHf+7viX/sbQr/2RkWfNjY2M7AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wTA6u74m87u+Jf+SlSD/s7Yk/4uLM//d0en/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7eD7/+zg+v/r3/j/0MXc/5SNnf/JvtT/7eD6/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+re+P+enz3/uLsk/5OVHv+7viX/s7Yp/2Zn - V/djY2NIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vzI4vL8m8ru+Jf+TlR//sbQj/4yN - MP/bz+f/7uH7/+7h+//u4fv/7uH7/+7h+//t4Pv/oJms/zQzO/9bV2P/49fw/+3g+v/u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+rf+P+cnD//ubwl/5CS - Hf+7viX/tbko/2trVflhYWFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6vzs0u74n8bu+ - Jf+TlR7/r7Ij/4+QLv/ZzeX/7uH7/+3g+//t4Pv/7eD7/+7h+//p3fb/NjQ9/wYHC/9QTln/5dny/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf - +P+cm0P/ubwl/42PHP+7viX/uLsn/29vU/tjY2NnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADBwTMtvL8n7ru+Jf+Tlh7/rbAi/5GSLf/WzOP/7eD7/6Wesf9ybXv/cGt5/+DU7f/r3vj/SUZQ/wYH - C/+hmqz/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+zf+f+enUj/ubwl/42PHf+7viX/ubwl/3FyT/5hYWF7AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADDwy8mu74l67u+Jf+Qkh7/qqwi/4+RKP/VyuH/3dHq/yAfJP8LDBD/CAkN/6We - sP/u4fv/p5+z/wsMEP9MSVP/59v0/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+vf+v+goVD/ubwl/4yNHf+6vST/ur0k/3Z3TP9hYWGQAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/vzIkur0l67u+Jf+SlB7/qasi/46QJf/Sx97/wrnO/w4O - Ef8ICQ7/a2d1/93R6//u4fv/2M3l/x8eIv8XFhv/w7nP/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf+f+kolv/ur0l/4qMHP+6vSX/ur0k/3l6 - Sv9hYWGuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDwzsevL4l6Lu+Jf+TlR//qKoh/4yP - H//PxNr/5tv0/ywrMP8QERT/1Mng/+7h+//t4Pv/yL/U/xcXGP8NDA//pZyv/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf+f+komT/ur0l/4iJ - HP+6vSX/ur0k/35/R/9hYWHP////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExDsau78n5ru+ - Jf+Tlh7/pqkh/5GTHv/Lwdb/7eD7/5qSo/8RERL/aGNv/6+muv+UjJz/MC4z/wgICP8VFBj/u7HF/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf - +v+koGv/ur0l/4eIG/+6vSX/ur0l/4SGRP9eXl7fgICADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC/vzUYu70o5bu+Jf+Ulx7/pagg/5ueIP/Jv9D/7uH7/+zf+f+ooLL/Hx4g/wkJCf8ICAj/CAgI/wsL - C/9wa3j/6d32/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//t4Pv/7OD7/+vf+v+koXD/u74l/4iKHP+5vCX/ur0l/4qMQv9dXV3ua2trHwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC5uToWu78q4ru+Jf+XmR7/o6Uh/6OlIf+7sbz/7uH7/+7h+//t4Pr/z8Tb/4+I - mP9qZXD/cGt2/6uitf/n2/X/7eD7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zg - +//s4Pv/7eD7/+3g+//t4Pv/6t/6/+nf+v+monr/ur0l/4mLHP+1uCT/u74l/5GTPP9dXVz8ampqPAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDwzwRvL8q1ru+Jf+cnh//oqUg/66wI/+wp6v/7eH7/+3h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7eH7/+3h+//t4fv/7eD7/+vg - +//t4Pv/6+D7/+ng+//r3/r/6975/+ve+P/q3ff/6Nz0/+bb8v+ppYD/u74l/4qMHP+ytCP/u74l/5eZ - Of9cXFz/aWlpZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2tkkOvb8szLu+Jf+0tyP/tbgk/7S3 - JP+qpKL/6N/7/+3g+//t4Pv/7eH7/+7h+//u4fv/7eD7/+7h+//u4fv/7eD7/+7h+//t4Pv/6t74/+DV - 7v/Wy+P/0cfb/8jAy/+6srX/r6ii/62nlv+ppIT/pKFy/6WiZv+lpFn/oaFJ/6CfPf+ipC3/u70l/42O - HP+tsCP/u74l/5qdN/9dXVv/ZGRkkgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50UYLvL8qxru+ - Jf+7viX/u74l/7i8JP+po5z/6N33/+jc9v/n2/T/5Nnw/+PX7P/e1Ob/0cjW/8G5wv+6srT/sKqe/5yX - fP+LiF7/i4lL/5OTPP+XmC3/m50l/6SnIv+vsiP/t7ok/7q9Jf+6vSX/u74l/7u+Jf+7viX/u74l/7u+ - Jf+7viX/u74l/5+hIP+wsyL/ur4l/5yfN/9dXVv/X19fs21tbQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC220kHu8Apubu+Jf+7viX/u74l/7S3I/+LilD/rKhw/6upY/+sq1j/qKhJ/6WlPf+oqTb/q60w/6yu - Kf+tsCX/srQj/7a5JP+5vCT/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+ - Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/5+hNf9eXlv/YGBgz2ZmZg8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC/v4AEu74qsbu+Jf+7viX/s7Yk/4SGHP+xtCT/u74l/7u+Jf+7viX/u74l/7u+ - Jf+6vSX/uLsl/7e6JP+2uST/tbgj/7S2I/+xtCL/sLMj/62wIv+mqCD/nJ4f/5WXHv+Rkx3/kpMf/6qs - Iv+6vSX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/6OkMv9fX1r/X19fwXR0 - dAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4ACvcArq7u+Jf+4uyT/kpQe/6+yI/+nqSH/oaMg/5ud - IP+TlR7/j5Ad/46PHv+Ojx3/j5Ee/5CSHf+SlR7/lpge/5mbH/+bnB//nZ8g/5+iIP+ipSH/pqkh/6qt - Iv+usSL/s7Yj/7m8JP+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7vSX/ubwk/6ao - MP9jY1rwZ2dnVAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvL8ykKywIv+LjR3/paki/7W4 - I/+WmB7/mZsf/6CjIP+prCL/sLMj/7S3JP+1uCT/trgk/7W5JP+2uST/trkk/7a5JP+2uST/tbgk/7W4 - JP+1uCT/tbgk/7S3JP+0tyT/tbgk/7a5JP+0tyT/tLck/7S3JP+0tyT/tLgk/7S3JP+0tyT/tLck/7W3 - JP+qrSL/pagh/7CzL+B1eGBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv79AKK6x - J+WWmSD/m58f/5qcH/+cniD/mp0f/5ueHv+cnyD/m54g/5udIP+anSD/mJoe/5qcIP+anSD/mp0g/5ud - IP+anR7/mZwf/5qcH/+ZnB7/m50f/5qcH/+Ymh7/m50f/5yfH/+Ymh//l5kf/5eZH/+Xmh7/mZwf/5ue - IP+anR//m54g/56gIP+goyH/trkk/MDDNnL//wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAL/CNlC8vyrKur0m3bq+J966vifeu78n3ru/J967vyfeu78n3ru/J967vyfeu78n3ru/ - J967vyfeu78n3ru/J967vyfeu78n3ru/J967vyfeu78n3ru/J967vyfeu78n3ru/J967vyfeur4n3rq+ - KN66vijeu74n3ru/J967vybeu78n3ru/J968vyjYvsIyidXVVQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAG7zEQPuro7Gr29ORu9vTkbvcY5G73GORvGxjkbvcY5G73G - ORu9xjkbvcY5G73GORu9xjkbvcY5G73GORu9xjkbvcY5G73GORu9xjkbvcY5G73GORvGxjkbvcY5G73G - ORu9xjkbvcY5G729Qhu9vUIbvcY5G73GORu9xjkbvcY5G73GORu8yDcXzMwzBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPAAAAAAHwAA8AAAAAAfAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAA - AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP - AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA - AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP - AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAHAADwAAAAAAcAAPAA - AAAABwAA8AAAAAAHAADwAAAAAAcAAPAAAAAAAwAA8AAAAAADAADwAAAAAAMAAPAAAAAAAwAA8AAAAAAD - AAD4AAAAAA8AAPgAAAAADwAA/AAAAAAfAAD8AAAAAD8AACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgICAAmNjXjZfX123XV1c6F5eXeJfX13UXl5cxF9fXrNfX16mY2NflmNj - X4liYmCAYmJgeGBgXnVjY2FxYWFfdGBgXndhYV98YWFfhmBgX5RfX16jX19csWBgXcBeXl3RXV1c4F5e - XOVeXl6wX19fPkBAQAQAAAAAAAAAAAAAAABVVVUJZGRba2lqVfRyc07/dXZM/3V2TP91dkz/dXZM/3V2 - TP91dkz/dXZM/3V2TP91dkz/dXZM/3V2TP91dkz/dXVM/3R1Tf90dU3/dHVN/3V2TP91dkz/dXZM/3V2 - TP90dU3/bG5R/2BhWvpeXl6bXl5eGwAAAAAAAAAAAAAAAICATQqIiEdvnJ4297CyKv+ytSn/srUp/7Cz - Kf+wsyj/sLMo/6+yKP+vsij/rrEo/66xKP+tsCj/rbAo/6+yKP+ytSn/srQp/7G0Kf+xtCn/sbQp/7Cz - Kf+wsyj/srUp/7G0Kf+foTD/d3hJ/2FhXLZiYmInAAAAAAAAAAAAAAAAs7MzCrO1Lm+4uyf3ur0l/7K1 - I/+tryL/ra8j/62vIv+rriL/qqwi/6eqIf+lqCH/o6Yg/6GkIP+goiD/p6kh/66wIv+tryL/q60h/6ms - If+prCH/qqwi/66wIv+5vCT/sLIi/6irJP+KjDz/ZWVYsGNjYyQAAAAAAAAAAAAAAADGxjkJu8Aqbbu+ - Jfa6vST/s7Yj/66xI/+vsiP/sLMj/66xIv+nqSH/mZwf/5yeIP+foiD/oKMg/6KlIP+nqSH/qash/6ms - If+qrSH/qqwh/6yuIv+usCP/sbQj/6+xIv+jpiD/sbQk/5OVOv9paVeoYGBgIAAAAAAAAAAAAAAAAL+/ - QAi9vypou74m9Lq9JP+wsyP/qawi/6msIv+mqCH/pagg/6OlIP+goyD/ra8i/7G0I/+wsyT/sLMl/7G0 - Kf+wsy3/sLIx/7K0OP+yskD/sbFJ/7OyVP+urVn/m5wt/7GzI/+4uyb/l5k6/mtsVqBbW1scAAAAAAAA - AAAAAAAAttskB7y/KWO7vibxur0k/7GzJP+oqiz/q6w2/6ytP/+pqUf/qalR/6yqXv+vrGr/t7R6/765 - jP/Aupf/x8Cl/8zFs//Oxrr/1MvF/9fOzv/a0NX/39Tc/9nP2f+ko07/ur0l/7m8Jv+Zmjj9bW1Umlxc - XBkAAAAAAAAAAAAAAADV1SoGvL8qXLu+Ju27viX/rK0t/7mymP/Uy9D/3dLd/9/U5P/i1+n/59vw/+nd - 8v/q3fP/6t71/+re9v/s3/f/69/4/+zf+f/s4Pn/69/4/9jM5f/h1e7/6dz2/6elYf+6vST/uLsl/5qc - OPxvcVSVZGRkFwAAAAAAAAAAAAAAAMzMMwW8vylXu78m6ru+Jf+srS//ycG3/+zf+f/u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/69/5/9nO5v+Xj6H/XFdk/8O5z//r3/n/pKFr/6+x - I/+rriL/nJ42+3FzUZBhYWEVAAAAAAAAAAAAAAAAmZkzBbm/K1S6vSbptrkk/6qrLf/Iv7T/7N/4/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+fb9f+9tMj/YFtn/xgXHP9RTln/1cri/+3g - +v+opXn/qawi/6aoIv+fojX6dnZOj2ZmZhQAAAAAAAAAAAAAAAC/v0AEu74qT7q+J+asryP/o6Ur/8e+ - sv/s3/j/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//q3ff/t63B/1tZYf82NTn/JSQo/4R+ - jv/i1u//7eD7/7Criv+nqSH/pach/6GkNPp4ek6QYWFhFQAAAAAAAAAAAAAAAKqqVQO7vixLur4m46ut - Iv+ipCr/xr6w/+zf+P/u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7eH7/8i+0/9NSlP/EhMW/y8u - Mv9lY2v/wbfM/+ve+P/t4Pv/t7Ga/6aoIf+kpiH/o6Uz+3l7TJNdXV0WAAAAAAAAAAAAAAAA//8AArzA - KUW7vifeqq0i/6KkKf/Hv6//7N/4/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7g+//XzeX/YFtn/xAQ - Ev8kJSb/Xlxh/6mhsv/m2fL/7uH7/+3g+/+7taL/pqkj/6OmIf+kpjL8fX9NlWRkZBcAAAAAAAAAAAAA - AACAgAACv78sQLy+J9iprCL/o6Up/8fArv/s3/j/7uH7/+7h+//u4fv/7uH7/+7h+//u4Pv/4dXu/3Vv - fv8TERb/GBga/2VjZv+up7T/4NTt/+7h+//u4fv/7uH7/763p/+nqiT/oqQg/6WnMP2AgUuaZmZmGQAA - AAAAAAAAAAAAAP//AAG+wic7u78n06qsIv+kpin/x8Cs/+zf+P/u4fv/7uH7/+7h+//u4fv/7uD7/+fb - 9f+QiJr/Gxkf/w0MD/9VU1b/oZum/93R6f/t4Pr/7uH7/+7h+//u4fv/w7yv/6mrJv+foR//qKov/oCC - SqFkZGQcAAAAAAAAAAAAAAAA//8AAby8KDm8viXQq64i/6WoKP/Fv6n/7N/4/+7h+//u4fv/7uH7/+7h - +//s3/n/q6O3/yspMf8IBwv/QD9C/5aRmf/XzOP/7eD6/+7h+//u4fv/7uH7/+7h+//Jwbf/qawo/5ye - H/+pqy7/g4RJqGNjYx8AAAAAAAAAAAAAAAAAAAAAwMArNby+Jc2rriL/p6ko/8W9pv/s3/f/7uH7/+7h - +//u4fv/7eD6/9DG3P93cn3/IyMn/zMyNP+Oio//zsPY/+3g+v/u4fv/7uH7/+7h+//u4fv/7uH7/8zE - vv+oqir/nZ8f/6qsLf+EhEewY2NcJAAAAAAAAAAAAAAAAAAAAAC+vigzu74ny6uuIv+nqif/xL2j/+zf - 9//u4fv/7uH7/+7h+//o3PX/joeX/zMxOP9EQ0j/ZmNp/8K4y//t3/r/7eD7/+7h+//u4fv/7uH7/+7h - +//u4fv/zsXD/6eqK/+eoR//qq0s/4SGSLlkZF0pAAAAAAAAAAAAAAAAAAAAAL+/KjC7vijHrK8i/6eq - Jv/Aup//69/3/+7h+//u4fv/7uH7/+fa9P+1rMH/Y15r/0dETf+2rsD/7N/4/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//Oxcb/p6kt/5+iIP+qrCv/hYZIxGVlYDAAAAAAAAAAAAAAAAAAAAAAt7wsLru9 - J8KrriL/p6ol/764m//r3vf/7uH7/+7h+//p3Pb/urDF/5CJmv+6scb/xrvS/+jb9P/u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/87FyP+nqC7/oaMg/6qtKv+FhkbPZGRbOAAAAAEAAAAAAAAAAAAA - AAC4viorur4ovauuIv+nqST/vbeY/+jb8//IvtX/wLbM/9nN5f9+eIj/SUZQ/8C2y//t4Pr/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/z8XL/6anMP+goiD/q60o/4eIRNpkZFlCgICAAgAA - AAAAAAAAAAAAALe+Lie7vie1qqwh/6WnI/+6tZT/xrzQ/0hFT/9OS1b/u7HH/46Gl/9KR1H/vLLH/+3g - +v/u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//TydH/pqc1/6CjIP+rrSf/h4hD5WVp - XE5AQEAEAAAAAAAAAAAAAAAAuL8rJLu+J7CprCH/o6Yi/7axkP+upbf/FRUZ/3Bqef/Zzeb/qqG0/zs4 - P/+Wjp//59v0/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/9jN2f+mpzv/oaMg/6qs - Jv+HiETuZ2dcXoCAgAYAAAAAAAAAAAAAAAC5uS4hvL8nqqmsIv+jpiD/s66J/9jN4v9KR0//dnB9/7+1 - yv9xbHj/Hx4h/4uDk//l2fL/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/29Df/6Wl - QP+ipCD/qawl/4aIQvdnZ1pvZmZmCgAAAAAAAAAAAAAAALvDKh67viimqawi/6SnIP+xrYH/6d30/8i+ - 1P9cWGH/Liww/x4dIP9RTVb/w7jP/+zf+f/u4fv/7uH7/+7h+//u4fv/7eD7/+3g+//t4Pv/7eD7/+zg - +v/b0eP/paRF/6OlIP+prCT/iYtB+2dnWoNmZmYPAAAAAAAAAAAAAAAAtr8uHLy+KKCsriL+qKsh/6ik - b//o3PL/7eD6/9/T7P+8ssf/tau//9bK4v/r3vn/7uH7/+3h+//s4Pr/6974/+nd9//o3PT/5tvy/+TZ - 7v/j2Ov/4Nbm/9LK0P+lpUf/o6Yh/6mrJP+LjED/ZmZZnWFhYRUAAAAAAAAAAAAAAAC/vyoYvL8omLW4 - I/yztiP/pKJj/+PZ7//p3Pb/5try/+XZ7v/j1+n/4NTk/97T3v/a0NX/187P/9PKxf/Px7v/y8Sx/8bA - pP/CvJn/vbiK/7m2ff+0sWz/rKpY/6mrLv+nqSD/qq0k/42PPv9nZ1m4XV1dHgAAAAAAAAAAAAAAALbC - MRW6vieRur0l+7i7JP+fn0r/x8Gn/8rEpP/FwJj/wr2M/7+8gf+7uHT/uLdo/7SyWv+ysU//sbFF/6+v - O/+urzT/ra8u/7CyKv+0tib/trkl/7i7JP+6vST/ubwl/7O1I/+ztiX/j5E9/2ZmWM5dXV0pAAAAAAAA - AAAAAAAAuLgrEru+J4q5vCX5q64i/6GjKP+urzj/ra8z/6utLf+qrCn/qKsm/6eqI/+nqSH/pqgh/6Wn - If+kpiD/o6Yg/6WnIP+prCH/s7Yj/7q9Jf+7viX/u74l/7u+Jf+7viX/ur0k/7i7Jf+SlDz+Z2dYw2Bg - YCUAAAAAAAAAAAAAAADIyDcOtbkogKirIvajpSD/o6Yg/6CiIP+hoyD/oqUg/6OmIf+kpiH/pKcg/6ao - If+nqSH/p6oh/6irIf+prCH/q60h/62wIv+ytSP/tLck/7S3JP+0uCT/tbgk/7W4JP+ytST/r7Ej/Zqd - NtVzc1JmYmJiDQAAAAAAAAAAAAAAAJnMMwWxtyhSpqgk1qKlIP2jpSD/oKMg/6GkIP+ipSH/oqUh/6Kk - IP+jpSH/o6Yh/6SnIP+kpyD/pKch/6WnIf+kpyH/pKch/6WoIf+jpiH/oqUh/6OmIf+lqCH/pagh/6iq - Iv6usCTpsrYtd5ShQxMAAAABAAAAAAAAAAAAAAAAAAAAAL+/Kgy3ui5DuLosc7e7LXy5vS18ub0tfLm9 - K3y5vSt8ub0rfLm9K3y5vSt8ub0rfLm9K3y5vSt8ub0rfLm9K3y5vSt8ub0rfLm7K3y7vS57ubstfLm9 - K3y5vSt8u70qeLq9LVW5xS4WAAAAAAAAAAAAAAAAgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AA - AAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA8AAAAPAAAADwAAAA8AAAAHAAAABwAAAAcAA - AAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAcoAAAAEAAAACAAAAABACAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbW1JB2RkWYdnZ1XwaWlV5WpqVdZsbFXHbGxUvWxsVLlsbFS6amxUwGpr - Vc1paVXcaGhV62JiWNthYVw6////AaqqOQmjpDSms7Yn/7G0Jv+wsyb/rK8l/6qtJf+prCX/sLIm/7K0 - Jv+wsyb/sbQm/6+yJv+Njjv+bXBSYEBAQASqxhwJur0mo7W4JP+rriT/qq0o/6KkK/+kpTD/qKk2/66u - Pf+wsEL/srJJ/7OzR/+vsC7/mpw0/np9TVZVVVUDv78gCLu+Jpq2uDD/t7Rk/8K9iP/Fv5L/zcad/9DJ - qP/UzLP/0sq5/8a+tf+/uKf/uLhU/6CiNPyBgUlNgICAAr+/IAi5vSaSt7hB/87Gs//r3vf/7eD6/+3g - +v/u4fv/6dz2/6yjtf9+eIf/v7e//7e2ZP+gojH7hYhGSYCAgAK2tiQHtrkni7KyP//QyLX/7uH7/+7h - +//u4fv/7eD6/6Wdr/9APkX/d3J//9TK2P+2s2r/oKIu+4aKRUqAgIAC1dUqBra4KIGwsT7/0cm0/+7h - +//u4fv/7eD7/8G3zf8sKjD/a2hu/8/E2v/i1+n/uLVv/6GjLf2JiUVOgICAAqqqKgaztyR5sLE9/9HJ - sv/u4fv/7uH7/9fM5P81Mjv/Tk1R/8zC1v/s3/n/5tnt/7m1dP+kpyz+hYhEVlVVVQPMzDMFtrgmc7Gx - PP/RybD/7uH7/+ve+P99d4X/RENH/8G4yf/t4Pr/7uH7/+fb8P+7t3j/pacr/4OGR2FAQEAEmZkzBba4 - KGywsTr/zcar/+nd9v/Wy+P/mZGj/6Obrf/t4Pr/7uH7/+7h+//n2/L/vLh7/6apKv+AgkhyZmZmBb+/ - QAS1uCZkr684/7WvkP+2rcL/kYqb/5aOoP/o2/X/7uH7/+7h+//u4fv/6Nzz/725fv+nqSn/foBGhm1t - SQeqqgADtLQkXKytNv+emnf/fniG/3Jtev+CfIv/6Nv0/+7h+//u4fv/7uH7/+nd9v+/u4X/p6kq/3t7 - SaBVVVUJqqoAA7a5JFStrzL+vriT/760yf+Xj5//tq3B/+re9//q3vj/59vy/+LW6v/b0dz/ubZ5/6iq - Kf94eUq9XV1dC///AAK5vCVMsrUt/Lq4dv/Ox7D/xL6a/8bBkf/FwIX/wb52/768av++vGD/vr5X/7e4 - O/+wsyb/eHpL2mBgUBCAgAACs7cmQ6yvJPmnqC3/qqs1/6iqMf+nqC3/pacp/6anJf+prCP/srUk/7a5 - JP+2uST/s7Yk/oKERLB0dEYLAAAAAKStJByrriWXqq0jvaqtI72qrSO9qa0jvamrI72qqyO9qq0jvaqu - JL2qrSS9q64kvbCzJaWoriwpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA= + 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 + vgAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/main_menu.Designer.cs b/MainMenu.Designer.cs similarity index 73% rename from main_menu.Designer.cs rename to MainMenu.Designer.cs index 11244c6..bfe8909 100644 --- a/main_menu.Designer.cs +++ b/MainMenu.Designer.cs @@ -1,7 +1,7 @@  namespace FunDraw { - partial class main_menu + partial class MainMenu { /// /// Required designer variable. @@ -41,22 +41,24 @@ private void InitializeComponent() Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges10 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges11 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges12 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges13 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainMenu)); shPlayer = new Guna.UI2.WinForms.Guna2Shapes(); btThamGia = new Guna.UI2.WinForms.Guna2Button(); - btHoSo = new Guna.UI2.WinForms.Guna2Button(); + profileBtn = new Guna.UI2.WinForms.Guna2Button(); tbMaPhong = new Guna.UI2.WinForms.Guna2TextBox(); btDangXuat = new Guna.UI2.WinForms.Guna2Button(); btTaoPhong = new Guna.UI2.WinForms.Guna2Button(); - cpbLogo = new Guna.UI2.WinForms.Guna2CirclePictureBox(); cpbAvatar = new Guna.UI2.WinForms.Guna2CirclePictureBox(); panel_main = new Panel(); - lbPlayer = new Guna.UI2.WinForms.Guna2HtmlLabel(); + pictureBox1 = new PictureBox(); + gatewayStatusLb = new Label(); + gatewayLb = new Label(); + lbPlayer = new TextBox(); lbDangChoi = new Guna.UI2.WinForms.Guna2HtmlLabel(); lbThamGia = new Guna.UI2.WinForms.Guna2HtmlLabel(); - ((System.ComponentModel.ISupportInitialize)cpbLogo).BeginInit(); ((System.ComponentModel.ISupportInitialize)cpbAvatar).BeginInit(); panel_main.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); SuspendLayout(); // // shPlayer @@ -98,29 +100,31 @@ private void InitializeComponent() btThamGia.ShadowDecoration.CustomizableEdges = customizableEdges3; btThamGia.Size = new Size(174, 42); btThamGia.TabIndex = 1; - btThamGia.Text = "Tham gia"; + btThamGia.Text = "Join"; + btThamGia.Click += btThamGia_Click; // - // btHoSo + // profileBtn // - btHoSo.Anchor = AnchorStyles.None; - btHoSo.Animated = true; - btHoSo.BackColor = Color.FromArgb(224, 224, 224); - btHoSo.BorderRadius = 12; - btHoSo.CustomizableEdges = customizableEdges4; - btHoSo.DisabledState.BorderColor = Color.DarkGray; - btHoSo.DisabledState.CustomBorderColor = Color.DarkGray; - btHoSo.DisabledState.FillColor = Color.FromArgb(169, 169, 169); - btHoSo.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); - btHoSo.FillColor = Color.FromArgb(160, 210, 235); - btHoSo.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - btHoSo.ForeColor = Color.Black; - btHoSo.Location = new Point(44, 329); - btHoSo.Margin = new Padding(4, 3, 4, 3); - btHoSo.Name = "btHoSo"; - btHoSo.ShadowDecoration.CustomizableEdges = customizableEdges5; - btHoSo.Size = new Size(144, 39); - btHoSo.TabIndex = 2; - btHoSo.Text = "Hồ sơ"; + profileBtn.Anchor = AnchorStyles.None; + profileBtn.Animated = true; + profileBtn.BackColor = Color.FromArgb(224, 224, 224); + profileBtn.BorderRadius = 12; + profileBtn.CustomizableEdges = customizableEdges4; + profileBtn.DisabledState.BorderColor = Color.DarkGray; + profileBtn.DisabledState.CustomBorderColor = Color.DarkGray; + profileBtn.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + profileBtn.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + profileBtn.FillColor = Color.FromArgb(160, 210, 235); + profileBtn.Font = new Font("Segoe UI", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + profileBtn.ForeColor = Color.Black; + profileBtn.Location = new Point(44, 329); + profileBtn.Margin = new Padding(4, 3, 4, 3); + profileBtn.Name = "profileBtn"; + profileBtn.ShadowDecoration.CustomizableEdges = customizableEdges5; + profileBtn.Size = new Size(144, 39); + profileBtn.TabIndex = 2; + profileBtn.Text = "Profile"; + profileBtn.Click += profileBtn_Click; // // tbMaPhong // @@ -128,7 +132,7 @@ private void InitializeComponent() tbMaPhong.BorderRadius = 12; tbMaPhong.Cursor = Cursors.IBeam; tbMaPhong.CustomizableEdges = customizableEdges6; - tbMaPhong.DefaultText = "Mã phòng"; + tbMaPhong.DefaultText = "Room code"; tbMaPhong.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbMaPhong.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbMaPhong.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -147,6 +151,7 @@ private void InitializeComponent() tbMaPhong.ShadowDecoration.CustomizableEdges = customizableEdges7; tbMaPhong.Size = new Size(174, 39); tbMaPhong.TabIndex = 8; + tbMaPhong.TextChanged += tbMaPhong_TextChanged; tbMaPhong.Enter += tbMaPhong_Enter; tbMaPhong.Leave += tbMaPhong_Leave; // @@ -170,7 +175,7 @@ private void InitializeComponent() btDangXuat.ShadowDecoration.CustomizableEdges = customizableEdges9; btDangXuat.Size = new Size(144, 39); btDangXuat.TabIndex = 3; - btDangXuat.Text = "Đăng xuất"; + btDangXuat.Text = "Logout"; btDangXuat.Click += btDangXuat_Click; // // btTaoPhong @@ -192,22 +197,8 @@ private void InitializeComponent() btTaoPhong.ShadowDecoration.CustomizableEdges = customizableEdges11; btTaoPhong.Size = new Size(174, 49); btTaoPhong.TabIndex = 0; - btTaoPhong.Text = "Tạo phòng"; - // - // cpbLogo - // - cpbLogo.Anchor = AnchorStyles.None; - cpbLogo.BackColor = Color.FromArgb(250, 250, 250); - cpbLogo.FillColor = Color.Gainsboro; - cpbLogo.ImageRotate = 0F; - cpbLogo.Location = new Point(372, 26); - cpbLogo.Margin = new Padding(4, 3, 4, 3); - cpbLogo.Name = "cpbLogo"; - cpbLogo.ShadowDecoration.CustomizableEdges = customizableEdges12; - cpbLogo.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - cpbLogo.Size = new Size(174, 164); - cpbLogo.TabIndex = 9; - cpbLogo.TabStop = false; + btTaoPhong.Text = "Create Room"; + btTaoPhong.Click += btTaoPhong_Click; // // cpbAvatar // @@ -218,7 +209,7 @@ private void InitializeComponent() cpbAvatar.Location = new Point(65, 156); cpbAvatar.Margin = new Padding(4, 3, 4, 3); cpbAvatar.Name = "cpbAvatar"; - cpbAvatar.ShadowDecoration.CustomizableEdges = customizableEdges13; + cpbAvatar.ShadowDecoration.CustomizableEdges = customizableEdges12; cpbAvatar.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; cpbAvatar.Size = new Size(102, 97); cpbAvatar.TabIndex = 11; @@ -226,15 +217,17 @@ private void InitializeComponent() // // panel_main // + panel_main.Controls.Add(pictureBox1); + panel_main.Controls.Add(gatewayStatusLb); + panel_main.Controls.Add(gatewayLb); panel_main.Controls.Add(lbPlayer); panel_main.Controls.Add(lbDangChoi); panel_main.Controls.Add(lbThamGia); panel_main.Controls.Add(cpbAvatar); - panel_main.Controls.Add(cpbLogo); panel_main.Controls.Add(btTaoPhong); panel_main.Controls.Add(btDangXuat); panel_main.Controls.Add(tbMaPhong); - panel_main.Controls.Add(btHoSo); + panel_main.Controls.Add(profileBtn); panel_main.Controls.Add(btThamGia); panel_main.Controls.Add(shPlayer); panel_main.Dock = DockStyle.Fill; @@ -244,30 +237,60 @@ private void InitializeComponent() panel_main.Size = new Size(908, 555); panel_main.TabIndex = 12; // + // pictureBox1 + // + pictureBox1.Image = Properties.Resources.fundrawLogo; + pictureBox1.Location = new Point(392, 52); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(134, 132); + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox1.TabIndex = 18; + pictureBox1.TabStop = false; + // + // gatewayStatusLb + // + gatewayStatusLb.AutoSize = true; + gatewayStatusLb.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0); + gatewayStatusLb.Location = new Point(100, 531); + gatewayStatusLb.Name = "gatewayStatusLb"; + gatewayStatusLb.Size = new Size(48, 15); + gatewayStatusLb.TabIndex = 17; + gatewayStatusLb.Text = "{status}"; + // + // gatewayLb + // + gatewayLb.AutoSize = true; + gatewayLb.BackColor = Color.Transparent; + gatewayLb.Location = new Point(12, 531); + gatewayLb.Name = "gatewayLb"; + gatewayLb.RightToLeft = RightToLeft.No; + gatewayLb.Size = new Size(89, 15); + gatewayLb.TabIndex = 16; + gatewayLb.Text = "Gateway status:"; + // // lbPlayer // - lbPlayer.Anchor = AnchorStyles.None; lbPlayer.BackColor = Color.FromArgb(224, 224, 224); - lbPlayer.Font = new Font("Microsoft Sans Serif", 12.75F, FontStyle.Regular, GraphicsUnit.Point, 0); - lbPlayer.Location = new Point(90, 259); - lbPlayer.Margin = new Padding(4, 3, 4, 3); + lbPlayer.BorderStyle = BorderStyle.None; + lbPlayer.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + lbPlayer.Location = new Point(24, 267); lbPlayer.Name = "lbPlayer"; - lbPlayer.Size = new Size(50, 22); - lbPlayer.TabIndex = 14; - lbPlayer.Text = "Player"; - lbPlayer.TextAlignment = ContentAlignment.MiddleCenter; + lbPlayer.Size = new Size(183, 22); + lbPlayer.TabIndex = 15; + lbPlayer.Text = "{playername}"; + lbPlayer.TextAlign = HorizontalAlignment.Center; // // lbDangChoi // lbDangChoi.Anchor = AnchorStyles.None; lbDangChoi.BackColor = Color.Transparent; lbDangChoi.Font = new Font("Microsoft Sans Serif", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); - lbDangChoi.Location = new Point(357, 440); + lbDangChoi.Location = new Point(365, 438); lbDangChoi.Margin = new Padding(4, 3, 4, 3); lbDangChoi.Name = "lbDangChoi"; - lbDangChoi.Size = new Size(210, 20); + lbDangChoi.Size = new Size(191, 20); lbDangChoi.TabIndex = 13; - lbDangChoi.Text = "Hiện đang có 0 người đang chơi"; + lbDangChoi.Text = "0 Players is currently playing!"; lbDangChoi.TextAlignment = ContentAlignment.MiddleCenter; // // lbThamGia @@ -280,38 +303,42 @@ private void InitializeComponent() lbThamGia.Name = "lbThamGia"; lbThamGia.Size = new Size(99, 20); lbThamGia.TabIndex = 12; - lbThamGia.Text = "Hoặc tham gia"; + lbThamGia.Text = "Or join a room"; lbThamGia.TextAlignment = ContentAlignment.MiddleCenter; // - // main_menu + // MainMenu // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; BackColor = Color.FromArgb(250, 250, 250); ClientSize = new Size(908, 555); Controls.Add(panel_main); + Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(4, 3, 4, 3); - Name = "main_menu"; + MaximizeBox = false; + Name = "MainMenu"; Text = "Main Menu"; - ((System.ComponentModel.ISupportInitialize)cpbLogo).EndInit(); ((System.ComponentModel.ISupportInitialize)cpbAvatar).EndInit(); panel_main.ResumeLayout(false); panel_main.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); ResumeLayout(false); } #endregion private Guna.UI2.WinForms.Guna2Shapes shPlayer; private Guna.UI2.WinForms.Guna2Button btThamGia; - private Guna.UI2.WinForms.Guna2Button btHoSo; + private Guna.UI2.WinForms.Guna2Button profileBtn; private Guna.UI2.WinForms.Guna2TextBox tbMaPhong; private Guna.UI2.WinForms.Guna2Button btDangXuat; private Guna.UI2.WinForms.Guna2Button btTaoPhong; - private Guna.UI2.WinForms.Guna2CirclePictureBox cpbLogo; private Guna.UI2.WinForms.Guna2CirclePictureBox cpbAvatar; private System.Windows.Forms.Panel panel_main; private Guna.UI2.WinForms.Guna2HtmlLabel lbThamGia; private Guna.UI2.WinForms.Guna2HtmlLabel lbDangChoi; - private Guna.UI2.WinForms.Guna2HtmlLabel lbPlayer; + private TextBox lbPlayer; + private Label gatewayLb; + private Label gatewayStatusLb; + private PictureBox pictureBox1; } } diff --git a/MainMenu.cs b/MainMenu.cs new file mode 100644 index 0000000..f3bb13c --- /dev/null +++ b/MainMenu.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Reflection.Metadata; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using SocketIOClient; +using System.Text.RegularExpressions; + +namespace FunDraw +{ + public partial class MainMenu : Form + { + static string roomId = ""; + public MainMenu() + { + InitializeComponent(); + + this.MinimumSize = new Size(883, 500); + lbPlayer.Text = Session.username; + + Gateway.Instance.Connect(); + + Gateway.Instance.On("ping", gatewayStatusHandler); + Gateway.Instance.On("roomCreated", createRoomEvent); + Gateway.Instance.On("joinRoom", joinRoomEvent); + } + + private void createRoomEvent(SocketIOResponse response) + { + var data = response.GetValue(); + var result = JsonConvert.DeserializeObject(data); + if (result != null) + { + GameManager.roomId = result["id"].ToString(); + FormState.HostRoomForm(); + Invoke((MethodInvoker)(() => this.Close())); + } + } + + private void joinRoomEvent(SocketIOResponse response) + { + var data = response.GetValue(); + var result = JsonConvert.DeserializeObject(data); + if (result != null) + { + if (result.ContainsKey("error")) + { + MessageBox.Show($"Unable to find a room with code: {roomId}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + else + { + GameManager.roomId = result["id"].ToString(); + FormState.WaitingRoomForm(); + Invoke((MethodInvoker)(() => this.Close())); + } + } + } + + private void tbMaPhong_Enter(object sender, EventArgs e) + { + if (tbMaPhong.Text == "Room code") + { + tbMaPhong.Text = ""; + tbMaPhong.ForeColor = Color.Black; + } + } + + private void tbMaPhong_Leave(object sender, EventArgs e) + { + if (tbMaPhong.Text == "") + { + tbMaPhong.Text = "Room code"; + tbMaPhong.ForeColor = Color.FromArgb(125, 137, 149); + } + } + + + private async void btDangXuat_Click(object sender, EventArgs e) + { + if (!await Session.Logout()) + { + MessageBox.Show("Something went wrong!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + FormState.LoginForm(); + this.Close(); + } + + private void btTaoPhong_Click(object sender, EventArgs e) + { + Gateway.Instance.Emit("createRoom"); + } + + private void tbMaPhong_TextChanged(object sender, EventArgs e) + { + roomId = tbMaPhong.Text.Replace("-", ""); + } + + private void btThamGia_Click(object sender, EventArgs e) + { + if (roomId != "" && (Regex.IsMatch(roomId, @"^[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}$") || Regex.IsMatch(roomId, @"^[a-zA-Z0-9]{8}$"))) + { + Gateway.Instance.Emit("joinRoom", new { roomId = roomId }); + } + else + { + MessageBox.Show("Invalid Room code!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void gatewayStatusHandler(SocketIOResponse response) + { + Invoke((MethodInvoker)(() => + { + gatewayStatusLb.ForeColor = Gateway.socketState ? Color.Green : Color.Red; + gatewayStatusLb.Text = Gateway.socketState ? "Connected" : "Disconnected"; + })); + } + + private void profileBtn_Click(object sender, EventArgs e) + { + PlayerProfile pp = new PlayerProfile(); + pp.ShowDialog(); + } + } +} diff --git a/MainMenu.resx b/MainMenu.resx new file mode 100644 index 0000000..d106dee --- /dev/null +++ b/MainMenu.resx @@ -0,0 +1,821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + + + 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 + vgAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/HoSoNgChoi.Designer.cs b/PlayerProfile.Designer.cs similarity index 77% rename from HoSoNgChoi.Designer.cs rename to PlayerProfile.Designer.cs index a9ef7ca..53ab834 100644 --- a/HoSoNgChoi.Designer.cs +++ b/PlayerProfile.Designer.cs @@ -1,6 +1,6 @@ namespace FunDraw { - partial class HoSoNgChoi + partial class PlayerProfile { /// /// Required designer variable. @@ -29,11 +29,10 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HoSoNgChoi)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerProfile)); guna2CirclePictureBox1 = new Guna.UI2.WinForms.Guna2CirclePictureBox(); lbPlayer = new Label(); label2 = new Label(); - Click_pic = new Label(); label3 = new Label(); label4 = new Label(); lbChangePassword = new Label(); @@ -53,7 +52,7 @@ private void InitializeComponent() guna2CirclePictureBox1.Name = "guna2CirclePictureBox1"; guna2CirclePictureBox1.ShadowDecoration.CustomizableEdges = customizableEdges1; guna2CirclePictureBox1.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - guna2CirclePictureBox1.Size = new Size(143, 123); + guna2CirclePictureBox1.Size = new Size(143, 143); guna2CirclePictureBox1.TabIndex = 0; guna2CirclePictureBox1.TabStop = false; // @@ -71,43 +70,31 @@ private void InitializeComponent() // label2.AutoSize = true; label2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - label2.Location = new Point(279, 84); + label2.Location = new Point(279, 91); label2.Name = "label2"; label2.Size = new Size(28, 21); label2.TabIndex = 2; label2.Text = "ID:"; // - // Click_pic - // - Click_pic.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - Click_pic.AutoSize = true; - Click_pic.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - Click_pic.ForeColor = SystemColors.ButtonShadow; - Click_pic.Location = new Point(63, 189); - Click_pic.Name = "Click_pic"; - Click_pic.Size = new Size(183, 21); - Click_pic.TabIndex = 3; - Click_pic.Text = "Click vào ảnh để thay đổi"; - // // label3 // label3.AutoSize = true; label3.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - label3.Location = new Point(278, 119); + label3.Location = new Point(278, 120); label3.Name = "label3"; - label3.Size = new Size(77, 21); + label3.Size = new Size(51, 21); label3.TabIndex = 4; - label3.Text = "Tham gia:"; + label3.Text = "Email:"; // // label4 // label4.AutoSize = true; label4.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - label4.Location = new Point(278, 154); + label4.Location = new Point(278, 150); label4.Name = "label4"; - label4.Size = new Size(51, 21); + label4.Size = new Size(58, 21); label4.TabIndex = 5; - label4.Text = "Email:"; + label4.Text = "Joined:"; // // lbChangePassword // @@ -116,64 +103,61 @@ private void InitializeComponent() lbChangePassword.ForeColor = Color.DodgerBlue; lbChangePassword.Location = new Point(279, 190); lbChangePassword.Name = "lbChangePassword"; - lbChangePassword.Size = new Size(103, 20); + lbChangePassword.Size = new Size(132, 20); lbChangePassword.TabIndex = 7; - lbChangePassword.Text = "Đổi mật khẩu"; + lbChangePassword.Text = "Change Password"; lbChangePassword.Click += lbChangePassword_Click; // // lbID // lbID.AutoSize = true; lbID.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); - lbID.Location = new Point(313, 85); + lbID.Location = new Point(313, 92); lbID.Name = "lbID"; - lbID.Size = new Size(25, 20); + lbID.Size = new Size(34, 20); lbID.TabIndex = 8; - lbID.Text = "ID"; + lbID.Text = "{id}"; // // lbEmail // lbEmail.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); - lbEmail.Location = new Point(361, 120); + lbEmail.Location = new Point(342, 121); lbEmail.Name = "lbEmail"; - lbEmail.Size = new Size(92, 21); + lbEmail.Size = new Size(278, 21); lbEmail.TabIndex = 0; - lbEmail.Text = "Day"; + lbEmail.Text = "{email}"; // // lbJoin // lbJoin.AutoSize = true; lbJoin.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); lbJoin.ForeColor = SystemColors.ActiveCaptionText; - lbJoin.Location = new Point(335, 155); + lbJoin.Location = new Point(335, 151); lbJoin.Name = "lbJoin"; - lbJoin.Size = new Size(47, 20); + lbJoin.Size = new Size(65, 20); lbJoin.TabIndex = 7; - lbJoin.Text = "Email"; + lbJoin.Text = "{joined}"; // - // HoSoNgChoi + // PlayerProfile // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; BackColor = SystemColors.ButtonHighlight; - ClientSize = new Size(536, 274); + ClientSize = new Size(632, 274); Controls.Add(lbEmail); Controls.Add(lbJoin); Controls.Add(lbID); Controls.Add(lbChangePassword); Controls.Add(label4); Controls.Add(label3); - Controls.Add(Click_pic); Controls.Add(label2); Controls.Add(lbPlayer); Controls.Add(guna2CirclePictureBox1); Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(3, 2, 3, 2); MaximizeBox = false; - Name = "HoSoNgChoi"; + Name = "PlayerProfile"; Text = "User Profile"; - Load += HoSoNgChoi_Load; - Resize += HoSoNgChoi_Resize; ((System.ComponentModel.ISupportInitialize)guna2CirclePictureBox1).EndInit(); ResumeLayout(false); PerformLayout(); @@ -184,7 +168,6 @@ private void InitializeComponent() private Guna.UI2.WinForms.Guna2CirclePictureBox guna2CirclePictureBox1; private Label lbPlayer; private Label label2; - private Label Click_pic; private Label label3; private Label label4; private Label lbChangePassword; diff --git a/PlayerProfile.cs b/PlayerProfile.cs new file mode 100644 index 0000000..5f658a0 --- /dev/null +++ b/PlayerProfile.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using FunDraw.Types; +namespace FunDraw +{ + public partial class PlayerProfile : Form + { + private Size formOriginalSize; + private Rectangle circle; + private Rectangle click_pic; + private Rectangle player; + private Rectangle playerDisplay; + private Rectangle id; + private Rectangle IDDisplay; + private Rectangle tham_gia; + private Rectangle thamgiaDisplay; + private Rectangle email; + private Rectangle emailDisplay; + private Rectangle forgot_pass; + + public PlayerProfile() + { + InitializeComponent(); + formOriginalSize = this.Size; + circle = new Rectangle(guna2CirclePictureBox1.Location, guna2CirclePictureBox1.Size); + // click_pic = new Rectangle(Click_pic.Location, Click_pic.Size); + player = new Rectangle(lbPlayer.Location, lbPlayer.Size); + playerDisplay = new Rectangle(lbPlayer.Location, lbPlayer.Size); + id = new Rectangle(label2.Location, label2.Size); + IDDisplay = new Rectangle(lbID.Location, lbID.Size); + tham_gia = new Rectangle(label3.Location, label3.Size); + thamgiaDisplay = new Rectangle(lbJoin.Location, lbJoin.Size); + email = new Rectangle(label4.Location, label4.Size); + emailDisplay = new Rectangle(lbEmail.Location, lbEmail.Size); + forgot_pass = new Rectangle(lbChangePassword.Location, lbChangePassword.Size); + + GetUserProfile(); + } + + private async void GetUserProfile() + { + UserProfile userProfile = await Session.GetUserProfile(); + + lbPlayer.Text = $"{userProfile.Username}"; + lbID.Text = $"{userProfile.ID}"; + lbJoin.Text = $"{userProfile.JoinedDate:yyyy-MM-dd}"; + lbEmail.Text = $"{userProfile.Email}"; + } + + private void lbChangePassword_Click(object sender, EventArgs e) + { + ChangePassword cp = new ChangePassword(); + cp.ShowDialog(); + } + } +} diff --git a/HoSoNgChoi.resx b/PlayerProfile.resx similarity index 100% rename from HoSoNgChoi.resx rename to PlayerProfile.resx diff --git a/Program.cs b/Program.cs index 1c4166e..922567c 100644 --- a/Program.cs +++ b/Program.cs @@ -11,7 +11,7 @@ static void Main() // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new HoSoNgChoi()); + Application.Run(new Login()); } } } \ No newline at end of file diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 09eaedb..4e7d69c 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -63,9 +63,49 @@ internal Resources() { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap dsadsad { + internal static System.Drawing.Bitmap fundrawLogo { get { - object obj = ResourceManager.GetObject("dsadsad", resourceCulture); + object obj = ResourceManager.GetObject("fundrawLogo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap logo { + get { + object obj = ResourceManager.GetObject("logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap medal1 { + get { + object obj = ResourceManager.GetObject("medal1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap medal2 { + get { + object obj = ResourceManager.GetObject("medal2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap medal3 { + get { + object obj = ResourceManager.GetObject("medal3", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/Properties/Resources.resx b/Properties/Resources.resx index 34a6ed2..3520171 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -118,7 +118,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\dsadsad.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\medal1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\medal2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\medal3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fundrawLogo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/Register.Designer.cs b/Register.Designer.cs index 0520b31..be7c97f 100644 --- a/Register.Designer.cs +++ b/Register.Designer.cs @@ -39,39 +39,24 @@ private void InitializeComponent() Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges8 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges9 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges10 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges11 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); - cpbLogo = new Guna.UI2.WinForms.Guna2CirclePictureBox(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Register)); tbUsername = new Guna.UI2.WinForms.Guna2TextBox(); tbPassword = new Guna.UI2.WinForms.Guna2TextBox(); tbComfirmPassword = new Guna.UI2.WinForms.Guna2TextBox(); tbEmail = new Guna.UI2.WinForms.Guna2TextBox(); btRegister = new Guna.UI2.WinForms.Guna2Button(); lbLogin = new Guna.UI2.WinForms.Guna2HtmlLabel(); - ((System.ComponentModel.ISupportInitialize)cpbLogo).BeginInit(); + pictureBox1 = new PictureBox(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); SuspendLayout(); // - // cpbLogo - // - cpbLogo.Anchor = AnchorStyles.None; - cpbLogo.BackColor = SystemColors.ButtonHighlight; - cpbLogo.FillColor = Color.Gainsboro; - cpbLogo.ImageRotate = 0F; - cpbLogo.Location = new Point(367, 44); - cpbLogo.Margin = new Padding(4, 3, 4, 3); - cpbLogo.Name = "cpbLogo"; - cpbLogo.ShadowDecoration.CustomizableEdges = customizableEdges1; - cpbLogo.ShadowDecoration.Mode = Guna.UI2.WinForms.Enums.ShadowMode.Circle; - cpbLogo.Size = new Size(174, 141); - cpbLogo.TabIndex = 11; - cpbLogo.TabStop = false; - // // tbUsername // tbUsername.Anchor = AnchorStyles.None; tbUsername.BorderRadius = 12; tbUsername.Cursor = Cursors.IBeam; - tbUsername.CustomizableEdges = customizableEdges2; - tbUsername.DefaultText = "Tên đăng nhập"; + tbUsername.CustomizableEdges = customizableEdges1; + tbUsername.DefaultText = "Username"; tbUsername.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbUsername.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbUsername.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -87,7 +72,7 @@ private void InitializeComponent() tbUsername.PlaceholderForeColor = Color.Gainsboro; tbUsername.PlaceholderText = ""; tbUsername.SelectedText = ""; - tbUsername.ShadowDecoration.CustomizableEdges = customizableEdges3; + tbUsername.ShadowDecoration.CustomizableEdges = customizableEdges2; tbUsername.Size = new Size(289, 39); tbUsername.TabIndex = 12; // @@ -96,8 +81,8 @@ private void InitializeComponent() tbPassword.Anchor = AnchorStyles.None; tbPassword.BorderRadius = 12; tbPassword.Cursor = Cursors.IBeam; - tbPassword.CustomizableEdges = customizableEdges4; - tbPassword.DefaultText = "Mật khẩu"; + tbPassword.CustomizableEdges = customizableEdges3; + tbPassword.DefaultText = "Password"; tbPassword.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbPassword.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbPassword.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -113,7 +98,7 @@ private void InitializeComponent() tbPassword.PlaceholderForeColor = Color.Gainsboro; tbPassword.PlaceholderText = ""; tbPassword.SelectedText = ""; - tbPassword.ShadowDecoration.CustomizableEdges = customizableEdges5; + tbPassword.ShadowDecoration.CustomizableEdges = customizableEdges4; tbPassword.Size = new Size(289, 39); tbPassword.TabIndex = 13; // @@ -122,8 +107,8 @@ private void InitializeComponent() tbComfirmPassword.Anchor = AnchorStyles.None; tbComfirmPassword.BorderRadius = 12; tbComfirmPassword.Cursor = Cursors.IBeam; - tbComfirmPassword.CustomizableEdges = customizableEdges6; - tbComfirmPassword.DefaultText = "Xác nhận mật khẩu"; + tbComfirmPassword.CustomizableEdges = customizableEdges5; + tbComfirmPassword.DefaultText = "Confirm Password"; tbComfirmPassword.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbComfirmPassword.DisabledState.FillColor = Color.FromArgb(226, 226, 226); tbComfirmPassword.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); @@ -139,7 +124,7 @@ private void InitializeComponent() tbComfirmPassword.PlaceholderForeColor = Color.Gainsboro; tbComfirmPassword.PlaceholderText = ""; tbComfirmPassword.SelectedText = ""; - tbComfirmPassword.ShadowDecoration.CustomizableEdges = customizableEdges7; + tbComfirmPassword.ShadowDecoration.CustomizableEdges = customizableEdges6; tbComfirmPassword.Size = new Size(289, 39); tbComfirmPassword.TabIndex = 14; // @@ -148,7 +133,7 @@ private void InitializeComponent() tbEmail.Anchor = AnchorStyles.None; tbEmail.BorderRadius = 12; tbEmail.Cursor = Cursors.IBeam; - tbEmail.CustomizableEdges = customizableEdges8; + tbEmail.CustomizableEdges = customizableEdges7; tbEmail.DefaultText = "Email"; tbEmail.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); tbEmail.DisabledState.FillColor = Color.FromArgb(226, 226, 226); @@ -165,7 +150,7 @@ private void InitializeComponent() tbEmail.PlaceholderForeColor = Color.Gainsboro; tbEmail.PlaceholderText = ""; tbEmail.SelectedText = ""; - tbEmail.ShadowDecoration.CustomizableEdges = customizableEdges9; + tbEmail.ShadowDecoration.CustomizableEdges = customizableEdges8; tbEmail.Size = new Size(289, 39); tbEmail.TabIndex = 15; // @@ -174,7 +159,7 @@ private void InitializeComponent() btRegister.Anchor = AnchorStyles.None; btRegister.Animated = true; btRegister.BorderRadius = 12; - btRegister.CustomizableEdges = customizableEdges10; + btRegister.CustomizableEdges = customizableEdges9; btRegister.DisabledState.BorderColor = Color.DarkGray; btRegister.DisabledState.CustomBorderColor = Color.DarkGray; btRegister.DisabledState.FillColor = Color.FromArgb(169, 169, 169); @@ -185,10 +170,10 @@ private void InitializeComponent() btRegister.Location = new Point(367, 426); btRegister.Margin = new Padding(4, 3, 4, 3); btRegister.Name = "btRegister"; - btRegister.ShadowDecoration.CustomizableEdges = customizableEdges11; + btRegister.ShadowDecoration.CustomizableEdges = customizableEdges10; btRegister.Size = new Size(166, 40); btRegister.TabIndex = 16; - btRegister.Text = "Đăng ký"; + btRegister.Text = "Submit"; btRegister.Click += btRegister_Click; // // lbLogin @@ -197,44 +182,55 @@ private void InitializeComponent() lbLogin.BackColor = Color.Transparent; lbLogin.Font = new Font("Microsoft Sans Serif", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 0); lbLogin.ForeColor = SystemColors.Highlight; - lbLogin.Location = new Point(376, 478); + lbLogin.Location = new Point(406, 478); lbLogin.Margin = new Padding(4, 3, 4, 3); lbLogin.Name = "lbLogin"; - lbLogin.Size = new Size(128, 20); + lbLogin.Size = new Size(89, 20); lbLogin.TabIndex = 17; - lbLogin.Text = "Quay lại đăng nhập"; + lbLogin.Text = "Back to login"; lbLogin.TextAlignment = ContentAlignment.MiddleCenter; lbLogin.Click += lbLogin_Click; // + // pictureBox1 + // + pictureBox1.Image = Properties.Resources.fundrawLogo; + pictureBox1.Location = new Point(310, 47); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(283, 133); + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox1.TabIndex = 18; + pictureBox1.TabStop = false; + // // Register // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; BackColor = SystemColors.ControlLightLight; ClientSize = new Size(898, 507); + Controls.Add(pictureBox1); Controls.Add(lbLogin); Controls.Add(btRegister); Controls.Add(tbEmail); Controls.Add(tbComfirmPassword); Controls.Add(tbPassword); Controls.Add(tbUsername); - Controls.Add(cpbLogo); + Icon = (Icon)resources.GetObject("$this.Icon"); Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; Name = "Register"; Text = "Register"; - ((System.ComponentModel.ISupportInitialize)cpbLogo).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); ResumeLayout(false); PerformLayout(); } #endregion - - private Guna.UI2.WinForms.Guna2CirclePictureBox cpbLogo; private Guna.UI2.WinForms.Guna2TextBox tbUsername; private Guna.UI2.WinForms.Guna2TextBox tbPassword; private Guna.UI2.WinForms.Guna2TextBox tbComfirmPassword; private Guna.UI2.WinForms.Guna2TextBox tbEmail; private Guna.UI2.WinForms.Guna2Button btRegister; private Guna.UI2.WinForms.Guna2HtmlLabel lbLogin; + private PictureBox pictureBox1; } } diff --git a/Register.resx b/Register.resx index 21d3f7b..a5c6363 100644 --- a/Register.resx +++ b/Register.resx @@ -120,258 +120,699 @@ - AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA - AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqamoYYmJigl1d - XcJeXl7AYWFhqGJiYopiYmJwZGRkXGZmZktlZWU/YGBgNWVlZStlZWUmaWlpImZmZh5kZGQcampqGGpq - ahhtbW0VbW1tFWRkZBdqamoYampqGGJiYhpmZmYeaWlpImZmZihgYGAtXl5eNmZmZkFiYmJRYmJiYGJi - YnJjY2ONYWFhtV9fX8FiYmKSZWVlNYCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABiYmKUXFxc/FxcXP9cXFz/XFxc/1xcXP9cXFz+XV1d+lxcXPdcXFz0XV1d8V1dXeteXl7nXl5e5F1d - XeFdXV3eXV1d211dXdtdXV3ZXV1d2V5eXtpdXV3bXV1d211dXd1dXV3gXl5e5F1dXeldXV3tXV1d8l1d - XfRdXV34XFxc+1xcXP5cXFz/XFxc/1xcXP9cXFz+Xl5e52hoaFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAICAgAZeXl7YXl1b/2ZnVf9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/a2tT/2tr - U/9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/amtT/2lqVP9palT/aWpU/2pr - VP9ra1P/a2tT/2trU/9ra1P/a2tT/2trU/9ra1P/a2tU/2NkV/9cXFz/XFxc/19fX9VtbW0VAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAZmZlralJY7/6+yKv+ztSn/s7Yp/7O2Kf+ytin/srYp/7K1 - Kf+ztin/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztin/s7Uq/7G0 - Kv+xtCn/sbQp/7G0Kv+ytSn/s7Yp/7O2Kf+ztin/s7Yp/7O2Kf+ztir/s7Yq/6mrL/92eEz/XFxc/11d - Xe9nZ2cvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZmQWVlj7Zubwm/7u+Jf+7viX/u74l/7u+ - Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7q9Jf+6vSX/ubwk/7i7 - Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/6Wo - If+qrSv/Z2hV/11dXe1lZWUrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa2bQe4uyrbu74l/7u+ - Jf+7viX/ubwl/7S3JP+vsiL/qawi/6SnIf+foiH/nJ8g/5iaHv+XmR//lJcf/4+RHf+LjRz/iIoc/4SG - Gv+DhRv/h4ob/5ibIP+6vST/u74l/7u+Jf+6vST/ub0k/7a4I/+wsyP/qawi/6KkIP+cniD/qash/7u+ - Jf+7viX/tLck/6epIf+lqCT/cnNP/11dXepmZmYjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANXV - gAa7vSnau74l/7u+Jf+7viX/p6oh/5ibH/+dnyD/o6Yh/6iqI/+nqiL/qKsi/6utIf+jpSH/oKMg/6Ci - If+goiH/nqAg/5yeH/+cniD/m50g/5qcH/+XmR7/kpQe/5OVHv+Skx7/jo8c/42OHP+TlB3/mpwg/6Gj - If+lqCH/sbQj/7u+Jf+qrCH/i40c/7S3JP+3uib/dXdO/11dXedqamodAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9wCzTu74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7q9 - Jf+Zmx//kpQe/5udH/+mqCH/r7Ij/7O2I/+0tyP/trkk/7a6JP+4uyT/uLsk/7m8Jf+6vSX/u74l/7u+ - Jf+7viX/u74l/7u+Jf+7viX/u74l/7e6JP+KjB3/t7ok/7u+Jf+4uyb/eHlM/15eXuRkZGQXAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8vy3Ou74l/7u+Jf+7viX/sbQj/6qtIv+oqyP/p6oj/6Ol - IP+eoiH/nqEg/6CjIP+cnx//lZce/7W4JP+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7m8 - JP+3uiT/s7Yk/6+yJf+srif/q60u/6qsNf+nqDn/oKE7/4OFHf+vsSL/u74l/7u+Jf+5vCb/entL/19f - X9tra2sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wC3Cu74l/7u+Jf+7viX/qKoh/6Gj - If+prCL/tLck/7e6JP+3uiP/t7oj/7i7JP+4uyX/uLsk/7m8JP+1uCT/rbAj/6OmI/+dnif/mZsu/5ma - O/+Yl03/j45a/5CMaf+emYH/trGl/7+5u//AuMT/y8LT/9zR5f/l2vD/0sje/4yNK/+7viX/u74l/7u+ - Jf+5vCb/fH1L/2FhYdBmZmYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wC+6u74l/7u+ - Jf+7viX/uLwl/52eLP+lpUT/qKdQ/6+uYf+wrm7/q6h0/66qgf+1r5H/trGf/7avqP+7s7P/yL/F/9LJ - 1v/Vyt//2Mzk/9/U7P/o3Pb/69/6/+3g+v/t4Pv/7eD7/+3g+//t4Pv/7eD7/+7h+//u4fv/3tPs/4mJ - N/+7viX/u74l/7u+Jf+5vCb/fn9I/2FhYc5tbW0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC+wSysu74l/7u+Jf+7viX/s7Yk/4eBbP/q3vj/69/5/+zf+f/s3/r/7N/6/+3g+//t4Pv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/5dr0/+nd - 9//u4fv/59v1/4GARP+7viX/u74l/7u+Jf+5vCb/f4FH/2BgYMV0dHQLAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC8wCyhu74l/7u+Jf+7viX/tbgk/4R/Z//t4Pr/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+HW - 7/+XkKL/OTU+/7uzyP/u4fv/69/5/3Z1Tf+6vSX/oKMh/7S3JP+6vSb/goRG/19fX79xcXEJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vSyeu74l/7u+Jf+7viX/t7ok/397X//t4Pr/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//r3/n/v7bM/zc1Pf8HBgr/LSsz/+TY8f/u4fv/7eD6/3l2XP+4uyT/jpEf/62vIv+6vSX/hohD/19f - X7tgYGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vi+Zu74l/7u+Jf+vsiP/tbgk/3x5 - Wf/t4Pr/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7eH7/9jN5P9oY3D/GRge/wcGCv8HBgr/bml3/+3g+v/u4fv/7eD7/4WCcf+0tyT/kJMe/6qt - Iv+6vSX/iotB/19fX7tgYGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vy2Pu74l/7u+ - Jf+RlCD/sLMj/3x5Vf/s3/r/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/3tLr/4KAiP9bWl3/EREU/wcGCv8PDhP/t67E/+3g+//u4fv/7uD7/5WQ - i/+vsiP/k5Qd/6irIv+7viX/jY4//19fX7tgYGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC8wDCFu74l/7u+Jf+RlCD/sLMj/3x6Uf/s3/n/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//g1O3/WFVg/woLD/8xMTT/YWBj/01MT/83NTz/39Tt/+7h - +//u4fv/7uD7/6afpf+rriP/lpcd/6iqIf+7viX/kJE+/19fX8FmZmYKAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC7vy+Du74l/7u+Jf+SlB7/r7Ii/357T//r3/n/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+vf+P+HgpD/CwwO/wYHC/8GBwv/CQoO/0xM - UP/IwdD/7N/6/+7h+//u4fv/7uD7/7WuvP+oqyP/mZsf/6apIf+7viX/kpQ8/19fX8JmZmYKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+wDB1u74l/bu+Jf+Qkh3/rbAi/39+Tf/r3/j/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/69/5/5uUpv8VFRj/BwcI/wYH - Cf8xMjP/Tk5Q/396iP/o2/T/7uH7/+7h+//u4fv/7uD7/7mxw/+nqSX/n6Ef/6SmIf+7viX/lZc7/19f - X8R0dHQLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8wC5uu74l/Lu+Jf+Qkh7/rbAj/4OC - TP/r3vj/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//t4Pv/wrjP/yAg - Jf8GBgn/CAcI/xwcHP+qqab/g36H/+ba8v/u4fv/7uH7/+7h+//u4fv/7uH7/760x/+mqCb/pKch/6Kk - IP+7viX/mJo5/2FhYc5tbW0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wDBlu74m+7u+ - Jf+PkR3/rbAi/4aFTP/q3vf/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//SyN//NzU9/wgHC/8HBgr/CgoN/319e/94dXr/1Mng/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/8G5 - zf+mqCj/qq0h/5+hIP+7viX/m542/2JiYtF3d3cPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADAwy9du74m+ru+Jf+NkB//rrEj/4iHSv/p3fb/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+HV7v9VUVz/BwYJ/wcGCv8LCg7/aGdn/42Lj//PxNr/7eD6/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/8e+1P+nqSz/r7Ej/5udH/+7viX/oKM0/19fX9txcXESAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC7vixWu74l+bu+Jf+PkR//sbQj/4mGRf/o2/T/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/6975/395iP8NDBH/BwYK/wYGCf9KSkv/f35+/7Couv/s3/n/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/8/G2/+nqS//s7Yl/5eaH/+7viX/pagy/2BgX+JoaGgWAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vixSu74l+Lu+Jf+PkR//srUj/4aGQ//n2vP/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//s3/n/nZao/wwMEP8HBgr/BwcL/y4uMP+WlZT/pJys/+3g - +v/u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/9jN5P+nqTL/tbgk/5OVHv+7viX/qasv/15e - XedoaGgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6vi5Ou74l+Lu+Jf+NkB//tbck/4aG - QP/l2fH/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7g+//b0uj/bmxz/woJDv8GBgr/LSwt/5ST - kv+Hgoz/5trz/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/9/U6/+lpjT/trkj/5SW - Hf+7viX/q64u/15eXOlkZGQhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+vjBKvL4m97u+ - Jf+OkB//tLck/4qKPf/k2PD/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+DU7P9JR1D/TkxS/3Nx - dv8rKS7/WllZ/397g//k2PD/7eD7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+TZ - 8f+ipDb/trkk/5SWH/+7viX/rbAt/2BgW+xmZmYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC+wjFDvL8m9ru+Jf+Pkh7/tLck/4yMOv/h1e7/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/7qx - xf8JCAz/BwYL/xoaHv9eXGH/jouT/9jN4//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+fc9f+goTn/t7oj/5OVHv+7viX/r7Is/2FiW+9qamowAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC8vDNBu74m9ru+Jf+Qkx//s7ck/4uLNv/e0+v/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+ba9P+PiJj/KScu/wgHC/8vLTT/0cjf/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+nd9v+foDv/t7ok/5KUHf+7viX/sbQr/2RkWfNjY2M7AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9wTA6u74m87u+Jf+SlSD/s7Yk/4uLM//d0en/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7eD7/+zg+v/r3/j/0MXc/5SNnf/JvtT/7eD6/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+re+P+enz3/uLsk/5OVHv+7viX/s7Yp/2Zn - V/djY2NIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7vzI4vL8m8ru+Jf+TlR//sbQj/4yN - MP/bz+f/7uH7/+7h+//u4fv/7uH7/+7h+//t4Pv/oJms/zQzO/9bV2P/49fw/+3g+v/u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+rf+P+cnD//ubwl/5CS - Hf+7viX/tbko/2trVflhYWFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6vzs0u74n8bu+ - Jf+TlR7/r7Ij/4+QLv/ZzeX/7uH7/+3g+//t4Pv/7eD7/+7h+//p3fb/NjQ9/wYHC/9QTln/5dny/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf - +P+cm0P/ubwl/42PHP+7viX/uLsn/29vU/tjY2NnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADBwTMtvL8n7ru+Jf+Tlh7/rbAi/5GSLf/WzOP/7eD7/6Wesf9ybXv/cGt5/+DU7f/r3vj/SUZQ/wYH - C/+hmqz/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+zf+f+enUj/ubwl/42PHf+7viX/ubwl/3FyT/5hYWF7AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADDwy8mu74l67u+Jf+Qkh7/qqwi/4+RKP/VyuH/3dHq/yAfJP8LDBD/CAkN/6We - sP/u4fv/p5+z/wsMEP9MSVP/59v0/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+vf+v+goVD/ubwl/4yNHf+6vST/ur0k/3Z3TP9hYWGQAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/vzIkur0l67u+Jf+SlB7/qasi/46QJf/Sx97/wrnO/w4O - Ef8ICQ7/a2d1/93R6//u4fv/2M3l/x8eIv8XFhv/w7nP/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf+f+kolv/ur0l/4qMHP+6vSX/ur0k/3l6 - Sv9hYWGuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDwzsevL4l6Lu+Jf+TlR//qKoh/4yP - H//PxNr/5tv0/ywrMP8QERT/1Mng/+7h+//t4Pv/yL/U/xcXGP8NDA//pZyv/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf+f+komT/ur0l/4iJ - HP+6vSX/ur0k/35/R/9hYWHP////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExDsau78n5ru+ - Jf+Tlh7/pqkh/5GTHv/Lwdb/7eD7/5qSo/8RERL/aGNv/6+muv+UjJz/MC4z/wgICP8VFBj/u7HF/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zf - +v+koGv/ur0l/4eIG/+6vSX/ur0l/4SGRP9eXl7fgICADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC/vzUYu70o5bu+Jf+Ulx7/pagg/5ueIP/Jv9D/7uH7/+zf+f+ooLL/Hx4g/wkJCf8ICAj/CAgI/wsL - C/9wa3j/6d32/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h - +//t4Pv/7OD7/+vf+v+koXD/u74l/4iKHP+5vCX/ur0l/4qMQv9dXV3ua2trHwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC5uToWu78q4ru+Jf+XmR7/o6Uh/6OlIf+7sbz/7uH7/+7h+//t4Pr/z8Tb/4+I - mP9qZXD/cGt2/6uitf/n2/X/7eD7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+zg - +//s4Pv/7eD7/+3g+//t4Pv/6t/6/+nf+v+monr/ur0l/4mLHP+1uCT/u74l/5GTPP9dXVz8ampqPAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDwzwRvL8q1ru+Jf+cnh//oqUg/66wI/+wp6v/7eH7/+3h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7eH7/+3h+//t4fv/7eD7/+vg - +//t4Pv/6+D7/+ng+//r3/r/6975/+ve+P/q3ff/6Nz0/+bb8v+ppYD/u74l/4qMHP+ytCP/u74l/5eZ - Of9cXFz/aWlpZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2tkkOvb8szLu+Jf+0tyP/tbgk/7S3 - JP+qpKL/6N/7/+3g+//t4Pv/7eH7/+7h+//u4fv/7eD7/+7h+//u4fv/7eD7/+7h+//t4Pv/6t74/+DV - 7v/Wy+P/0cfb/8jAy/+6srX/r6ii/62nlv+ppIT/pKFy/6WiZv+lpFn/oaFJ/6CfPf+ipC3/u70l/42O - HP+tsCP/u74l/5qdN/9dXVv/ZGRkkgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50UYLvL8qxru+ - Jf+7viX/u74l/7i8JP+po5z/6N33/+jc9v/n2/T/5Nnw/+PX7P/e1Ob/0cjW/8G5wv+6srT/sKqe/5yX - fP+LiF7/i4lL/5OTPP+XmC3/m50l/6SnIv+vsiP/t7ok/7q9Jf+6vSX/u74l/7u+Jf+7viX/u74l/7u+ - Jf+7viX/u74l/5+hIP+wsyL/ur4l/5yfN/9dXVv/X19fs21tbQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC220kHu8Apubu+Jf+7viX/u74l/7S3I/+LilD/rKhw/6upY/+sq1j/qKhJ/6WlPf+oqTb/q60w/6yu - Kf+tsCX/srQj/7a5JP+5vCT/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+ - Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/5+hNf9eXlv/YGBgz2ZmZg8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC/v4AEu74qsbu+Jf+7viX/s7Yk/4SGHP+xtCT/u74l/7u+Jf+7viX/u74l/7u+ - Jf+6vSX/uLsl/7e6JP+2uST/tbgj/7S2I/+xtCL/sLMj/62wIv+mqCD/nJ4f/5WXHv+Rkx3/kpMf/6qs - Iv+6vSX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/6OkMv9fX1r/X19fwXR0 - dAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4ACvcArq7u+Jf+4uyT/kpQe/6+yI/+nqSH/oaMg/5ud - IP+TlR7/j5Ad/46PHv+Ojx3/j5Ee/5CSHf+SlR7/lpge/5mbH/+bnB//nZ8g/5+iIP+ipSH/pqkh/6qt - Iv+usSL/s7Yj/7m8JP+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7viX/u74l/7u+Jf+7vSX/ubwk/6ao - MP9jY1rwZ2dnVAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvL8ykKywIv+LjR3/paki/7W4 - I/+WmB7/mZsf/6CjIP+prCL/sLMj/7S3JP+1uCT/trgk/7W5JP+2uST/trkk/7a5JP+2uST/tbgk/7W4 - JP+1uCT/tbgk/7S3JP+0tyT/tbgk/7a5JP+0tyT/tLck/7S3JP+0tyT/tLgk/7S3JP+0tyT/tLck/7W3 - JP+qrSL/pagh/7CzL+B1eGBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv79AKK6x - J+WWmSD/m58f/5qcH/+cniD/mp0f/5ueHv+cnyD/m54g/5udIP+anSD/mJoe/5qcIP+anSD/mp0g/5ud - IP+anR7/mZwf/5qcH/+ZnB7/m50f/5qcH/+Ymh7/m50f/5yfH/+Ymh//l5kf/5eZH/+Xmh7/mZwf/5ue - IP+anR//m54g/56gIP+goyH/trkk/MDDNnL//wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAL/CNlC8vyrKur0m3bq+J966vifeu78n3ru/J967vyfeu78n3ru/J967vyfeu78n3ru/ - J967vyfeu78n3ru/J967vyfeu78n3ru/J967vyfeu78n3ru/J967vyfeu78n3ru/J967vyfeur4n3rq+ - KN66vijeu74n3ru/J967vybeu78n3ru/J968vyjYvsIyidXVVQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAG7zEQPuro7Gr29ORu9vTkbvcY5G73GORvGxjkbvcY5G73G - ORu9xjkbvcY5G73GORu9xjkbvcY5G73GORu9xjkbvcY5G73GORu9xjkbvcY5G73GORvGxjkbvcY5G73G - ORu9xjkbvcY5G729Qhu9vUIbvcY5G73GORu9xjkbvcY5G73GORu8yDcXzMwzBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPAAAAAAHwAA8AAAAAAfAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAA - AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP - AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA - AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP - AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAHAADwAAAAAAcAAPAA - AAAABwAA8AAAAAAHAADwAAAAAAcAAPAAAAAAAwAA8AAAAAADAADwAAAAAAMAAPAAAAAAAwAA8AAAAAAD - AAD4AAAAAA8AAPgAAAAADwAA/AAAAAAfAAD8AAAAAD8AACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgICAAmNjXjZfX123XV1c6F5eXeJfX13UXl5cxF9fXrNfX16mY2NflmNj - X4liYmCAYmJgeGBgXnVjY2FxYWFfdGBgXndhYV98YWFfhmBgX5RfX16jX19csWBgXcBeXl3RXV1c4F5e - XOVeXl6wX19fPkBAQAQAAAAAAAAAAAAAAABVVVUJZGRba2lqVfRyc07/dXZM/3V2TP91dkz/dXZM/3V2 - TP91dkz/dXZM/3V2TP91dkz/dXZM/3V2TP91dkz/dXVM/3R1Tf90dU3/dHVN/3V2TP91dkz/dXZM/3V2 - TP90dU3/bG5R/2BhWvpeXl6bXl5eGwAAAAAAAAAAAAAAAICATQqIiEdvnJ4297CyKv+ytSn/srUp/7Cz - Kf+wsyj/sLMo/6+yKP+vsij/rrEo/66xKP+tsCj/rbAo/6+yKP+ytSn/srQp/7G0Kf+xtCn/sbQp/7Cz - Kf+wsyj/srUp/7G0Kf+foTD/d3hJ/2FhXLZiYmInAAAAAAAAAAAAAAAAs7MzCrO1Lm+4uyf3ur0l/7K1 - I/+tryL/ra8j/62vIv+rriL/qqwi/6eqIf+lqCH/o6Yg/6GkIP+goiD/p6kh/66wIv+tryL/q60h/6ms - If+prCH/qqwi/66wIv+5vCT/sLIi/6irJP+KjDz/ZWVYsGNjYyQAAAAAAAAAAAAAAADGxjkJu8Aqbbu+ - Jfa6vST/s7Yj/66xI/+vsiP/sLMj/66xIv+nqSH/mZwf/5yeIP+foiD/oKMg/6KlIP+nqSH/qash/6ms - If+qrSH/qqwh/6yuIv+usCP/sbQj/6+xIv+jpiD/sbQk/5OVOv9paVeoYGBgIAAAAAAAAAAAAAAAAL+/ - QAi9vypou74m9Lq9JP+wsyP/qawi/6msIv+mqCH/pagg/6OlIP+goyD/ra8i/7G0I/+wsyT/sLMl/7G0 - Kf+wsy3/sLIx/7K0OP+yskD/sbFJ/7OyVP+urVn/m5wt/7GzI/+4uyb/l5k6/mtsVqBbW1scAAAAAAAA - AAAAAAAAttskB7y/KWO7vibxur0k/7GzJP+oqiz/q6w2/6ytP/+pqUf/qalR/6yqXv+vrGr/t7R6/765 - jP/Aupf/x8Cl/8zFs//Oxrr/1MvF/9fOzv/a0NX/39Tc/9nP2f+ko07/ur0l/7m8Jv+Zmjj9bW1Umlxc - XBkAAAAAAAAAAAAAAADV1SoGvL8qXLu+Ju27viX/rK0t/7mymP/Uy9D/3dLd/9/U5P/i1+n/59vw/+nd - 8v/q3fP/6t71/+re9v/s3/f/69/4/+zf+f/s4Pn/69/4/9jM5f/h1e7/6dz2/6elYf+6vST/uLsl/5qc - OPxvcVSVZGRkFwAAAAAAAAAAAAAAAMzMMwW8vylXu78m6ru+Jf+srS//ycG3/+zf+f/u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/69/5/9nO5v+Xj6H/XFdk/8O5z//r3/n/pKFr/6+x - I/+rriL/nJ42+3FzUZBhYWEVAAAAAAAAAAAAAAAAmZkzBbm/K1S6vSbptrkk/6qrLf/Iv7T/7N/4/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+fb9f+9tMj/YFtn/xgXHP9RTln/1cri/+3g - +v+opXn/qawi/6aoIv+fojX6dnZOj2ZmZhQAAAAAAAAAAAAAAAC/v0AEu74qT7q+J+asryP/o6Ur/8e+ - sv/s3/j/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//q3ff/t63B/1tZYf82NTn/JSQo/4R+ - jv/i1u//7eD7/7Criv+nqSH/pach/6GkNPp4ek6QYWFhFQAAAAAAAAAAAAAAAKqqVQO7vixLur4m46ut - Iv+ipCr/xr6w/+zf+P/u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7eH7/8i+0/9NSlP/EhMW/y8u - Mv9lY2v/wbfM/+ve+P/t4Pv/t7Ga/6aoIf+kpiH/o6Uz+3l7TJNdXV0WAAAAAAAAAAAAAAAA//8AArzA - KUW7vifeqq0i/6KkKf/Hv6//7N/4/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7g+//XzeX/YFtn/xAQ - Ev8kJSb/Xlxh/6mhsv/m2fL/7uH7/+3g+/+7taL/pqkj/6OmIf+kpjL8fX9NlWRkZBcAAAAAAAAAAAAA - AACAgAACv78sQLy+J9iprCL/o6Up/8fArv/s3/j/7uH7/+7h+//u4fv/7uH7/+7h+//u4Pv/4dXu/3Vv - fv8TERb/GBga/2VjZv+up7T/4NTt/+7h+//u4fv/7uH7/763p/+nqiT/oqQg/6WnMP2AgUuaZmZmGQAA - AAAAAAAAAAAAAP//AAG+wic7u78n06qsIv+kpin/x8Cs/+zf+P/u4fv/7uH7/+7h+//u4fv/7uD7/+fb - 9f+QiJr/Gxkf/w0MD/9VU1b/oZum/93R6f/t4Pr/7uH7/+7h+//u4fv/w7yv/6mrJv+foR//qKov/oCC - SqFkZGQcAAAAAAAAAAAAAAAA//8AAby8KDm8viXQq64i/6WoKP/Fv6n/7N/4/+7h+//u4fv/7uH7/+7h - +//s3/n/q6O3/yspMf8IBwv/QD9C/5aRmf/XzOP/7eD6/+7h+//u4fv/7uH7/+7h+//Jwbf/qawo/5ye - H/+pqy7/g4RJqGNjYx8AAAAAAAAAAAAAAAAAAAAAwMArNby+Jc2rriL/p6ko/8W9pv/s3/f/7uH7/+7h - +//u4fv/7eD6/9DG3P93cn3/IyMn/zMyNP+Oio//zsPY/+3g+v/u4fv/7uH7/+7h+//u4fv/7uH7/8zE - vv+oqir/nZ8f/6qsLf+EhEewY2NcJAAAAAAAAAAAAAAAAAAAAAC+vigzu74ny6uuIv+nqif/xL2j/+zf - 9//u4fv/7uH7/+7h+//o3PX/joeX/zMxOP9EQ0j/ZmNp/8K4y//t3/r/7eD7/+7h+//u4fv/7uH7/+7h - +//u4fv/zsXD/6eqK/+eoR//qq0s/4SGSLlkZF0pAAAAAAAAAAAAAAAAAAAAAL+/KjC7vijHrK8i/6eq - Jv/Aup//69/3/+7h+//u4fv/7uH7/+fa9P+1rMH/Y15r/0dETf+2rsD/7N/4/+7h+//u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//Oxcb/p6kt/5+iIP+qrCv/hYZIxGVlYDAAAAAAAAAAAAAAAAAAAAAAt7wsLru9 - J8KrriL/p6ol/764m//r3vf/7uH7/+7h+//p3Pb/urDF/5CJmv+6scb/xrvS/+jb9P/u4fv/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/87FyP+nqC7/oaMg/6qtKv+FhkbPZGRbOAAAAAEAAAAAAAAAAAAA - AAC4viorur4ovauuIv+nqST/vbeY/+jb8//IvtX/wLbM/9nN5f9+eIj/SUZQ/8C2y//t4Pr/7uH7/+7h - +//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/z8XL/6anMP+goiD/q60o/4eIRNpkZFlCgICAAgAA - AAAAAAAAAAAAALe+Lie7vie1qqwh/6WnI/+6tZT/xrzQ/0hFT/9OS1b/u7HH/46Gl/9KR1H/vLLH/+3g - +v/u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//TydH/pqc1/6CjIP+rrSf/h4hD5WVp - XE5AQEAEAAAAAAAAAAAAAAAAuL8rJLu+J7CprCH/o6Yi/7axkP+upbf/FRUZ/3Bqef/Zzeb/qqG0/zs4 - P/+Wjp//59v0/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/9jN2f+mpzv/oaMg/6qs - Jv+HiETuZ2dcXoCAgAYAAAAAAAAAAAAAAAC5uS4hvL8nqqmsIv+jpiD/s66J/9jN4v9KR0//dnB9/7+1 - yv9xbHj/Hx4h/4uDk//l2fL/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/7uH7/+7h+//u4fv/29Df/6Wl - QP+ipCD/qawl/4aIQvdnZ1pvZmZmCgAAAAAAAAAAAAAAALvDKh67viimqawi/6SnIP+xrYH/6d30/8i+ - 1P9cWGH/Liww/x4dIP9RTVb/w7jP/+zf+f/u4fv/7uH7/+7h+//u4fv/7eD7/+3g+//t4Pv/7eD7/+zg - +v/b0eP/paRF/6OlIP+prCT/iYtB+2dnWoNmZmYPAAAAAAAAAAAAAAAAtr8uHLy+KKCsriL+qKsh/6ik - b//o3PL/7eD6/9/T7P+8ssf/tau//9bK4v/r3vn/7uH7/+3h+//s4Pr/6974/+nd9//o3PT/5tvy/+TZ - 7v/j2Ov/4Nbm/9LK0P+lpUf/o6Yh/6mrJP+LjED/ZmZZnWFhYRUAAAAAAAAAAAAAAAC/vyoYvL8omLW4 - I/yztiP/pKJj/+PZ7//p3Pb/5try/+XZ7v/j1+n/4NTk/97T3v/a0NX/187P/9PKxf/Px7v/y8Sx/8bA - pP/CvJn/vbiK/7m2ff+0sWz/rKpY/6mrLv+nqSD/qq0k/42PPv9nZ1m4XV1dHgAAAAAAAAAAAAAAALbC - MRW6vieRur0l+7i7JP+fn0r/x8Gn/8rEpP/FwJj/wr2M/7+8gf+7uHT/uLdo/7SyWv+ysU//sbFF/6+v - O/+urzT/ra8u/7CyKv+0tib/trkl/7i7JP+6vST/ubwl/7O1I/+ztiX/j5E9/2ZmWM5dXV0pAAAAAAAA - AAAAAAAAuLgrEru+J4q5vCX5q64i/6GjKP+urzj/ra8z/6utLf+qrCn/qKsm/6eqI/+nqSH/pqgh/6Wn - If+kpiD/o6Yg/6WnIP+prCH/s7Yj/7q9Jf+7viX/u74l/7u+Jf+7viX/ur0k/7i7Jf+SlDz+Z2dYw2Bg - YCUAAAAAAAAAAAAAAADIyDcOtbkogKirIvajpSD/o6Yg/6CiIP+hoyD/oqUg/6OmIf+kpiH/pKcg/6ao - If+nqSH/p6oh/6irIf+prCH/q60h/62wIv+ytSP/tLck/7S3JP+0uCT/tbgk/7W4JP+ytST/r7Ej/Zqd - NtVzc1JmYmJiDQAAAAAAAAAAAAAAAJnMMwWxtyhSpqgk1qKlIP2jpSD/oKMg/6GkIP+ipSH/oqUh/6Kk - IP+jpSH/o6Yh/6SnIP+kpyD/pKch/6WnIf+kpyH/pKch/6WoIf+jpiH/oqUh/6OmIf+lqCH/pagh/6iq - Iv6usCTpsrYtd5ShQxMAAAABAAAAAAAAAAAAAAAAAAAAAL+/Kgy3ui5DuLosc7e7LXy5vS18ub0tfLm9 - K3y5vSt8ub0rfLm9K3y5vSt8ub0rfLm9K3y5vSt8ub0rfLm9K3y5vSt8ub0rfLm7K3y7vS57ubstfLm9 - K3y5vSt8u70qeLq9LVW5xS4WAAAAAAAAAAAAAAAAgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AA - AAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA8AAAAPAAAADwAAAA8AAAAHAAAABwAAAAcAA - AAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAcoAAAAEAAAACAAAAABACAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbW1JB2RkWYdnZ1XwaWlV5WpqVdZsbFXHbGxUvWxsVLlsbFS6amxUwGpr - Vc1paVXcaGhV62JiWNthYVw6////AaqqOQmjpDSms7Yn/7G0Jv+wsyb/rK8l/6qtJf+prCX/sLIm/7K0 - Jv+wsyb/sbQm/6+yJv+Njjv+bXBSYEBAQASqxhwJur0mo7W4JP+rriT/qq0o/6KkK/+kpTD/qKk2/66u - Pf+wsEL/srJJ/7OzR/+vsC7/mpw0/np9TVZVVVUDv78gCLu+Jpq2uDD/t7Rk/8K9iP/Fv5L/zcad/9DJ - qP/UzLP/0sq5/8a+tf+/uKf/uLhU/6CiNPyBgUlNgICAAr+/IAi5vSaSt7hB/87Gs//r3vf/7eD6/+3g - +v/u4fv/6dz2/6yjtf9+eIf/v7e//7e2ZP+gojH7hYhGSYCAgAK2tiQHtrkni7KyP//QyLX/7uH7/+7h - +//u4fv/7eD6/6Wdr/9APkX/d3J//9TK2P+2s2r/oKIu+4aKRUqAgIAC1dUqBra4KIGwsT7/0cm0/+7h - +//u4fv/7eD7/8G3zf8sKjD/a2hu/8/E2v/i1+n/uLVv/6GjLf2JiUVOgICAAqqqKgaztyR5sLE9/9HJ - sv/u4fv/7uH7/9fM5P81Mjv/Tk1R/8zC1v/s3/n/5tnt/7m1dP+kpyz+hYhEVlVVVQPMzDMFtrgmc7Gx - PP/RybD/7uH7/+ve+P99d4X/RENH/8G4yf/t4Pr/7uH7/+fb8P+7t3j/pacr/4OGR2FAQEAEmZkzBba4 - KGywsTr/zcar/+nd9v/Wy+P/mZGj/6Obrf/t4Pr/7uH7/+7h+//n2/L/vLh7/6apKv+AgkhyZmZmBb+/ - QAS1uCZkr684/7WvkP+2rcL/kYqb/5aOoP/o2/X/7uH7/+7h+//u4fv/6Nzz/725fv+nqSn/foBGhm1t - SQeqqgADtLQkXKytNv+emnf/fniG/3Jtev+CfIv/6Nv0/+7h+//u4fv/7uH7/+nd9v+/u4X/p6kq/3t7 - SaBVVVUJqqoAA7a5JFStrzL+vriT/760yf+Xj5//tq3B/+re9//q3vj/59vy/+LW6v/b0dz/ubZ5/6iq - Kf94eUq9XV1dC///AAK5vCVMsrUt/Lq4dv/Ox7D/xL6a/8bBkf/FwIX/wb52/768av++vGD/vr5X/7e4 - O/+wsyb/eHpL2mBgUBCAgAACs7cmQ6yvJPmnqC3/qqs1/6iqMf+nqC3/pacp/6anJf+prCP/srUk/7a5 - JP+2uST/s7Yk/oKERLB0dEYLAAAAAKStJByrriWXqq0jvaqtI72qrSO9qa0jvamrI72qqyO9qq0jvaqu - JL2qrSS9q64kvbCzJaWoriwpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA= + 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 + vgAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/Resources/fundrawLogo.png b/Resources/fundrawLogo.png new file mode 100644 index 0000000..c0d7072 Binary files /dev/null and b/Resources/fundrawLogo.png differ diff --git a/Resources/dsadsad.png b/Resources/logo.png similarity index 100% rename from Resources/dsadsad.png rename to Resources/logo.png diff --git a/Resources/medal1.png b/Resources/medal1.png new file mode 100644 index 0000000..da0295e Binary files /dev/null and b/Resources/medal1.png differ diff --git a/Resources/medal2.png b/Resources/medal2.png new file mode 100644 index 0000000..af080eb Binary files /dev/null and b/Resources/medal2.png differ diff --git a/Resources/medal3.png b/Resources/medal3.png new file mode 100644 index 0000000..0547575 Binary files /dev/null and b/Resources/medal3.png differ diff --git a/Session.cs b/Session.cs index d259c3c..16706fa 100644 --- a/Session.cs +++ b/Session.cs @@ -17,10 +17,9 @@ public class Session public Session() { accessToken = LocalStorage.GetAccessToken(); - refreshToken = LocalStorage.GetRefreshToken(); } public static string accessToken { get; set; } = ""; - public static string refreshToken { get; set; } = ""; + public static string username { get; set; } = ""; public static async Task Login(string username, string password) { @@ -33,10 +32,11 @@ public static async Task Login(string username, string password) JObject response = await HTTPClient.PostFormUrlEncodedAsync($"{AppConfig.APP_API_HOST}/auth/login", userCredentials); if (response.ContainsKey("error")) return false; var data = JsonConvert.DeserializeObject(response.ToString()); - if (data?.data?.accessToken != null && data?.data?.refreshToken != null) + if (data?.data?.accessToken != null) { + Session.accessToken = data.data.accessToken; + Session.username = data.data.user.username; LocalStorage.SetAccessToken(data.data.accessToken); - LocalStorage.SetRefreshToken(data.data.refreshToken); return true; } return false; @@ -44,11 +44,14 @@ public static async Task Login(string username, string password) public static async Task Logout() { - string refreshToken = LocalStorage.GetRefreshToken(); - JObject response = await HTTPClient.PostAsync($"{AppConfig.APP_API_HOST}/auth/logout", $"refreshToken={refreshToken}"); - if (response.ContainsKey("error")) return false; + string accessToken = LocalStorage.GetAccessToken(); + JObject response = await HTTPClient.PostAsync($"{AppConfig.APP_API_HOST}/auth/logout", $"accessToken={accessToken}"); LocalStorage.SetAccessToken(string.Empty); - LocalStorage.SetRefreshToken(string.Empty); + if (Gateway.socketState) + { + Gateway.Instance.Disconnect(); + } + if (response.ContainsKey("error")) return false; return true; } @@ -58,6 +61,7 @@ public static async Task Register(string username, string password, string { { "username", username }, { "password", password }, + { "confirm_password", password }, { "email", email } }; @@ -65,16 +69,6 @@ public static async Task Register(string username, string password, string return !response.ContainsKey("error"); } - public static async Task RefreshToken() - { - string refreshToken = LocalStorage.GetRefreshToken(); - JObject response = await HTTPClient.PostAsync($"{AppConfig.APP_API_HOST}/auth/refresh-token", $"refreshToken={refreshToken}"); - if (response.ContainsKey("Error")) return; - var data = JsonConvert.DeserializeObject(response.ToString()); - LocalStorage.SetAccessToken(data.data.accessToken); - LocalStorage.SetRefreshToken(data.data.refreshToken); - } - public static async Task RefreshTokenForFeature(string path, Dictionary requestData) { Dictionary headers = new Dictionary @@ -90,7 +84,7 @@ public static async Task RefreshTokenForFeature(string path, Dictionary ChangePassword(string new_pass) { try { + Dictionary headers = new Dictionary + { + { "Authorization", $"Bearer {accessToken}" } + }; var requestData = new Dictionary { { "password", new_pass }, { "confirm_password", new_pass } }; - if (await RefreshTokenForFeature("/users/reset-password", requestData)) + JObject response = await HTTPClient.PostFormUrlEncodedAsync($"{AppConfig.APP_API_HOST}/users/change-password", requestData, headers); + if (!response.ContainsKey("error")) { Debug.WriteLine("Changed Password Successfully"); return true; @@ -152,7 +151,7 @@ public static async Task ForgotPassword(string email) { var requestData = new Dictionary { - { "email", email } + { "email", email } }; JObject response = await HTTPClient.PostFormUrlEncodedAsync($"{AppConfig.APP_API_HOST}/users/reset-password", requestData); @@ -171,24 +170,52 @@ public static async Task ForgotPassword(string email) return false; } } + + public static async Task PasswordOTP(string email, string otp, string password, string confirm_password) + { + try + { + var requestData = new Dictionary + { + { "email", email }, + { "otp", otp }, + { "password", password }, + { "confirm_password", confirm_password } + }; + + JObject response = await HTTPClient.PostFormUrlEncodedAsync($"{AppConfig.APP_API_HOST}/users/reset-otp", requestData); + + if (response.ContainsKey("error")) + { + return false; + } + + Debug.WriteLine("Successfully changed user password!"); + return true; + } + catch (Exception ex) + { + Debug.WriteLine("An error occurred: " + ex.Message); + return false; + } + } + public static async Task GetUserProfile() { string accessToken = LocalStorage.GetAccessToken(); Dictionary headers = new Dictionary - { - { "Authorization", $"Bearer {accessToken}" } - }; + { + { "Authorization", $"Bearer {accessToken}" } + }; JObject response = await HTTPClient.GetAsync($"{AppConfig.APP_API_HOST}/users/profile", "", headers); if (response.ContainsKey("error")) { - throw new Exception("Unable to fetch user profile"); + return null; } - var profile = JsonConvert.DeserializeObject(response.ToString()); + UserProfile profile = JsonConvert.DeserializeObject(response["data"].ToString()); return profile; } - - } } \ No newline at end of file diff --git a/Types/Data.cs b/Types/Data.cs index 8c39f41..1401417 100644 --- a/Types/Data.cs +++ b/Types/Data.cs @@ -8,30 +8,41 @@ namespace FunDraw.Types { public class Data { - public UserData user; - public string accessToken; - public string refreshToken; + public UserData user = new UserData(); + public string accessToken = ""; + public string refreshToken = ""; } public class UserData { - public string id; - public string username; - public string email; + public string id = ""; + public string username = ""; + public string email = ""; public DateTime createdAt; - public string avatar; + public string avatar = ""; } public class TokenData { - public string accessToken; - public string refreshToken; + public string accessToken = ""; } public class UserProfile { - public string Username { get; set; } - public string ID { get; set; } + public string Username { get; set; } = ""; + public string ID { get; set; } = ""; public DateTime JoinedDate { get; set; } - public string Email { get; set; } + public string Email { get; set; } = ""; + } + public class PlayerList + { + public string id { get; set; } = ""; + public int score { get; set; } = 0; + public string name { get; set; } = ""; + } + public enum DrawCommand + { + CLEAR, + PENCIL, + ERASER } } diff --git a/WaitingRoom.Designer.cs b/WaitingRoom.Designer.cs new file mode 100644 index 0000000..04fedee --- /dev/null +++ b/WaitingRoom.Designer.cs @@ -0,0 +1,190 @@ +namespace FunDraw +{ + partial class WaitingRoom + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges3 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges4 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges1 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges2 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges5 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + Guna.UI2.WinForms.Suite.CustomizableEdges customizableEdges6 = new Guna.UI2.WinForms.Suite.CustomizableEdges(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitingRoom)); + guna2Panel1 = new Guna.UI2.WinForms.Guna2Panel(); + chatBox = new RichTextBox(); + chatInput = new Guna.UI2.WinForms.Guna2TextBox(); + label1 = new Label(); + lbWaiting = new Label(); + btInvite = new Guna.UI2.WinForms.Guna2Button(); + flowLayoutPanel1 = new FlowLayoutPanel(); + guna2Panel1.SuspendLayout(); + SuspendLayout(); + // + // guna2Panel1 + // + guna2Panel1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; + guna2Panel1.BorderRadius = 20; + guna2Panel1.Controls.Add(chatBox); + guna2Panel1.Controls.Add(chatInput); + guna2Panel1.CustomizableEdges = customizableEdges3; + guna2Panel1.FillColor = Color.Gainsboro; + guna2Panel1.ForeColor = SystemColors.AppWorkspace; + guna2Panel1.Location = new Point(496, 9); + guna2Panel1.Margin = new Padding(3, 2, 3, 2); + guna2Panel1.Name = "guna2Panel1"; + guna2Panel1.ShadowDecoration.CustomizableEdges = customizableEdges4; + guna2Panel1.Size = new Size(206, 487); + guna2Panel1.TabIndex = 0; + // + // chatBox + // + chatBox.BackColor = Color.Gainsboro; + chatBox.BorderStyle = BorderStyle.None; + chatBox.Location = new Point(0, 24); + chatBox.Name = "chatBox"; + chatBox.Size = new Size(206, 428); + chatBox.TabIndex = 2; + chatBox.Text = ""; + // + // chatInput + // + chatInput.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + chatInput.BorderRadius = 20; + customizableEdges1.TopLeft = false; + customizableEdges1.TopRight = false; + chatInput.CustomizableEdges = customizableEdges1; + chatInput.DefaultText = ""; + chatInput.DisabledState.BorderColor = Color.FromArgb(208, 208, 208); + chatInput.DisabledState.FillColor = Color.FromArgb(226, 226, 226); + chatInput.DisabledState.ForeColor = Color.FromArgb(138, 138, 138); + chatInput.DisabledState.PlaceholderForeColor = Color.FromArgb(138, 138, 138); + chatInput.FillColor = Color.FromArgb(76, 175, 80); + chatInput.FocusedState.BorderColor = Color.FromArgb(94, 148, 255); + chatInput.Font = new Font("Segoe UI", 9F, FontStyle.Bold); + chatInput.ForeColor = Color.Black; + chatInput.HoverState.BorderColor = Color.FromArgb(94, 148, 255); + chatInput.Location = new Point(0, 447); + chatInput.Name = "chatInput"; + chatInput.PasswordChar = '\0'; + chatInput.PlaceholderForeColor = Color.DarkGray; + chatInput.PlaceholderText = ""; + chatInput.SelectedText = ""; + chatInput.ShadowDecoration.CustomizableEdges = customizableEdges2; + chatInput.Size = new Size(206, 40); + chatInput.TabIndex = 1; + chatInput.KeyDown += chatInput_KeyDown; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + label1.ForeColor = SystemColors.ActiveCaptionText; + label1.Location = new Point(10, 9); + label1.Name = "label1"; + label1.Size = new Size(78, 21); + label1.TabIndex = 3; + label1.Text = "ID: %id%"; + // + // lbWaiting + // + lbWaiting.Anchor = AnchorStyles.Top | AnchorStyles.Bottom; + lbWaiting.AutoSize = true; + lbWaiting.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point, 0); + lbWaiting.ForeColor = SystemColors.ActiveCaptionText; + lbWaiting.Location = new Point(212, 23); + lbWaiting.Name = "lbWaiting"; + lbWaiting.Size = new Size(267, 21); + lbWaiting.TabIndex = 5; + lbWaiting.Text = "Waiting for host to start the game"; + // + // btInvite + // + btInvite.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + btInvite.Animated = true; + btInvite.BackColor = Color.Transparent; + btInvite.BorderRadius = 12; + btInvite.CustomizableEdges = customizableEdges5; + btInvite.DisabledState.BorderColor = Color.DarkGray; + btInvite.DisabledState.CustomBorderColor = Color.DarkGray; + btInvite.DisabledState.FillColor = Color.FromArgb(169, 169, 169); + btInvite.DisabledState.ForeColor = Color.FromArgb(141, 141, 141); + btInvite.FillColor = Color.FromArgb(160, 210, 235); + btInvite.Font = new Font("Segoe UI", 11.25F, FontStyle.Bold, GraphicsUnit.Point, 0); + btInvite.ForeColor = Color.Black; + btInvite.Location = new Point(245, 61); + btInvite.Margin = new Padding(4, 3, 4, 3); + btInvite.Name = "btInvite"; + btInvite.ShadowDecoration.CustomizableEdges = customizableEdges6; + btInvite.Size = new Size(195, 38); + btInvite.TabIndex = 26; + btInvite.Text = "Invite"; + btInvite.Click += btInvite_Click; + // + // flowLayoutPanel1 + // + flowLayoutPanel1.BorderStyle = BorderStyle.FixedSingle; + flowLayoutPanel1.Location = new Point(12, 33); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new Size(185, 463); + flowLayoutPanel1.TabIndex = 38; + // + // WaitingRoom + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = SystemColors.ButtonFace; + ClientSize = new Size(713, 511); + Controls.Add(flowLayoutPanel1); + Controls.Add(btInvite); + Controls.Add(lbWaiting); + Controls.Add(label1); + Controls.Add(guna2Panel1); + ForeColor = SystemColors.ControlDark; + FormBorderStyle = FormBorderStyle.FixedSingle; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(3, 2, 3, 2); + MaximizeBox = false; + Name = "WaitingRoom"; + Text = "Waiting Room"; + Load += WaitingRoom_Load; + guna2Panel1.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Guna.UI2.WinForms.Guna2Panel guna2Panel1; + private Guna.UI2.WinForms.Guna2TextBox chatInput; + private Label label1; + private Label lbWaiting; + private Guna.UI2.WinForms.Guna2Button btInvite; + private FlowLayoutPanel flowLayoutPanel1; + private RichTextBox chatBox; + } +} \ No newline at end of file diff --git a/WaitingRoom.cs b/WaitingRoom.cs new file mode 100644 index 0000000..72fcdb1 --- /dev/null +++ b/WaitingRoom.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using SocketIOClient; +using System.Diagnostics; +using FunDraw.Components; +using FunDraw.Types; +namespace FunDraw +{ + public partial class WaitingRoom : Form + { + public WaitingRoom() + { + InitializeComponent(); + flowLayoutPanel1.Controls.Clear(); + + label1.Text = $"ID: {GameManager.roomId.Insert(4, "-")}"; + + Gateway.Instance.On("playerList", updatePlayerList); + Gateway.Instance.On("chatMessage", chatMessageHandler); + Gateway.Instance.On("roomClosed", gameStateHandler); + Gateway.Instance.On("startGame", startGameHandler); + } + + private void WaitingRoom_Load(object sender, EventArgs e) + { + Gateway.Instance.Emit("playerList", new { roomId = GameManager.roomId }); + } + + private void updatePlayerList(SocketIOResponse response) + { + PlayerList[] data = response.GetValue(); + + Invoke((MethodInvoker)(() => flowLayoutPanel1.Controls.Clear())); + + for (int i = 0; i < data.Length; i++) + { + PlayerCard pc = new PlayerCard(); + pc.PlayerName = $"{data[i].name}"; + pc.PlayerScore = data[i].score; + + Invoke((MethodInvoker)(() => flowLayoutPanel1.Controls.Add(pc))); + } + } + + private void gameStateHandler(SocketIOResponse response) + { + MessageBox.Show("Room is closed because host left the room!", "Room Closed", MessageBoxButtons.OK, MessageBoxIcon.Information); + FormState.MainMenuForm(); + Invoke((MethodInvoker)(() => this.Close())); + } + + private void chatMessageHandler(SocketIOResponse response) + { + var result = response.GetValue(); + var data = JsonConvert.DeserializeObject(result); + + Invoke((MethodInvoker)(() => chatBox.AppendText($"{data["sender"]}: {data["message"]}\n"))); + } + + private void startGameHandler(SocketIOResponse response) + { + var result = response.GetValue(); + var data = JsonConvert.DeserializeObject(result); + if (data.ContainsKey("error")) + { + GameManager.gameStart = false; + MessageBox.Show("Something went wrong!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + GameManager.gameStart = true; + FormState.GameRoomForm(); + Invoke((MethodInvoker)(() => this.Close())); + } + + private void btInvite_Click(object sender, EventArgs e) + { + Clipboard.SetText(GameManager.roomId.Insert(4, "-")); + MessageBox.Show("Copied room code to clipboard!"); + } + + private void chatInput_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter && chatInput.Focused) + { + Gateway.Instance.Emit("chatMessage", new { roomId = GameManager.roomId, message = chatInput.Text }); + chatInput.Clear(); + e.Handled = true; + e.SuppressKeyPress = true; + } + } + } +} diff --git a/main_menu.resx b/WaitingRoom.resx similarity index 99% rename from main_menu.resx rename to WaitingRoom.resx index c8443ba..21d3f7b 100644 --- a/main_menu.resx +++ b/WaitingRoom.resx @@ -117,9 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - diff --git a/main_menu.cs b/main_menu.cs deleted file mode 100644 index c24f6c9..0000000 --- a/main_menu.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace FunDraw -{ - public partial class main_menu : Form - { - public main_menu() - { - InitializeComponent(); - this.MinimumSize = new Size(883, 500); - } - - private void tbMaPhong_Enter(object sender, EventArgs e) - { - if (tbMaPhong.Text == "Mã phòng") - { - tbMaPhong.Text = ""; - tbMaPhong.ForeColor = Color.Black; - } - } - - private void tbMaPhong_Leave(object sender, EventArgs e) - { - if (tbMaPhong.Text == "") - { - tbMaPhong.Text = "Mã phòng"; - tbMaPhong.ForeColor = Color.FromArgb(125, 137, 149); - } - } - - private async void btDangXuat_Click(object sender, EventArgs e) - { - if (await Session.Logout()) - { - MessageBox.Show("Đăng xuất thành công", "Thành công", MessageBoxButtons.OK, MessageBoxIcon.Information); - Close(); - } - else - { - MessageBox.Show("Đăng xuất thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } -}