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);
- }
- }
- }
-}